#!/bin/sh
#
# configure -- custom configure script for ScummVM.
#
# ScummVM is the legal property of its developers, whose names
# are too numerous to list here. Please refer to the COPYRIGHT
# file distributed with this source distribution.
#
# This program is free software; 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#

# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# Save the current environment variables for next runs
SAVED_CONFIGFLAGS=$@
SAVED_LDFLAGS=$LDFLAGS
SAVED_CXX=$CXX
SAVED_CXXFLAGS=$CXXFLAGS
SAVED_CPPFLAGS=$CPPFLAGS
SAVED_ASFLAGS=$ASFLAGS
SAVED_WINDRESFLAGS=$WINDRESFLAGS

# Use environment vars if set
CXXFLAGS="$CXXFLAGS $CPPFLAGS"

# Backslashes into forward slashes:
# The following OS/2 specific code is performed to deal with handling of backslashes by ksh.
# Borrowed from the Sane configure script

if test "$ac_emxsupport" != "no" -a "$ac_emxsupport" != "NO"; then
	ac_save_IFS="$IFS"
	IFS="\\"
	ac_TEMP_PATH=
	for ac_dir in $PATH; do
		IFS=$ac_save_IFS
		if test -z "$ac_TEMP_PATH"; then
			ac_TEMP_PATH="$ac_dir"
		else
			ac_TEMP_PATH="$ac_TEMP_PATH/$ac_dir"
		fi
	done
	PATH="$ac_TEMP_PATH"
	export PATH
	unset ac_TEMP_PATH
fi

set_var() {
	eval ${1}='${2}'
}

get_var() {
	eval echo \$${1}
}

# Add an engine: id name build subengines base-games dependencies
add_engine() {
	_engines="${_engines} ${1}"
	if test "${3}" = "no" ; then
		set_var _wip_engines "${_wip_engines} ${1}"
	fi
	set_var _engine_${1}_name "${2}"
	set_var _engine_${1}_build "${3}"
	set_var _engine_${1}_build_default "${3}"
	set_var _engine_${1}_subengines "${4}"
	set_var _engine_${1}_base "${5}"
	set_var _engine_${1}_deps "${6}"
	for sub in ${4}; do
		set_var _engine_${sub}_sub "yes"
		set_var _engine_${sub}_parent "${1}"
	done
}

# Add a feature: id name settings-list
add_feature() {
	set_var _feature_${1}_name "${2}"
	# This is a list of settings, where one must be "yes" for the feature to
	# be enabled
	set_var _feature_${1}_settings "${3}"
}

_srcdir=`dirname $0`

# Read list of engines
for i in $_srcdir/engines/*/configure.engine; do
	. "$i"
done

#
# Default settings
#
#ResidualVM defaults: faad=no, opengles=no, tremor=no mt32emu=no, translation=no,
# flac=no, seq_midi=no, snd_io=no, timidity=no fluidsynth=no, opengles2=no
# eventrec=no, build_scalers=no, build_hq_scalers=no
#
# Default lib behaviour yes/no/auto
_vorbis=auto
_tremor=no
_tremolo=no
_flac=no
_mad=auto
_alsa=auto
_seq_midi=no
_sndio=no
_timidity=no
_zlib=auto
_mpeg2=auto
_sparkle=auto
_jpeg=auto
_png=auto
_theoradec=auto
_faad=no
_fluidsynth=no
_opengl=auto
_opengles=no
_opengles2=no
_opengl_shaders=no
_readline=auto
_freetype2=auto
_iconv=auto
_taskbar=auto
_updates=no
_libunity=auto
# Default option behavior yes/no
_debug_build=auto
_release_build=auto
_optimizations=auto
_use_cxx11=no
_verbose_build=no
_text_console=no
_mt32emu=no
_build_scalers=no
_build_hq_scalers=no
_enable_prof=no
_global_constructors=no
_bink=yes
_safedisc=no
# Default vkeybd/keymapper/eventrec options
_vkeybd=no
_keymapper=no
_eventrec=no
# GUI translation options
_translation=no
# Default platform settings
_backend=sdl
_16bit=auto
_savegame_timestamp=auto
_dynamic_modules=no
_elf_loader=no
_plugins_default=static
_plugin_prefix=
_plugin_suffix=
_nasm=auto
_optimization_level=
_default_optimization_level=-O2
# Default commands
_ranlib=ranlib
_strip=strip
_ar="ar cru"
_as="as"
_windres=windres
_stagingpath="staging"
_win32path="C:/residualvm"
_amigaospath="Games:ResidualVM"
_staticlibpath=
_sdlconfig=sdl-config
_freetypeconfig=freetype-config
_sdlpath="$PATH"
_freetypepath="$PATH"
_nasmpath="$PATH"
NASMFLAGS=""
NASM=""
_tainted_build=no
# The following variables are automatically detected, and should not
# be modified otherwise. Consider them read-only.
_posix=no
_endian=unknown
_need_memalign=yes
_have_x86=no

# Add (virtual) features
add_feature 16bit "16bit color" "_16bit"
add_feature faad "libfaad" "_faad"
add_feature flac "FLAC" "_flac"
add_feature freetype2 "FreeType2" "_freetype2"
add_feature mad "MAD" "_mad"
add_feature jpeg "JPEG" "_jpeg"
add_feature png "PNG" "_png"
add_feature theoradec "libtheoradec" "_theoradec"
add_feature vorbis "Vorbis file support" "_vorbis _tremor"
add_feature zlib "zlib" "_zlib"



# Directories for installing ScummVM.
# This list is closely based on what GNU autoconf does,
# although the default value for datadir differs.
# Like GNU autoconf, we distinguish datadir and datarootdir
# to make it possible to change e.g. the location of the
# man pages independently of that of the engine data files,
# which are placed inside $datadir/residualvm
prefix=NONE
exec_prefix=NONE
bindir='${exec_prefix}/bin'
libdir='${exec_prefix}/lib'
datarootdir='${prefix}/share'
datadir='${datarootdir}/residualvm'
mandir='${datarootdir}/man'
docdir='${datarootdir}/doc/residualvm'
#localedir='${datarootdir}/locale'

# For cross compiling
_host=""
_host_cpu=""
_host_vendor=""
_host_os=""
_host_alias=""

_port_mk="ports.mk"

# Use temp files in the build directory
TMPO=./residualvm-conf
TMPC=${TMPO}.cpp
TMPLOG=config.log

cc_check_no_clean() {
	echo >> "$TMPLOG"
	cat "$TMPC" >> "$TMPLOG"
	echo >> "$TMPLOG"
	echo "$CXX $LDFLAGS $CXXFLAGS $TMPC -o $TMPO$HOSTEXEEXT $@" >> "$TMPLOG"
	rm -f "$TMPO$HOSTEXEEXT"
	if test "-c" = "$*" ; then
		( $CXX $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1
	else
		( $CXX $LDFLAGS $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1
	fi
	TMPR="$?"
	echo "return code: $TMPR" >> "$TMPLOG"
	echo >> "$TMPLOG"
	return "$TMPR"
}

cc_check_clean() {
	rm -rf $TMPC $TMPO $TMPO.o $TMPO.dSYM $TMPO$HOSTEXEEXT "$@"
}

cc_check() {
	cc_check_no_clean "$@"
	TMPR="$?"
	cc_check_clean
	return "$TMPR"
}

cc_check_define() {
cat > $TMPC << EOF
int main(void) {
	#ifndef $1
	syntax error
	#endif
	return 0;
}
EOF
	cc_check -c
	return $?
}

gcc_get_define() {
	echo "" | $CXX -dM -E - | fgrep "$1" | head -n1 | cut -d ' ' -f 3-
}

#
# Function to provide echo -n for bourne shells that don't have it
#
echo_n() {
	printf "$@"
}

echocheck() {
	echo_n "Checking for $@... "
}

# Add a line of data to config.mk.
add_line_to_config_mk() {
	_config_mk_data="$_config_mk_data"'
'"$1"
}

# Add a line of data to config.h.
add_line_to_config_h() {
	_config_h_data="$_config_h_data"'
'"$1"
}

# Conditionally add a line of data to config.h. Takes two parameters:
# The first one can be set to 'no' to "comment out" the line, i.e.
# make it ineffective, use 'yes' otherwise.
# The second param is the line to insert.
add_to_config_h_if_yes() {
	if test "$1" = yes ; then
		add_line_to_config_h "$2"
	else
		add_line_to_config_h "/* $2 */"
	fi
}

# Conditionally add a line of data to config.mk. Takes two parameters:
# The first one can be set to 'no' to "comment out" the line, i.e.
# make it ineffective, use 'yes' otherwise.
# The second param is the line to insert.
add_to_config_mk_if_yes() {
	if test "$1" = yes ; then
		add_line_to_config_mk "$2"
	else
		add_line_to_config_mk "# $2"
	fi
}

# Conditionally add a '#define' line to config.h. Takes two parameters:
# The first one can be set to 'yes' or 'no'. If 'yes' is used, then
# the line "#define $2" is added to config.h, otherwise "#undef $2".
define_in_config_h_if_yes() {
	if test "$1" = yes ; then
		add_line_to_config_h "#define $2"
	else
		add_line_to_config_h "#undef $2"
	fi
}

# Conditionally add definitions to config.h and config.mk. Takes two parameters:
# The first one can be set to 'yes' or 'no'. If 'yes' is used, then
# the line "#define $2" is added to config.h and "$2 = 1" to config.mk.
# Otherwise "#undef $2" is added to config.h and "# $2 = 1" to config.mk
define_in_config_if_yes() {
	if test "$1" = yes ; then
		add_line_to_config_h "#define $2"
		add_line_to_config_mk "$2 = 1"
	else
		add_line_to_config_h "#undef $2"
		add_line_to_config_mk "# $2 = 1"
	fi
}

#
# Determine sdl-config
#
# TODO: small bit of code to test sdl usability
find_sdlconfig() {
	echo_n "Looking for sdl-config... "
	sdlconfigs="$_sdlconfig:sdl-config:sdl11-config:sdl12-config"
	_sdlconfig=

	IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR"
	for path_dir in $_sdlpath; do
		#reset separator to parse sdlconfigs
		IFS=":"
		for sdlconfig in $sdlconfigs; do
			if test -f "$path_dir/$sdlconfig" ; then
				_sdlconfig="$path_dir/$sdlconfig"
				echo $_sdlconfig
				# Save the prefix
				_sdlpath=$path_dir
				if test `basename $path_dir` = bin ; then
					_sdlpath=`dirname $path_dir`
				fi
				# break at first sdl-config found in path
				break 2
			fi
		done
	done

	IFS="$ac_save_ifs"

	if test -z "$_sdlconfig"; then
		echo "none found!"
		exit 1
	fi
}

#
# Determine freetype-config
#
find_freetypeconfig() {
	echo_n "Looking for freetype-config... "
	freetypeconfigs="$_freetypeconfig"
	_freetypeconfig=

	IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR"
	for path_dir in $_freetypepath; do
		#reset separator to parse freetypeconfigs
		IFS=":"
		for freetypeconfig in $freetypeconfigs; do
			if test -f "$path_dir/$freetypeconfig" ; then
				_freetypeconfig="$path_dir/$freetypeconfig"
				echo $_freetypeconfig
				# Save the prefix
				_freetypepath=$path_dir
				if test `basename $path_dir` = bin ; then
					_freetypepath=`dirname $path_dir`
				fi
				# break at first freetype-config found in path
				break 2
			fi
		done
	done

	IFS="$ac_save_ifs"

	if test -z "$_freetypeconfig"; then
		echo "none found!"
	fi
}

#
# Determine extension used for executables
#
get_system_exe_extension() {
	case $1 in
	arm-riscos)
		_exeext=",ff8"
		;;
	dreamcast | ds | gamecube | n64 | ps2 | psp | wii)
		_exeext=".elf"
		;;
	gph-linux)
		_exeext=".gph"
		;;
	mingw* | *os2-emx | wince)
		_exeext=".exe"
		;;
	*)
		_exeext=""
		;;
	esac
}

#
# Generic options functions
#

# Show the configure help line for an option
option_help() {
	if test "${3}" != "" ; then
		tmpopt_prefix="${3}"
	else
		tmpopt_prefix="--"
	fi
	tmpopt=`echo $1 | sed 's/_/-/g'`
	option=`echo "${tmpopt_prefix}${tmpopt}                       " | sed "s/\(.\{23\}\).*/\1/"`
	echo "  ${option}  ${2}"
}

# Show an error about an unknown option
option_error() {
	echo "error: unrecognized option: $ac_option
Try \`$0 --help' for more information." >&2
	exit 1
}

# Show an error about an unknown engine
engine_option_error() {
	echo "error: unrecognized engine: $1
Try \`$0 --help' for more information." >&2
	exit 1
}

# Show an error about an invalid subengine option
subengine_option_error() {
	echo "error: this option is invalid for the subengine $1: $ac_option
Try \`$0 --help' for more information." >&2
	exit 1
}


#
# Feature handling functions
#

# Get the name of the feature
get_feature_name() {
	get_var _feature_$1_name
}

# Check whether the feature is enabled
get_feature_state() {
	for i in `get_var _feature_$1_settings`; do
		if test `get_var $i` = "yes"; then
			echo "yes"
			return
		fi
	done
	echo "no"
}


#
# Engine handling functions
#

# Get the name of the engine
get_engine_name() {
	get_var _engine_$1_name
}

# Will this engine be built?
get_engine_build() {
	get_var _engine_$1_build
}

# Was this engine set to be built by default?
get_engine_build_default() {
	get_var _engine_$1_build_default
}

# Get the subengines
get_engine_subengines() {
	get_var _engine_$1_subengines
}

# Get the dependencies
get_engine_dependencies() {
	get_var _engine_$1_deps
}

# Get the base engine game support description
get_engine_base() {
	get_var _engine_$1_base
}

# Ask if this is a subengine
get_engine_sub() {
	sub=`get_var _engine_$1_sub`
	if test -z "$sub" ; then
		sub=no
	fi
	echo $sub
}

# Get a subengine's parent (undefined for non-subengines)
get_subengine_parent() {
	get_var _engine_$1_parent
}

# Enable *all* engines
engine_enable_all() {
	for engine in $_engines; do
		set_var _engine_${engine}_build "yes"
	done
}

# Disable *all* engines
engine_disable_all() {
	for engine in $_engines; do
		set_var _engine_${engine}_build "no"
	done
}

# Enable the given engine
engine_enable() {
	# Get the parameter
	if ( echo $1 | grep ':' ) 2> /dev/null > /dev/null ; then
		eng=`echo $1 | cut -d ':' -f 1`
		opt=`echo $1 | cut -d ':' -f 2`
	else
		eng=$1
		opt=yes
	fi
	engine=`echo $eng | sed 's/-/_/g'`

	# Filter the parameter for the subengines
	if test "`get_engine_sub ${engine}`" != "no" ; then
		if test "$opt" != "yes" ; then
			subengine_option_error ${engine}
			return
		fi
		parent=`get_subengine_parent ${engine}`
		if test `get_engine_build ${parent}` = "no" ; then
			set_var _engine_${parent}_build "yes"
		fi		
	fi

	if test "$opt" = "static" -o "$opt" = "dynamic" -o "$opt" = "yes" ; then
		if test "`get_engine_name ${engine}`" != "" ; then
			set_var _engine_${engine}_build "$opt"
		else
			engine_option_error ${engine}
		fi
	else
		option_error
	fi
}

# Disable the given engine
engine_disable() {
	# Filter malformed options
	if ( echo $1 | grep '=' ) 2> /dev/null > /dev/null ; then
		option_error
		return
	fi

	engine=`echo $1 | sed 's/-/_/g'`
	if test "`get_engine_name ${engine}`" != "" ; then
		set_var _engine_${engine}_build "no"
	else
		engine_option_error ${engine}
	fi
}

# Check whether the engine's dependencies are met
# If that is not the case disable the engine
check_engine_deps() {
	unmet_deps=""

	# Check whether the engine is enabled
	if test `get_engine_build $1` != "no" ; then
		# Collect unmet dependencies
		for dep in `get_engine_dependencies $1`; do
			if test `get_feature_state $dep` = "no"; then
				feature_name=`get_feature_name $dep`
				unmet_deps="${unmet_deps}${feature_name} "
			fi
		done

		# Check whether there is any unmet dependency
		if test -n "$unmet_deps"; then
			echo "WARNING: Disabling engine "`get_engine_name $1`" because the following dependencies are unmet: "$unmet_deps
			engine_disable $1
		fi
	fi
}

# Show the configure help line for a given engine
show_engine_help() {
	name=`get_engine_name $1`
	option_help "${1}" "${name} engine" "  "
	for sub in `get_engine_subengines $1`; do
		show_subengine_help $sub $1
	done
}

# Show the configure help line for a given subengine
show_subengine_help() {
	name=`get_engine_name $1`
	parent=`get_engine_name $2`
	option_help "${1}" "${name} in ${parent} engine" "  "
}

# Prepare the strings about the engines to build
prepare_engine_build_strings() {
	string=`get_engine_build_string $1 static`
	if test -n "$string" ; then
		_engines_built_static="${_engines_built_static}#$string@"
	fi

	string=`get_engine_build_string $1 dynamic`
	if test -n "$string" ; then
		_engines_built_dynamic="${_engines_built_dynamic}#$string@"
	fi

	string=`get_engine_build_string $1 no`
	if test -n "$string" ; then
		_engines_skipped="${_engines_skipped}#$string@"
	fi

	string=`get_engine_build_string $1 wip`
	if test -n "$string" ; then
		_engines_built_wip="${_engines_built_wip}#$string@"
	fi

}

# Get the string about building an engine
get_engine_build_string() {
	engine=$1
	request_status=$2
	engine_string=""
	engine_build=`get_engine_build $1`
	engine_build_default=`get_engine_build_default $engine`
	show=no

	# Convert static/dynamic to yes to ease the check of subengines
	if test $engine_build = no; then
		subengine_filter=no
	else
		subengine_filter=yes
	fi

	# Check if the current engine should be shown for the current status
	if test $engine_build = $request_status ; then
		show=yes
	else
		# Test for disabled sub-engines
		if test $request_status = no ; then
			for subeng in `get_engine_subengines $engine` ; do
				if test `get_engine_build $subeng` = no ; then
					# In this case we to display _disabled_ subengines
					subengine_filter=no
					show=yes
				fi
			done
		fi
		# Test for enabled wip sub-engines
		if test $request_status = wip ; then
			for subeng in `get_engine_subengines $engine` ; do
				if test `get_engine_build $subeng` != no -a `get_engine_build_default $subeng` = no ; then
					show=yes
				fi
			done
		fi
	fi


	# Check if it is a wip engine
	if test "$request_status" = "wip" -a "$engine_build" != "no" -a  "$engine_build_default" = no; then
		show=yes
	fi

	# The engine should be shown, build the string
	if test $show = yes ; then
		engine_string=`get_subengines_build_string $engine $subengine_filter $request_status`
		engine_string="`get_engine_name $engine` $engine_string"
	fi

	echo "$engine_string"
}

# Get the string about building subengines
get_subengines_build_string() {
	parent_engine=$1
	subengine_filter=$2
	request_status=$3
	parent_engine_build_default=`get_engine_build_default $parent_engine`
	subengine_string=""

	# If the base engine isn't built at all, no need to list subengines
	# in any of the possible categories.
	if test `get_engine_build $parent_engine` = no; then
		return
	fi

	all=yes
	# If there are no subengines, never display "[all games]" (for brevity).
	if test -z "`get_engine_subengines $parent_engine`"; then
		all=no
	fi
	# If the base engine does not fit the category we're displaying here
	# (WIP or Skipped), we should never show "[all games]"
	if test "$request_status" = wip; then
		if test $parent_engine_build_default = yes; then
			all=no
		fi
	fi
	if test "$request_status" = no; then
		# If we're here, the parent engine is built, so no need to check that.
		all=no
	fi


	# In the static/dynamic categories, also display the engine's base games.
	if test -n "`get_engine_subengines $parent_engine`" -a $request_status != no -a $request_status != wip; then
		subengine_string="[`get_engine_base $parent_engine`]"
	fi

	for subeng in `get_engine_subengines $parent_engine` ; do
		subengine_build=`get_engine_build $subeng`
		subengine_build_default=`get_engine_build_default $subeng`

		# Display this subengine if it matches the filter, unless it is
		# a stable subengine in the WIP request.
		if test $subengine_build = $subengine_filter -a \! \( "$request_status" = wip -a "$subengine_build_default" = yes \) ; then
			s="[`get_engine_name $subeng`]"
			if test -n "$subengine_string"; then
				subengine_string="$subengine_string $s"
			else
				subengine_string="$s"
			fi
		else
			all=no
		fi
	done

	# Summarize the full list, where applicable
	if test $all = yes ; then
		subengine_string="[all games]"
	fi

	echo "$subengine_string"
}

#
# Greet user
#
echo "Running ResidualVM configure..."
echo "Configure run on" `date` > $TMPLOG

#
# Check any parameters we received
#
# TODO:
# * Change --disable-mad / --enable-mad to the way it's done in autoconf:
#  That is, --without-mad / --with-mad=/prefix/to/mad. Useful for people
#  who have Mad/Vorbis/ALSA installed in a non-standard locations.
#

for parm in "$@" ; do
	if test "$parm" = "--help" || test "$parm" = "-help" || test "$parm" = "-h" ; then
		for engine in $_engines; do
			if test `get_engine_sub $engine` = no ; then
				engines_help="$engines_help`show_engine_help $engine`
"
			fi
		done
		cat << EOF

Usage: $0 [OPTIONS]...

Configuration:
  -h, --help              display this help and exit
  --backend=BACKEND       backend to build (android, samsungtv, sdl) [sdl]

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, \`make install' will install all the files in
\`/usr/local/bin', \`/usr/local/lib' etc.  You can specify
an installation prefix other than \`/usr/local' using \`--prefix',
for instance \`--prefix=\$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data
                          [DATAROOTDIR/residualvm]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/residualvm]

Special configuration feature:
  --host=HOST             cross-compile to target HOST (arm-linux, ...)
                          special targets: android-arm for Android ARM
                                           android-mips for Android MIPS
                                           android-x86 for Android x86
                                           ps3 for PlayStation 3
                                           samsungtv for Samsung TV

Game engines:
  --enable-all-engines     enable all engines, including those which are
                           broken or unsupported
  --disable-all-engines    disable all engines
  --enable-engine=<engine name>[,<engine name>...] enable engine(s) listed
  --disable-engine=<engine name>[,<engine name>...] disable engine(s) listed
  --enable-engine-static=<engine name>[,<engine name>...] 
      enable engine(s) listed as static builtin (when plugins are enabled)
  --enable-engine-dynamic=<engine name>[,<engine name>...]
      enable engine(s) listed as dynamic plugin (when plugins are enabled)
    The values of <engine name> for these options are as follows:
$engines_help
Optional Features:
  --enable-c++11           build as C++11 if the compiler allows that
  --disable-debug          disable building with debugging symbols
  --enable-Werror          treat warnings as errors
  --enable-release         enable building in release mode (this activates
                           optimizations)
  --enable-release-mode    enable building in release mode (without optimizations)
  --enable-optimizations   enable optimizations
  --enable-profiling       enable profiling
  --enable-plugins         enable the support for dynamic plugins
  --default-dynamic        make plugins dynamic by default
  --disable-mt32emu        don't enable the integrated MT-32 emulator
  --disable-savegame-timestamp don't use timestamps for blank savegame descriptions
  --disable-translation    don't build support for translated messages
  --disable-taskbar        don't build support for taskbar and launcher integration
  --enable-vkeybd          build virtual keyboard support
  --enable-keymapper       build key mapper support
  --enable-updates         build support for updates
  --enable-text-console    use text console instead of graphical console
  --enable-verbose-build   enable regular echoing of commands during build
                           process
  --disable-bink           don't build with Bink video support
  --enable-safedisc        enable SafeDisc decryption for Myst III

Optional Libraries:
  --with-alsa-prefix=DIR   Prefix where alsa is installed (optional)
  --disable-alsa           disable ALSA midi sound support [autodetect]

  --with-ogg-prefix=DIR    Prefix where libogg is installed (optional)
  --with-vorbis-prefix=DIR Prefix where libvorbis is installed (optional)
  --disable-vorbis         disable Ogg Vorbis support [autodetect]

  --with-tremor-prefix=DIR Prefix where tremor is installed (optional)
  --disable-tremor         disable tremor support [autodetect]

  --with-mad-prefix=DIR    Prefix where libmad is installed (optional)
  --disable-mad            disable libmad (MP3) support [autodetect]

  --with-flac-prefix=DIR   Prefix where libFLAC is installed (optional)
  --disable-flac           disable FLAC support [autodetect]

  --with-zlib-prefix=DIR   Prefix where zlib is installed (optional)
  --disable-zlib           disable zlib (compression) support [autodetect]

  --with-mpeg2-prefix=DIR  Prefix where libmpeg2 is installed (optional)
  --enable-mpeg2           enable mpeg2 codec for cutscenes [autodetect]

  --with-opengl-prefix=DIR Prefix where OpenGL (ES) is installed (optional)
  --disable-opengl         disable OpenGL (ES) support [autodetect]
  --enable-opengl-shaders  enable use of modern OpenGL with shaders
  --force-opengles2        only deteect OpenGL ES2

  --with-jpeg-prefix=DIR   Prefix where libjpeg is installed (optional)
  --disable-jpeg           disable JPEG decoder [autodetect]

  --with-png-prefix=DIR    Prefix where libpng is installed (optional)
  --disable-png            disable PNG decoder [autodetect]

  --with-theoradec-prefix=DIR Prefix where libtheoradec is installed (optional)
  --disable-theoradec      disable Theora decoder [autodetect]

  --with-faad-prefix=DIR   Prefix where libfaad is installed (optional)
  --disable-faad           disable AAC decoder [autodetect]

  --with-fluidsynth-prefix=DIR  Prefix where libfluidsynth is
                           installed (optional)
  --disable-fluidsynth     disable fluidsynth MIDI driver [autodetect]

  --with-sparkle-prefix=DIR   Prefix where sparkle is installed (Mac OS X only - optional)
  --disable-sparkle        disable sparkle automatic update support [Mac OS X only - autodetect]

  --with-sdl-prefix=DIR    Prefix where the sdl-config script is
                           installed (optional)

  --with-freetype2-prefix=DIR Prefix where the freetype-config script is
                           installed (optional)
  --disable-freetype2     disable freetype2 TTF library usage [autodetect]

  --with-iconv-prefix=DIR  Prefix where iconv is installed (optional)
  --disable-iconv          disable iconv support [autodetect]

  --with-nasm-prefix=DIR   Prefix where nasm executable is installed (optional)
  --disable-nasm           disable assembly language optimizations [autodetect]

  --with-readline-prefix=DIR    Prefix where readline is installed (optional)
  --disable-readline       disable readline support in text console [autodetect]

  --with-libunity-prefix=DIR   Prefix where libunity is installed (optional)
  --disable-libunity           disable Unity launcher integration [autodetect]

  --with-sndio-prefix=DIR  Prefix where sndio is installed (optional)
  --disable-sndio          disable sndio MIDI driver [autodetect]

Some influential environment variables:
  LDFLAGS        linker flags, e.g. -L<lib dir> if you have libraries in a
                 nonstandard directory <lib dir>
  CXX            C++ compiler command
  CXXFLAGS       C++ compiler flags
  CPPFLAGS       C++ preprocessor flags, e.g. -I<include dir> if you have
                 headers in a nonstandard directory <include dir>
  ASFLAGS        assembler flags
  WINDRESFLAGS   Windows resource compiler flags

EOF
		exit 0
	fi
done # for parm in ...

for ac_option in $@; do
	case "$ac_option" in
#	--disable-16bit)          _16bit=no       ;; #ResidualVM: not supported
	--disable-savegame-timestamp) _savegame_timestamp=no ;;
#	--disable-scalers)        _build_scalers=no ;; #ResidualVM: not supported
#	--disable-hq-scalers)     _build_hq_scalers=no ;; #ResidualVM: not supported
	--enable-alsa)            _alsa=yes       ;;
	--disable-alsa)           _alsa=no        ;;
	--enable-seq-midi)        _seq_midi=yes   ;;
	--disable-seq-midi)       _seq_midi=no    ;;
	--enable-sndio)           _sndio=yes      ;;
	--disable-sndio)          _sndio=no       ;;
	--enable-timidity)        _timidity=yes   ;;
	--disable-timidity)       _timidity=no    ;;
	--enable-vorbis)          _vorbis=yes     ;;
	--disable-vorbis)         _vorbis=no      ;;
	--enable-tremor)          _tremor=yes     ;;
	--disable-tremor)         _tremor=no      ;;
	--enable-flac)            _flac=yes       ;;
	--disable-flac)           _flac=no        ;;
	--enable-mad)             _mad=yes        ;;
	--disable-mad)            _mad=no         ;;
	--enable-zlib)            _zlib=yes       ;;
	--disable-zlib)           _zlib=no        ;;
	--enable-sparkle)         _sparkle=yes    ;;
	--disable-sparkle)        _sparkle=no     ;;
	--enable-nasm)            _nasm=yes       ;;
	--disable-nasm)           _nasm=no        ;;
	--enable-mpeg2)           _mpeg2=yes      ;;
	--disable-mpeg2)          _mpeg2=no       ;;
	--disable-jpeg)           _jpeg=no        ;;
	--enable-jpeg)            _jpeg=yes       ;;
	--disable-png)            _png=no         ;;
	--enable-png)             _png=yes        ;;
	--disable-theoradec)      _theoradec=no   ;;
	--enable-theoradec)       _theoradec=yes  ;;
	--disable-faad)           _faad=no        ;;
	--enable-faad)            _faad=yes       ;;
	--disable-fluidsynth)     _fluidsynth=no  ;;
	--enable-fluidsynth)      _fluidsynth=yes ;; #ResidualVM specific option
	--enable-readline)        _readline=yes   ;;
	--disable-readline)       _readline=no    ;;
	--enable-freetype2)       _freetype2=yes  ;;
	--disable-freetype2)      _freetype2=no   ;;
	--enable-iconv)           _iconv=yes      ;;
	--disable-iconv)          _iconv=no       ;;
	--enable-taskbar)         _taskbar=yes    ;;
	--disable-taskbar)        _taskbar=no     ;;
	--enable-updates)         _updates=yes    ;;
	--disable-updates)        _updates=no     ;;
	--enable-libunity)        _libunity=yes   ;;
	--disable-libunity)       _libunity=no    ;;
	--enable-opengl)          _opengl=yes     ;;
	--disable-opengl)         _opengl=no      ;;
	--enable-opengl-shaders)  _opengl_shaders=yes     ;; #ResidualVM specific option
	--disable-opengl-shaders) _opengl_shaders=no      ;; #ResidualVM specific option
	--force-opengles2)        _opengles2=yes  ;; #ResidualVM specific option
	--enable-bink)            _bink=yes       ;;
	--disable-bink)           _bink=no        ;;
	--enable-safedisc)        _safedisc=yes   ;; #ResidualVM specific option
	--disable-safedisc)       _safedisc=no    ;; #ResidualVM specific option
	--enable-verbose-build)   _verbose_build=yes ;;
	--enable-plugins)         _dynamic_modules=yes ;;
	--default-dynamic)        _plugins_default=dynamic ;;
	--enable-mt32emu)         _mt32emu=yes    ;;
	--disable-mt32emu)        _mt32emu=no     ;;
	--enable-translation)     _translation=yes ;;
	--disable-translation)    _translation=no ;;
	--enable-vkeybd)          _vkeybd=yes     ;;
	--disable-vkeybd)         _vkeybd=no      ;;
	--enable-keymapper)       _keymapper=yes  ;;
	--disable-keymapper)      _keymapper=no   ;;
#	--enable-eventrecorder)   _eventrec=yes  ;; #ResidualVM: not supported
#	--disable-eventrecorder)  _eventrec=no   ;; #ResidualVM: not supported
	--enable-text-console)    _text_console=yes ;;
	--disable-text-console)   _text_console=no ;;
	--with-fluidsynth-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		FLUIDSYNTH_CFLAGS="-I$arg/include"
		FLUIDSYNTH_LIBS="-L$arg/lib"
		;;
	--with-mpeg2-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		MPEG2_CFLAGS="-I$arg/include"
		MPEG2_LIBS="-L$arg/lib"
		;;
	--with-alsa-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		ALSA_CFLAGS="-I$arg/include"
		ALSA_LIBS="-L$arg/lib"
		;;
	--with-sndio-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		SNDIO_CFLAGS="-I$arg/include"
		SNDIO_LIBS="-L$arg/lib"
		;;
	--with-ogg-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		OGG_CFLAGS="-I$arg/include"
		OGG_LIBS="-L$arg/lib"
		;;
	--with-vorbis-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		VORBIS_CFLAGS="-I$arg/include"
		VORBIS_LIBS="-L$arg/lib"
		;;
	--with-tremor-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		TREMOR_CFLAGS="-I$arg/include"
		TREMOR_LIBS="-L$arg/lib"
		;;
	--with-flac-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		FLAC_CFLAGS="-I$arg/include"
		FLAC_LIBS="-L$arg/lib"
		;;
	--with-mad-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		MAD_CFLAGS="-I$arg/include"
		MAD_LIBS="-L$arg/lib"
		;;
	--with-jpeg-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		JPEG_CFLAGS="-I$arg/include"
		JPEG_LIBS="-L$arg/lib"
		;;
	--with-png-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		PNG_CFLAGS="-I$arg/include"
		PNG_LIBS="-L$arg/lib"
		;;
	--with-theoradec-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		THEORADEC_CFLAGS="-I$arg/include"
		THEORADEC_LIBS="-L$arg/lib"
		;;
	--with-faad-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		FAAD_CFLAGS="-I$arg/include"
		FAAD_LIBS="-L$arg/lib"
		;;
	--with-zlib-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		ZLIB_CFLAGS="-I$arg/include"
		ZLIB_LIBS="-L$arg/lib"
		;;
	--with-sparkle-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		SPARKLE_CFLAGS="-F$arg"
		SPARKLE_LIBS="-F$arg"
		;;
	--with-readline-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		READLINE_CFLAGS="-I$arg/include"
		READLINE_LIBS="-L$arg/lib"
		;;
	--with-libunity-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		LIBUNITY_CFLAGS="-I$arg/include"
		LIBUNITY_LIBS="-L$arg/lib"
		;;
	--with-opengl-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		OPENGL_CFLAGS="-I$arg/include"
		OPENGL_LIBS="-L$arg/lib"
		;;
	--with-iconv-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		ICONV_CFLAGS="-I$arg/include"
		ICONV_LIBS="-L$arg/lib"
		;;
	--backend=*)
		_backend=`echo $ac_option | cut -d '=' -f 2`
		;;
	--enable-c++11)
		_use_cxx11=yes
		;;
	--disable-c++11)
		_use_cxx11=no
		;;
	--enable-debug)
		_debug_build=yes
		;;
	--disable-debug)
		_debug_build=no
		;;
	--enable-Werror)
		CXXFLAGS="$CXXFLAGS -Werror"
		;;
	--enable-release-mode)
		_release_build=yes
		;;
	--disable-release-mode)
		_release_build=no
		;;
	--enable-release)
		_release_build=yes
		_optimizations=yes
		;;
	--disable-release)
		_release_build=no
		_optimizations=no
		;;
	--enable-optimizations)
		_optimizations=yes
		;;
	--disable-optimizations)
		_optimizations=no
		;;
	--enable-profiling)
		_enable_prof=yes
		;;
	--with-sdl-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		_sdlpath="$arg:$arg/bin"
		;;
	--with-freetype2-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		_freetypepath="$arg:$arg/bin"
		;;
	--with-nasm-prefix=*)
		arg=`echo $ac_option | cut -d '=' -f 2`
		_nasmpath="$arg:$arg/bin"
		;;
	--with-staticlib-prefix=*)
		_staticlibpath=`echo $ac_option | cut -d '=' -f 2`
		;;
	--host=*)
		_host=`echo $ac_option | cut -d '=' -f 2`
		;;
	--prefix=*)
		prefix=`echo $ac_option | cut -d '=' -f 2`
		;;
	--exec-prefix=*)
		exec_prefix=`echo $ac_option | cut -d '=' -f 2`
		;;
	--bindir=*)
		bindir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--libdir=*)
		libdir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--datarootdir=*)
		datarootdir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--datadir=*)
		datadir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--mandir=*)
		mandir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--docdir=*)
		docdir=`echo $ac_option | cut -d '=' -f 2`
		;;
	--enable-all-engines)
		engine_enable_all
		;;
	--disable-all-engines)
		engine_disable_all
		;;
	--enable-engine=* | --enable-engines=*)
		for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do
			engine_enable "${engine_name}"
		done
		;;
	--enable-engine-static=* | --enable-engines-static=*)
		for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do
			engine_enable "${engine_name}:static"
		done
		;;
	--enable-engine-dynamic=* | --enable-engines-dynamic=*)
		for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do
			engine_enable "${engine_name}:dynamic"
		done
		;;
	--disable-engine=* | --disable-engines=*)
		for engine_name in `echo $ac_option | cut -d '=' -f 2 | tr ',' '\n'`; do
			engine_disable ${engine_name}
		done
		;;
	*)
		option_error
		;;
	esac;
done;

guessed_host=`$_srcdir/config.guess`
get_system_exe_extension $guessed_host
NATIVEEXEEXT=$_exeext

case $_host in
android | android-arm | android-v7a | android-arm-v7a | ouya)
	_host_os=android
	_host_cpu=arm
	_host_alias=arm-linux-androideabi
	;;
android-mips)
	_host_os=android
	_host_cpu=mipsel
	_host_alias=mipsel-linux-android
	;;
android-x86)
	_host_os=android
	_host_cpu=i686
	_host_alias=i686-linux-android
	;;
arm-riscos)
	_host_os=riscos
	_host_cpu=arm
	;;
caanoo)
	_host_os=gph-linux
	_host_cpu=arm
	_host_alias=arm-none-linux-gnueabi
	;;
dingux | gcw0)
	_host_os=linux
	_host_cpu=mipsel
	_host_alias=mipsel-linux
	;;
dreamcast)
	_host_os=dreamcast
	_host_cpu=sh
	_host_alias=sh-elf
	CXXFLAGS="$CXXFLAGS -ml -m4-single-only"
	LDFLAGS="$LDFLAGS -ml -m4-single-only"
	;;
ds)
	_host_os=ds
	_host_cpu=arm
	_host_alias=arm-eabi
	;;
gamecube)
	_host_os=gamecube
	_host_cpu=ppc
	_host_alias=powerpc-eabi
	;;
gp2x)
	_host_os=gph-linux
	_host_cpu=arm
	_host_alias=arm-open2x-linux
	;;
gp2xwiz)
	_host_os=gph-linux
	_host_cpu=arm
	_host_alias=arm-open2x-linux
	;;
i586-mingw32msvc)
	_host_os=mingw32msvc
	_host_cpu=i586
	;;
iphone)
	_host_os=iphone
	_host_cpu=arm
	_host_alias=arm-apple-darwin9
	;;
linupy)
	_host_os=linux
	_host_cpu=arm
	;;
maemo)
	_host_os=maemo
	_host_cpu=arm
	_host_alias=arm-linux

	# The prefix is always the same on Maemo so we hardcode the default
	# here. It is still possible to define a custom prefix which is
	# needed when packaging the app with a user-specific app ID.
	test "x$prefix" = xNONE && prefix=/opt/scummvm
	# Maemo apps are installed into app-specific directories. The
	# default directory structure of ScummVM makes no sense here so we
	# hardcode Maemo specific directories here.
	datarootdir='${prefix}/share'
	datadir=/opt/scummvm/share
	docdir='${datarootdir}/doc/scummvm'
	;;
motoezx)
	_host_os=linux
	_host_cpu=arm
	_host_alias=arm-linux-gnu
	;;
motomagx)
	_host_os=linux
	_host_cpu=arm
	_host_alias=arm-linux-gnueabi
	;;
n64)
	_host_os=n64
	_host_cpu=mips
	_host_alias=mips64
	;;
neuros)
	_host_os=linux
	_host_cpu=arm
	;;
openpandora)
	_host_os=linux
	_host_cpu=arm
	_host_alias=arm-angstrom-linux-gnueabi
	;;
ppc-amigaos)
	_host_os=amigaos
	_host_cpu=ppc
	;;
ps2)
	_host_os=ps2
	_host_cpu=mips64r5900el
	_host_alias=ee
	# PS2 bogus dirs: they actually depend on launch medium
	datadir='host:data'
	docdir='host:docs'
	;;
ps3)
	_host_os=ps3
	_host_cpu=ppc
	_host_alias=powerpc64-ps3-elf

	# The prefix is always the same on PS3 so we hardcode the default
	# here. It is still possible to define a custom prefix which is
	# needed when packaging the app with a user-specific app ID.
	test "x$prefix" = xNONE && prefix=/dev_hdd0/game/RESI12000/USRDIR
	# PS3 apps are installed into app-specific directories. The
	# default directory structure of ScummVM makes no sense here so we
	# hardcode PS3 specific directories here.
	datarootdir='${prefix}/data'
	datadir='${datarootdir}'
	docdir='${prefix}/doc'
	;;
psp)
	_host_os=psp
	_host_cpu=mipsallegrexel
	_host_alias=psp
	;;
samsungtv)
	_host_os=linux
	_host_cpu=arm
	_host_alias=arm-linux-gnueabi
	;;
tizen)
	_host_os=tizen
	_host_cpu=arm
	_host_alias=arm-linux-gnueabi
	;;
webos)
	_host_os=webos
	_host_cpu=arm
	_host_alias=arm-none-linux-gnueabi
	# The prefix is always the same on WebOS so we hardcode the default
	# here. It is still possible to define a custom prefix which is
	# needed when packaging the app with a user-specific app ID.
	test "x$prefix" = xNONE && prefix=/media/cryptofs/apps/usr/palm/applications/org.residualvm.residualvm
	# WebOS apps are installed into app-specific directories. The
	# default directory structure of ScummVM makes no sense here so we
	# hardcode WebOS specific directories here.
	datarootdir='${prefix}/data'
	datadir='${datarootdir}'
	docdir='${prefix}/doc'
	;;
wii)
	_host_os=wii
	_host_cpu=ppc
	_host_alias=powerpc-eabi
	;;
wince)
	_host_os=wince
	_host_cpu=arm
	_host_alias=arm-mingw32ce
	;;
*)
	if test -n "$_host"; then
		guessed_host=`$_srcdir/config.sub $_host`
	fi
	_host_cpu=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
	_host_vendor=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
	_host_os=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
	;;
esac

if test -z "$_host_alias"; then
	_host_alias="$_host_cpu-$_host_os"
else
	# if _host_alias was set, default to the standard GNU tools
	_ranlib=$_host_alias-ranlib
	_strip=$_host_alias-strip
	_ar="$_host_alias-ar cru"
	_as="$_host_alias-as"
	_windres=$_host_alias-windres
fi

#
# Determine extra build flags for debug and/or release builds
#

case $_host in
caanoo | gp2x | gp2xwiz | openpandora | ps2)
	if test "$_debug_build" = auto; then
		# If you want to debug one of these platforms, use '--disable-optimizations --enable-debug'
		_debug_build=no
	fi

	if test "$_optimizations" = auto; then
		# Enable optimizations by default.
		_optimizations=yes
	fi
	;;
esac

if test "$_debug_build" != no; then
	# debug mode not explicitly disabled -> compile with debug information
	case $_host_os in
	amigaos*)
		# AmigaOS debugger uses plain stabs, with no gdb extensions.
		CXXFLAGS="$CXXFLAGS -gstabs"
	;;
	*)
		# Use the system default format for debug info.
		CXXFLAGS="$CXXFLAGS -g"
	esac
fi

if test "$_release_build" = yes; then
	# Add a define, which indicates we are doing
	# an build for a release version.
	DEFINES="$DEFINES -DRELEASE_BUILD"
fi


#
# Determine extension used for executables
#
get_system_exe_extension $_host_os
HOSTEXEPRE=
HOSTEXEEXT=$_exeext

#
# Determine separator used for $PATH
#
case $_host_os in
os2-emx*)
	SEPARATOR=";"
	;;
*)
	SEPARATOR=":"
	;;
esac

#
# Platform specific sanity checks
#
case $_host_os in
android)
	if test -z "$ANDROID_SDK"; then
		echo "Please set ANDROID_SDK in your environment. export ANDROID_SDK=<path to Android SDK>"
		exit 1
	fi
	if test -z "$ANDROID_NDK"; then
		echo "Please set ANDROID_NDK in your environment. export ANDROID_NDK=<path to Android NDK>"
		exit 1
	fi
	;;
ds | gamecube | wii)
	if test -z "$DEVKITPRO"; then
		echo "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to devkitPRO>"
		exit 1
	fi
	;;
n64)
	if test -z "$N64SDK"; then
		echo "Please set N64SDK in your environment. export N64SDK=<path to n64 sdk>"
		exit 1
	fi
	;;
ps2)
	if test -z "$PS2SDK"; then
		echo "Please set PS2SDK in your environment. export PS2SDK=<path to ps2 sdk>"
		exit 1
	fi
	;;
ps3)
	if test -z "$PS3DEV"; then
		echo "Please set PS3DEV in your environment. export PS3DEV=<path to ps3 toolchain>"
		exit 1
	fi
	if test -z "$PSL1GHT"; then
		echo "Please set PSL1GHT in your environment. export PSL1GHT=<path to psl1ght>"
		exit 1
	fi
	;;
psp)
	if test -z "$PSPDEV"; then
		PSPDEV=`psp-config --pspdev-path`
	fi
	# TODO: Should we also insist on a valid PSPDEV value?
	if test -z "$PSPSDK"; then
		PSPSDK=`psp-config --pspsdk-path`
	fi
	if test -z "$PSPSDK"; then
		echo "Please set PSPSDK in your environment. export PSPSDK=<path to psp sdk>"
		exit 1
	fi
	;;
tizen)
	if test -z "$TIZEN_ROOTSTRAP"; then
		echo "Please set TIZEN_ROOTSTRAP in your environment. export TIZEN_ROOTSTRAP=<path to Tizen SDK device profile>"
		exit 1
	fi
	;;
webos)
	if test -z "$WEBOS_SDK"; then
		echo "Please set WEBOS_SDK in your environment. export WEBOS_SDK=<path to WebOS SDK>"
		exit 1
	fi
	if test -z "$WEBOS_PDK"; then
		echo "Please set WEBOS_PDK in your environment. export WEBOS_PDK=<path to WebOS PDK>"
		exit 1
	fi
	;;
*)
	;;
esac

#
# Determine the C++ compiler
#
echo_n "Looking for C++ compiler... "

# Check whether the given command is a working C++ compiler
test_compiler() {
	cat > tmp_cxx_compiler.cpp << EOF
	class Foo { int a; };
	int main(int argc, char **argv) {
		Foo *a = new Foo(); delete a; return 0;
	}
EOF

	echo "testing compiler: $1" >> "$TMPLOG"

	if test -n "$_host"; then
		# In cross-compiling mode, we cannot run the result
		eval "$1 $CXXFLAGS -o $TMPO.o -c tmp_cxx_compiler.cpp" 2> /dev/null && cc_check_clean tmp_cxx_compiler.cpp
	else
		eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO$HOSTEXEEXT tmp_cxx_compiler.cpp" 2> /dev/null && eval "$TMPO$HOSTEXEEXT 2> /dev/null" && cc_check_clean tmp_cxx_compiler.cpp
	fi
}

# Prepare a list of candidates for the C++ compiler
if test -n "$CXX" && test_compiler "$CXX"; then
	# Use the compiler specified in CXX
	echo $CXX
else
	if test -n "$_host"; then
		compilers="$_host_alias-g++ $_host_alias-c++ $_host-g++ $_host-c++"
	else
		compilers="g++ c++"
	fi

	# Iterate over all candidates, pick the first working one
	CXX=
	for compiler in $compilers; do
		if test_compiler $compiler; then
			echo "success testing compiler: $compiler" >> "$TMPLOG"
			CXX=$compiler
			echo $CXX
			break
		else
			echo "failure testing compiler: $compiler" >> "$TMPLOG"
		fi
	done
fi

if test -z "$CXX"; then
	echo "none found!"
	exit 1
fi

# By default, use the C++ compiler as linker
LD=$CXX

#
# Determine the compiler version
#
echocheck "compiler version"

# We first check whether we have an Intel compiler here, since the Intel compiler
# can also fake itself as an gcc (to ease compatibility with common Linux etc.
# programs).
have_icc=no
cc_check_define __INTEL_COMPILER && have_icc=yes

if test "$have_icc" = yes; then
	add_line_to_config_mk 'HAVE_ICC = 1'

	# Make ICC error our on unknown command line options instead of printing
	# a warning. This is for example required to make the -Wglobal-destructors
	# detection work correctly.
	CXXFLAGS="$CXXFLAGS -diag-error 10006,10148"
fi

have_gcc=no
cc_check_define __GNUC__ && have_gcc=yes

if test "$have_gcc" = yes; then
	add_line_to_config_mk 'HAVE_GCC = 1'
	_cxx_major=`gcc_get_define __GNUC__`
	_cxx_minor=`gcc_get_define __GNUC_MINOR__`
	cxx_version="`( $CXX -dumpversion ) 2>&1`"

	if test -n "`gcc_get_define __clang__`"; then
		add_line_to_config_mk 'HAVE_CLANG = 1'
	fi

	if test "$_cxx_major" -eq 2 && test "$_cxx_minor" -ge 95 || \
	   test "$_cxx_major" -gt 2 ; then
		cxx_version="$cxx_version, ok"
		cxx_verc_fail=no
	else
		cxx_version="$cxx_version, bad"
		cxx_verc_fail=yes
	fi
elif test "$have_icc" = yes; then
	cxx_version="`( $CXX -dumpversion ) 2>/dev/null`"
	_cxx_major="`echo "${cxx_version}" | sed -ne 's/\([0-9][0-9]*\)\..*/\1/gp'`"
	_cxx_minor="`echo "${cxx_version}" | sed -ne 's/[0-9][0-9]*\.\([0-9][0-9]*\)/\1/gp'`"
	cxx_version="ICC $cxx_version, ok"
else
	# TODO: Big scary warning about unsupported compilers
	cxx_version=`( $CXX -version ) 2>&1`
	if test "$?" -eq 0; then
		cxx_version="`echo "${cxx_version}" | sed -ne 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/gp'`"
		if test -z "${cxx_version}"; then
			cxx_version="not found"
			cxx_verc_fail=yes
		fi
		echo non-gcc compiler version ${cxx_version}
	else
		cxx_version="not found"
		cxx_verc_fail=yes
		echo found non-gcc compiler version ${cxx_version}
	fi

	case $_host_os in
		irix*)
			case $cxx_version in
				7.4.4*)
					# We just assume this is SGI MIPSpro
					_cxx_major=7
					_cxx_minor=4
					cxx_verc_fail=no
					add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MDupdate "$(*D)/$(DEPDIR)/$(*F).d"'
					add_line_to_config_mk '-include Makedepend'
					;;
				*)
					cxx_version="$cxx_version, bad"
					cxx_verc_fail=yes
					;;
			esac
			;;
		*)
			cxx_version="$cxx_version, bad"
			cxx_verc_fail=yes
			;;
	esac
fi

echo "$cxx_version"

#
# Bail out now if no useable compiler was found.
#
if test "$cxx_verc_fail" = yes ; then
	echo
	echo "The version of your compiler is not supported at this time"
	echo "Please ensure you are using GCC >= 2.95"
	exit 1
fi

#
# Check whether the compiler supports C++11
#
have_cxx11=no
cat > $TMPC << EOF
int main(int argc, char *argv[]) { if (argv == nullptr) return -1; else return 0; }
EOF
cc_check -std=c++11 && have_cxx11=yes
if test "$_use_cxx11" = "yes" ; then
	_use_cxx11=$have_cxx11
fi

#
# Setup compiler specific CXXFLAGS now that we know the compiler version.
# Foremost, this means enabling various warnings.
# In addition, we set CXX_UPDATE_DEP_FLAG for GCC >= 3.0 and for ICC.
#
if test "$have_gcc" = yes ; then
	if test "$_cxx_major" -ge "3" ; then
		# Try to use ANSI mode when C++11 is disabled.
		if test "$_use_cxx11" = "no" ; then
			case $_host_os in
			# newlib-based system include files suppress non-C89 function
			# declarations under __STRICT_ANSI__
			amigaos* | android | dreamcast | ds | gamecube | mingw* | n64 | psp | ps2 | ps3 | tizen | wii | wince )
				;;
			*)
				CXXFLAGS="$CXXFLAGS -ansi"
				;;
			esac
		fi
		CXXFLAGS="$CXXFLAGS -W -Wno-unused-parameter"
		add_line_to_config_mk 'HAVE_GCC3 = 1'
		add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
	fi;

	if test "$_cxx_major" -eq 4 && test "$_cxx_minor" -ge 3 || \
	   test "$_cxx_major" -gt 4 ; then
		CXXFLAGS="$CXXFLAGS -Wno-empty-body"
	else
		CXXFLAGS="$CXXFLAGS -Wconversion"
	fi;
elif test "$have_icc" = yes ; then
	add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP'
fi;

#
# Update status about C++11 mode
#
echo_n "Building as C++11... "
if test "$_use_cxx11" = "yes" ; then
	CXXFLAGS="$CXXFLAGS -std=c++11"
fi
echo $_use_cxx11

# By default, we add -pedantic to the CXXFLAGS to catch some potentially
# non-portable constructs, like use of GNU extensions.
# However, some platforms use GNU extensions in system header files, so
# for these we must not use -pedantic.
case $_host_os in
android | gamecube | psp | tizen | wii | webos)
	;;
*)
	# ICC does not support pedantic, while GCC and clang do.
	if test "$have_icc" = no ; then
		# We *do* want the 'long long' extension.
		CXXFLAGS="$CXXFLAGS -pedantic -Wno-long-long"
	fi
	;;
esac

# If possible, we want to use -Wglobal-constructors
# However, not all compilers support that, so check whether the active one does.
echocheck "whether -Wglobal-constructors work"
cat > $TMPC << EOF
int main() { return 0; }
EOF
cc_check -Wglobal-constructors && _global_constructors=yes

if test "$_global_constructors" = yes; then
	CXXFLAGS="$CXXFLAGS -Wglobal-constructors"
fi
echo $_global_constructors

echo_n "Checking for $_host_alias-strings... " >> "$TMPLOG"
if `which $_host_alias-strings >/dev/null 2>&1`; then
_strings=$_host_alias-strings
echo yes >> "$TMPLOG"
else
_strings=strings
echo no >> "$TMPLOG"
fi

#
# Check for endianness
#
echo_n "Checking endianness... "
cat > tmp_endianness_check.cpp << EOF
unsigned short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
unsigned short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; }
unsigned short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
unsigned short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; }
int main() { _ascii (); _ebcdic (); return 0; }
EOF
$CXX $CXXFLAGS -c -o $TMPO.o tmp_endianness_check.cpp
if $_strings $TMPO.o | grep BIGenDianSyS >/dev/null; then
	_endian=big
elif $_strings $TMPO.o | grep LiTTleEnDian >/dev/null; then
	_endian=little
fi
echo $_endian;
cc_check_clean tmp_endianness_check.cpp

case $_endian in
	big)
		add_line_to_config_h '#undef SCUMM_LITTLE_ENDIAN'
		add_line_to_config_h '#define SCUMM_BIG_ENDIAN'
		;;
	little)
		add_line_to_config_h '#define SCUMM_LITTLE_ENDIAN'
		add_line_to_config_h '#undef SCUMM_BIG_ENDIAN'
		;;
	*)
		exit 1
		;;
esac

#
# Determine a data type with the given length
#
find_type_with_size() {
	for datatype in int short char long "long long" __int64 "long long int" unknown; do
		cat > tmp_find_type_with_size.cpp << EOF
typedef $datatype ac__type_sizeof_;
int main() {
	static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) == $1)];
	test_array [0] = 0;
	return 0;
}
EOF
		if $CXX $CXXFLAGS -c -o $TMPO.o tmp_find_type_with_size.cpp 2>/dev/null ; then
			break
		else
			if test "$datatype" = "unknown"; then
				echo "couldn't find data type with $1 bytes"
				exit 1
			fi
			continue
		fi
	done
	cc_check_clean tmp_find_type_with_size.cpp
	echo $datatype
}

#
# Check whether the system is 32-bit
#
pointer_is_32bit() {
	cat > tmp_pointer_is_32bit.cpp << EOF
int main() {
	static int test_array[1 - 2 * !(sizeof(void *) == 4)];
	test_array[0] = 0;
	return 0;
}
EOF
	$CXX $CXXFLAGS -c -o $TMPO.o tmp_pointer_is_32bit.cpp 2>/dev/null
	status=$?
	cc_check_clean tmp_pointer_is_32bit.cpp
	return $status
}

echo_n "Checking 64-bitness... "
pointer_is_32bit
if test $? -eq 0; then
	type_ptr=int32
	echo "no"
	add_line_to_config_h "/* #define SCUMM_64BITS */"
else
	type_ptr=int64
	echo "yes"
	add_line_to_config_h "#define SCUMM_64BITS"
fi

#
# Determine data type sizes
#
echo_n "Type with 1 byte... "
type_1_byte=`find_type_with_size 1`
TMPR="$?"
echo "$type_1_byte"
test $TMPR -eq 0 || exit 1	# check exit code of subshell

echo_n "Type with 2 bytes... "
type_2_byte=`find_type_with_size 2`
TMPR="$?"
echo "$type_2_byte"
test $TMPR -eq 0 || exit 1	# check exit code of subshell

echo_n "Type with 4 bytes... "
type_4_byte=`find_type_with_size 4`
TMPR="$?"
echo "$type_4_byte"
test $TMPR -eq 0 || exit 1	# check exit code of subshell

echo_n "Type with 8 bytes... "
type_8_byte=`find_type_with_size 8`
TMPR="$?"
echo "$type_8_byte"
if test $TMPR -eq 0; then
	_def_64bit_type_signed="typedef signed $type_8_byte int64;"
	_def_64bit_type_unsigned="typedef unsigned $type_8_byte uint64;"
fi
# force cleanup after check for 8 bytes type
cc_check_clean tmp_find_type_with_size.cpp

#
# Check whether memory alignment is required
#
# For some CPU types, unaligned memory access is either not supported at
# all (and so leads to a crash), requires a super-slow emulation via an
# exception handler, or just results in incorrect results.
# On the other hand, accessing data in a manner that works regardless of
# alignment can be a lot slower than regular access, so we don't want
# to use it if we don't have to.
#
# So we do the following: For CPU families where we know whether unaligned
# access is safe & fast, we enable / disable unaligned access accordingly.
# Otherwise, we just disable memory alignment.
#
# NOTE: In the past, for non-cross compiled builds, we would also run some code
# which would try to test whether unaligned access worked or not. But this test
# could not reliably determine whether unaligned access really worked in all
# situations (and across different implementations of the target CPU arch), nor
# whether it was fast (as opposed to slowly emulated by fault handlers). Hence,
# we do not use this approach anymore.
#
# NOTE: The only kinds of unaligned access we allow are for 2 byte and 4
# byte loads / stores. No promises are made for bigger sizes, such as 8
# or 16 byte loads, for which architectures may behave differently than
# for the smaller sizes.
echo_n "Alignment required... "
case $_host_cpu in
	i[3-6]86 | amd64 | x86_64 | ppc*)
		# Unaligned access should work
		_need_memalign=no
		;;
	alpha* | arm* | bfin* | hp* | mips* | sh* | sparc* | ia64 | nv1*)
		# Unaligned access is not supported or extremely slow.
		_need_memalign=yes
		;;
	*)
		# Status of unaligned access is unknown, so assume the worst.
		_need_memalign=yes
		;;
esac
echo "$_need_memalign"

define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT'

#
# Check the CPU architecture
#
echo_n "Checking host CPU architecture... "
case $_host_cpu in
	arm*)
		echo "ARM"
		define_in_config_if_yes yes 'USE_ARM_SCALER_ASM'
		define_in_config_if_yes yes 'USE_ARM_SOUND_ASM'
		define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM'
		define_in_config_if_yes yes 'USE_ARM_GFX_ASM'
		# FIXME: The following feature exhibits a bug during the intro scene of Indy 4
		# (on Pandora and iPhone at least)
		#define_in_config_if_yes yes 'USE_ARM_COSTUME_ASM'

		DEFINES="$DEFINES -DARM_TARGET"
		;;
	i[3-6]86)
		echo "x86"
		_have_x86=yes
		define_in_config_h_if_yes $_have_x86 'HAVE_X86'
		;;
	mips*)
		echo "MIPS"
		DEFINES="$DEFINES -DMIPS_TARGET"
		;;
	ppc*)
		echo "PowerPC"
		DEFINES="$DEFINES -DPPC_TARGET"
		;;
	amd64 | x86_64)
		echo "x86_64"
		;;
	*)
		echo "unknown ($_host_cpu)"
		;;
esac


#
# Determine build settings
#
echo_n "Checking hosttype... "
echo $_host_os
case $_host_os in
	amigaos*)
		LDFLAGS="$LDFLAGS -use-dynld -Wl,--export-dynamic"
		LDFLAGS="$LDFLAGS -L/sdk/local/newlib/lib"
		# We have to use 'long' for our 4 byte typedef because AmigaOS already typedefs (u)int32
		# as (unsigned) long, and consequently we'd get a compiler error otherwise.
		type_4_byte='long'
		# Supress format warnings as the long 4 byte causes noisy warnings.
		CXXFLAGS="$CXXFLAGS -Wno-format"
		add_line_to_config_mk 'AMIGAOS = 1'
		_port_mk="backends/platform/sdl/amigaos/amigaos.mk"
		;;
	android)
		case $_host in
			android | android-arm)
				CXXFLAGS="$CXXFLAGS -march=armv5te"
				CXXFLAGS="$CXXFLAGS -mtune=xscale"
				CXXFLAGS="$CXXFLAGS -msoft-float"
				ABI="armeabi"
				# Platform version 9 is used by ResidualVM
				ANDROID_PLATFORM=9
				ANDROID_PLATFORM_ARCH="arm"
				;;
			android-v7a | android-arm-v7a)
				CXXFLAGS="$CXXFLAGS -march=armv7-a"
				CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
				CXXFLAGS="$CXXFLAGS -mfpu=vfp"
				LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8"
				ABI="armeabi-v7a"
				# Platform version 9 is used by ResidualVM
				ANDROID_PLATFORM=9
				ANDROID_PLATFORM_ARCH="arm"
				;;
			android-mips)
				CXXFLAGS="$CXXFLAGS -march=mips32"
				CXXFLAGS="$CXXFLAGS -mtune=mips32"
				ABI="mips"
				# Platform version 9 is needed as earlier versions of platform do not support this arch.
				ANDROID_PLATFORM=9
				ANDROID_PLATFORM_ARCH="mips"
				;;
			android-x86)
				CXXFLAGS="$CXXFLAGS -march=i686"
				CXXFLAGS="$CXXFLAGS -mtune=i686"
				ABI="x86"
				# Platform version 9 is needed as earlier versions of platform do not support this arch.
				ANDROID_PLATFORM=9
				ANDROID_PLATFORM_ARCH="x86"
				;;
			ouya)
				CXXFLAGS="$CXXFLAGS -march=armv7-a"
				CXXFLAGS="$CXXFLAGS -mtune=cortex-a9"
				CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
				CXXFLAGS="$CXXFLAGS -mfpu=neon"
				ABI="armeabi-v7a"
				ANDROID_PLATFORM=4
				ANDROID_PLATFORM_ARCH="arm"
				;;
		esac

		# Setup platform version and arch
		CXXFLAGS="$CXXFLAGS --sysroot=$ANDROID_NDK/platforms/android-$ANDROID_PLATFORM/arch-$ANDROID_PLATFORM_ARCH"
		LDFLAGS="$LDFLAGS --sysroot=$ANDROID_NDK/platforms/android-$ANDROID_PLATFORM/arch-$ANDROID_PLATFORM_ARCH"

		CXXFLAGS="$CXXFLAGS -fpic"
		CXXFLAGS="$CXXFLAGS -ffunction-sections"
		CXXFLAGS="$CXXFLAGS -funwind-tables"
		if test "$_debug_build" = yes; then
			CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
			CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
		else
			CXXFLAGS="$CXXFLAGS -fomit-frame-pointer"
			CXXFLAGS="$CXXFLAGS -fstrict-aliasing"
		fi
		CXXFLAGS="$CXXFLAGS -finline-limit=300"
		_optimization_level=-Os

		if test "$_host" = android -o "$_host" = android-arm; then
			CXXFLAGS="$CXXFLAGS -mthumb-interwork"
			# FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this.
			CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5__"
			CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5T__"
			CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5E__"
			CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5TE__"
		fi

		# surpress 'mangling of 'va_list' has changed in GCC 4.4' warning
		CXXFLAGS="$CXXFLAGS -Wno-psabi"

		if test "$_host" = android -o "$_host" = android-arm; then
			LDFLAGS="$LDFLAGS -mthumb-interwork"
		fi

		LDFLAGS="$LDFLAGS -L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/`$CXX -dumpversion`/libs/$ABI/"
		LIBS="$LIBS -lsupc++"
		add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK"
		if test -d "$ANDROID_SDK"/build-tools; then
			_build_tools_version=`cd "$ANDROID_SDK"/build-tools && ls -1 | sort -rn | head -1`
			add_line_to_config_mk "ANDROID_BTOOLS = build-tools/$_build_tools_version"
		else
			add_line_to_config_mk "ANDROID_BTOOLS = platform-tools"
		fi
		_seq_midi=no
		;;
	beos*)
		DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
		# Needs -lbind -lsocket for the timidity MIDI driver
		LDFLAGS="-L/boot/home/config/lib"
		CFLAGS="-I/boot/home/config/include"
		CXXFLAGS="$CXXFLAGS -fhuge-objects"
		LIBS="$LIBS -lbind -lsocket"
		_seq_midi=no
		;;
	cygwin*)
		echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW.
		exit 1
		;;
	darwin*)
		DEFINES="$DEFINES -DMACOSX"
		LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI"
		add_line_to_config_mk 'MACOSX = 1'

		# Now we may have MacPorts or Fink installed
		# Which put libraries and headers in non-standard places
		# Checking them here

		# MacPorts
		# There is no way to get the prefix, so implementing a hack here
		macport_version=`port version 2>/dev/null`
		if test "$?" -eq 0; then
			macport_version="`echo "${macport_version}" | sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'`"
			echo_n "You seem to be running MacPorts version ${macport_version}..."

			macport_prefix=`which port`
			# strip off /bin/port from /opt/local/bin/port
			macport_prefix=`dirname ${macport_prefix}`
			macport_prefix=`dirname ${macport_prefix}`

			echo "adding ${macport_prefix} to paths"

			LDFLAGS="-L${macport_prefix}/lib $LDFLAGS"
			CXXFLAGS="-I${macport_prefix}/include $CXXFLAGS"
			
			if test -z "$_staticlibpath"; then
				_staticlibpath=${macport_prefix}
				echo "Set staticlib-prefix to ${_staticlibpath}"
			fi
		fi

		# Fink
		# There is no way to get the prefix, so implementing a hack here
		fink_version=`fink -V 2>/dev/null`
		if test "$?" -eq 0; then
			fink_version="`echo "${fink_version}" | sed -ne 's/Package manager version: \([0-9.]*\)/\1/gp'`"
			echo_n "You seem to be running Fink version ${fink_version}..."

			fink_prefix=`which fink`
			# strip off /bin/fink from /sw/bin/port
			fink_prefix=`dirname ${fink_prefix}`
			fink_prefix=`dirname ${fink_prefix}`

			echo "adding ${fink_prefix} to paths"

			LDFLAGS="-L${fink_prefix}/lib $LDFLAGS"
			CXXFLAGS="-I${fink_prefix}/include $CXXFLAGS"

			if test -z "$_staticlibpath"; then
				_staticlibpath=${fink_prefix}
				echo "Set staticlib-prefix to ${_staticlibpath}"
			fi
		fi

		# Homebrew
		brew_version=`brew -v 2>/dev/null`
		if test "$?" -eq 0; then
			brew_version="`echo "${brew_version}" | sed -ne 's/Homebrew \([0-9.]*\)/\1/gp'`"
			echo_n "You seem to be running Homebrew version ${brew_version}..."

			brew_prefix=`brew --prefix`

			echo "adding ${brew_prefix} to paths"

			LDFLAGS="-L${brew_prefix}/lib $LDFLAGS"
			CXXFLAGS="-I${brew_prefix}/include $CXXFLAGS"

			if test -z "$_staticlibpath"; then
				_staticlibpath=${brew_prefix}
				echo "Set staticlib-prefix to ${_staticlibpath}"
			fi
		fi

		# If _staticlibpath is not set yet try first /sw (fink) then /usr/local
		# (the macports case is handled above).
		if test -z "$_staticlibpath"; then
			if test -d "/sw"; then
				_staticlibpath=/sw
				echo "Set staticlib-prefix to ${_staticlibpath}"
			elif test -d "/usr/local"; then
				_staticlibpath=/usr/local
				echo "Set staticlib-prefix to ${_staticlibpath}"
			else
				echo "Could not determine prefix for static libraries"
			fi
		fi
		;;
	dreamcast)
		DEFINES="$DEFINES -D__DC__"
		DEFINES="$DEFINES -DNONSTANDARD_PORT"
		;;
	ds)
		DEFINES="$DEFINES -D__DS__"
		DEFINES="$DEFINES -DNDS"
		DEFINES="$DEFINES -DARM9"
		DEFINES="$DEFINES -DARM"
		DEFINES="$DEFINES -DNONSTANDARD_PORT"
		CXXFLAGS="$CXXFLAGS -isystem $DEVKITPRO/libnds/include"
		CXXFLAGS="$CXXFLAGS -isystem $DEVKITPRO/devkitARM/arm-eabi/include"
		CXXFLAGS="$CXXFLAGS -mcpu=arm9tdmi"
		CXXFLAGS="$CXXFLAGS -mtune=arm9tdmi"
		CXXFLAGS="$CXXFLAGS -fomit-frame-pointer"
		CXXFLAGS="$CXXFLAGS -mthumb-interwork"
		CXXFLAGS="$CXXFLAGS -ffunction-sections"
		CXXFLAGS="$CXXFLAGS -fdata-sections"
		CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
		CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit"
		LDFLAGS="$LDFLAGS -specs=ds_arm9.specs"
		LDFLAGS="$LDFLAGS -mthumb-interwork"
		LDFLAGS="$LDFLAGS -mno-fpu"
		LDFLAGS="$LDFLAGS -Wl,-Map,map.txt"
		if test "$_dynamic_modules" = no ; then
			LDFLAGS="$LDFLAGS -Wl,--gc-sections"
		else
			LDFLAGS="$LDFLAGS -Wl,--no-gc-sections"
			# TODO automate this required 2 step linking phase
			# LDFLAGS="$LDFLAGS -Wl,--retain-symbols-file,ds.syms"
		fi
		LDFLAGS="$LDFLAGS -L$DEVKITPRO/libnds/lib"
		LIBS="$LIBS -lnds9"
		;;
	freebsd*)
		LDFLAGS="$LDFLAGS -L/usr/local/lib"
		CXXFLAGS="$CXXFLAGS -I/usr/local/include"
		;;
	gamecube)
		_optimization_level=-Os
		CXXFLAGS="$CXXFLAGS -mogc"
		CXXFLAGS="$CXXFLAGS -mcpu=750"
		CXXFLAGS="$CXXFLAGS -meabi"
		CXXFLAGS="$CXXFLAGS -mhard-float"
		CXXFLAGS="$CXXFLAGS -ffunction-sections"
		CXXFLAGS="$CXXFLAGS -fdata-sections"
		CXXFLAGS="$CXXFLAGS -fmodulo-sched"
		CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit"
		CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include"
		# libogc is required to link the cc tests (includes _start())
		LDFLAGS="$LDFLAGS -mogc"
		LDFLAGS="$LDFLAGS -mcpu=750"
		LDFLAGS="$LDFLAGS -L$DEVKITPRO/libogc/lib/cube"
		LDFLAGS="$LDFLAGS -logc"
		if test "$_dynamic_modules" = "yes" ; then
			# retarded toolchain patch forces --gc-sections, overwrite it
			LDFLAGS="$LDFLAGS -Wl,--no-gc-sections"
		fi
		;;
	haiku*)
		DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
		# Needs -lnetwork for the timidity MIDI driver
		LIBS="$LIBS -lnetwork"
		_seq_midi=no
		;;
	irix*)
		DEFINES="$DEFINES -DIRIX"
		DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
		LIBS="$LIBS -lmd -lfastm -lm"
		_ranlib=:
		;;
	linux* | uclinux*)
		# When not cross-compiling, enable large file support, but don't
		# care if getconf doesn't exist or doesn't recognize LFS_CFLAGS.
		if test -z "$_host"; then
			CXXFLAGS="$CXXFLAGS `getconf LFS_CFLAGS 2>/dev/null`"
		fi
		;;
	maemo)
		DEFINES="$DEFINES -DMAEMO"
		;;
	mingw*)
		DEFINES="$DEFINES -DWIN32"
		DEFINES="$DEFINES -D__USE_MINGW_ANSI_STDIO=0"
		LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++"
		LIBS="$LIBS -lmingw32 -lwinmm -lgdi32"
		OBJS="$OBJS residualvmwinres.o"
		add_line_to_config_mk 'WIN32 = 1'
		;;
	mint*)
		DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
		;;
	n64)
		DEFINES="$DEFINES -D__N64__"
		DEFINES="$DEFINES -DLIMIT_FPS"
		DEFINES="$DEFINES -DNONSTANDARD_PORT"
		DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
		DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER"
		DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL"
		DEFINES="$DEFINES -DDISABLE_FANCY_THEMES"
		DEFINES="$DEFINES -DDISABLE_NES_APU"
		DEFINES="$DEFINES -DDISABLE_SID"
		DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
		;;
	ps2)
		CXXFLAGS="$CXXFLAGS -G2"
		DEFINES="$DEFINES -D_EE"
		DEFINES="$DEFINES -D__PLAYSTATION2__"
		if test -z "$PS2SDK_OLD"; then
			DEFINES="$DEFINES -D__NEW_PS2SDK__"
		fi
		;;
	ps3)
		# Force use of SDL and freetype from the ps3 toolchain
		_sdlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin"
		_freetypepath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin"

		DEFINES="$DEFINES -DPLAYSTATION3"
		CXXFLAGS="$CXXFLAGS -mcpu=cell -mminimal-toc -I$PSL1GHT/ppu/include -I$PS3DEV/portlibs/ppu/include"
		LDFLAGS="$LDFLAGS -L$PSL1GHT/ppu/lib -L$PS3DEV/portlibs/ppu/lib"
		add_line_to_config_mk 'PLAYSTATION3 = 1'
		add_line_to_config_h "#define PREFIX \"${prefix}\""
		;;
	psp)
		if test -d "$PSPDEV/psp/lib"; then
			LDFLAGS="$LDFLAGS -L$PSPDEV/psp/lib"
		fi
		LDFLAGS="$LDFLAGS -L$PSPSDK/lib"
		LDFLAGS="$LDFLAGS -specs=$_srcdir/backends/platform/psp/psp.spec"
		_optimization_level=-O3
		CXXFLAGS="$CXXFLAGS -I$PSPSDK/include"
		# FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this.
		CXXFLAGS="$CXXFLAGS -D_PSP_FW_VERSION=150"
		;;
	solaris*)
		DEFINES="$DEFINES -DSOLARIS"
		DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
		# Needs -lbind -lsocket for the timidity MIDI driver
		LIBS="$LIBS -lnsl -lsocket"
		;;
	tizen)
		add_line_to_config_mk "TIZEN_ROOTSTRAP = $TIZEN_ROOTSTRAP"
		LDFLAGS="$LDFLAGS --sysroot=${TIZEN_ROOTSTRAP}"
		LDFLAGS="$LDFLAGS -L${TIZEN_LIBS}/lib"
		CXXFLAGS="$CXXFLAGS -I${TIZEN_LIBS}/include"
		;;
	webos)
		CXXFLAGS="$CXXFLAGS --sysroot=$WEBOS_PDK/arm-gcc/sysroot"
		CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/include"
		CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/include/SDL"
		CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/device/usr/include"
		# These compiler options are needed to support the Palm Pixi
		CXXFLAGS="$CXXFLAGS -mcpu=arm1136jf-s"
		CXXFLAGS="$CXXFLAGS -mfpu=vfp "
		CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
		LDFLAGS="$LDFLAGS -L$WEBOS_PDK/device/lib"
		LDFLAGS="$LDFLAGS -L$WEBOS_PDK/device/usr/lib"
		LDFLAGS="$LDFLAGS -Wl,--allow-shlib-undefined"
		LDFLAGS="$LDFLAGS --sysroot=$WEBOS_PDK/arm-gcc/sysroot"
		add_line_to_config_mk "WEBOS_SDK = $WEBOS_SDK"
		_seq_midi=no
		;;
	wii)
		_optimization_level=-Os
		CXXFLAGS="$CXXFLAGS -mrvl"
		CXXFLAGS="$CXXFLAGS -mcpu=750"
		CXXFLAGS="$CXXFLAGS -meabi"
		CXXFLAGS="$CXXFLAGS -mhard-float"
		CXXFLAGS="$CXXFLAGS -ffunction-sections"
		CXXFLAGS="$CXXFLAGS -fdata-sections"
		CXXFLAGS="$CXXFLAGS -fmodulo-sched"
		CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit"
		CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include"
		# libogc is required to link the cc tests (includes _start())
		LDFLAGS="$LDFLAGS -mrvl"
		LDFLAGS="$LDFLAGS -mcpu=750"
		LDFLAGS="$LDFLAGS -L$DEVKITPRO/libogc/lib/wii"
		LDFLAGS="$LDFLAGS -logc"
		if test "$_dynamic_modules" = "yes" ; then
			# retarded toolchain patch forces --gc-sections, overwrite it
			LDFLAGS="$LDFLAGS -Wl,--no-gc-sections"
		fi
		;;
	wince)
		_optimization_level=-O3
		CXXFLAGS="$CXXFLAGS -fno-inline-functions"
		CXXFLAGS="$CXXFLAGS -march=armv4"
		CXXFLAGS="$CXXFLAGS -mtune=xscale"
		DEFINES="$DEFINES -D_WIN32_WCE=300"
		DEFINES="$DEFINES -D__ARM__"
		DEFINES="$DEFINES -D_ARM_"
		DEFINES="$DEFINES -DUNICODE"
		DEFINES="$DEFINES -DFPM_DEFAULT"
		DEFINES="$DEFINES -DNONSTANDARD_PORT"
		DEFINES="$DEFINES -DWRAP_MALLOC"
		DEFINES="$DEFINES -DWIN32"
		DEFINES="$DEFINES -Dcdecl="
		DEFINES="$DEFINES -D__cdecl__="
		add_line_to_config_mk "WRAP_MALLOC = 1"
		;;
esac

if test -n "$_host"; then
	# Cross-compiling mode - add your target here if needed
	echo "Cross-compiling to $_host"
	case "$_host" in
		android | android-arm | android-v7a | android-arm-v7a | android-mips | android-x86 | ouya)
			# we link a .so as default
			LDFLAGS="$LDFLAGS -shared"
			LDFLAGS="$LDFLAGS -Wl,-Bsymbolic,--no-undefined"
			HOSTEXEPRE=lib
			HOSTEXEEXT=.so
			_backend="android"
			_port_mk="backends/platform/android/android.mk"
			_build_scalers=no
			_seq_midi=no
			_mt32emu=no
			_timidity=no
			;;
		arm-linux|arm*-linux-gnueabi|arm-*-linux)
			;;
		arm-riscos|linupy)
			DEFINES="$DEFINES -DLINUPY"
			;;
		bfin*)
			;;
		caanoo)
			DEFINES="$DEFINES -DCAANOO"
			if test "$_debug_build" = no; then
				# Use -O3 on the Caanoo for non-debug builds.
				_optimization_level=-O3
			fi
			CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s"
			CXXFLAGS="$CXXFLAGS -mtune=arm926ej-s"
			ASFLAGS="$ASFLAGS"
			_backend="gph"
			_build_hq_scalers=no
			_savegame_timestamp=no
			_vkeybd=yes
			_seq_midi=no
			_mt32emu=no
			_timidity=no
			_port_mk="backends/platform/gph/caanoo-bundle.mk"
			;;
		*darwin*)
			_ranlib=$_host-ranlib
			_strip=$_host-strip
			;;
		dingux)
			DEFINES="$DEFINES -DDINGUX"
			DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL"
			DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
			ASFLAGS="$ASFLAGS"
			CXXFLAGS="$CXXFLAGS -msoft-float"
			CXXFLAGS="$CXXFLAGS -mips32"
			_backend="dingux"
			_mt32emu=no
			_optimization_level=-O3
			# Disable alsa midi to get the port build on OpenDingux toolchain
			_alsa=no 
			_vkeybd=yes
			_build_hq_scalers=no
			_keymapper=no
			# Force disable vorbis on dingux, it has terrible performance compared to tremor
			_vorbis=no
			# Force disable seq on dingux, no way to use it and it would get enabled by default with configure
			_seq_midi=no
			_port_mk="backends/platform/dingux/dingux.mk"
			;;
		dreamcast)
			DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER"
			DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE"
			DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
			# Enable serial debugging output only when --enable-debug is passed
			if test "$_release_build" = yes -o "$_debug_build" != yes; then
				DEFINES="$DEFINES -DNOSERIAL"
			fi
			_optimization_level=-O3
			CXXFLAGS="$CXXFLAGS -funroll-loops"
			CXXFLAGS="$CXXFLAGS -fschedule-insns2"
			CXXFLAGS="$CXXFLAGS -fomit-frame-pointer"
			CXXFLAGS="$CXXFLAGS -fdelete-null-pointer-checks"
			# no-delayed-branch is a workaround for GCC bug #42841 - "SH: Assembler complains pcrel too far."
			CXXFLAGS="$CXXFLAGS -fno-delayed-branch"
			_backend="dc"
			_build_scalers=no
			_mad=yes
			_zlib=yes
			add_line_to_config_mk 'ronindir = /usr/local/ronin'
			_port_mk="backends/platform/dc/dreamcast.mk"
			;;
		ds)
			DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
			DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER"
			DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL"
			DEFINES="$DEFINES -DDISABLE_FANCY_THEMES"
			DEFINES="$DEFINES -DDISABLE_SID"
			DEFINES="$DEFINES -DDISABLE_NES_APU"
			DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE"
			DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
			DEFINES="$DEFINES -DSTREAM_AUDIO_FROM_DISK"
			DEFINES="$DEFINES -DVECTOR_RENDERER_FORMAT=1555"
			_backend="ds"
			_build_scalers=no
			_mt32emu=no
			_port_mk="backends/platform/ds/ds.mk"
			;;
		gamecube)
			_backend="wii"
			_build_scalers=no
			_vkeybd=yes
			_mt32emu=no
			_port_mk="backends/platform/wii/wii.mk"
			add_line_to_config_mk 'GAMECUBE = 1'
			add_line_to_config_h '#define AUDIO_REVERSE_STEREO'
			add_line_to_config_h '#define GAMECUBE'
			add_line_to_config_h "/* #define DEBUG_WII_USBGECKO */"
			add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */"
			add_line_to_config_h "/* #define DEBUG_WII_GDB */"
			add_line_to_config_h "#define USE_WII_DI"
			;;
               gcw0)
			DEFINES="$DEFINES -DDINGUX -DGCW0"
			DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
			ASFLAGS="$ASFLAGS"
			CXXFLAGS="$CXXFLAGS -mips32"
			_backend="dingux"
			_mt32emu=no
			_optimization_level=-O3
			# Disable alsa midi to get the port build on OpenDingux toolchain
			_alsa=no
			_vkeybd=yes
			_build_hq_scalers=no
			_keymapper=yes
			# Force disable vorbis on dingux, it has terrible performance compared to tremor
			_vorbis=no
			# Force disable seq on dingux, no way to use it and it would get enabled by default with configure
			_seq_midi=no
			_port_mk="backends/platform/dingux/dingux.mk"
			;;
		gp2x)
			DEFINES="$DEFINES -DGP2X"
			CXXFLAGS="$CXXFLAGS -march=armv4t"
			ASFLAGS="$ASFLAGS -mfloat-abi=soft"
			LDFLAGS="$LDFLAGS -static"
			_backend="gph"
			_build_hq_scalers=no
			_savegame_timestamp=no
			_vkeybd=yes
			_seq_midi=no
			_mt32emu=no
			_timidity=no
			_port_mk="backends/platform/gph/gp2x-bundle.mk"
			;;
		gp2xwiz)
			DEFINES="$DEFINES -DGP2XWIZ"
			CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s"
			CXXFLAGS="$CXXFLAGS -mtune=arm926ej-s"
			ASFLAGS="$ASFLAGS -mfloat-abi=soft"
			_backend="gph"
			_build_hq_scalers=no
			_savegame_timestamp=no
			_vkeybd=yes
			_seq_midi=no
			_mt32emu=no
			_timidity=no
			_port_mk="backends/platform/gph/gp2xwiz-bundle.mk"
			;;
		iphone)
			DEFINES="$DEFINES -DIPHONE"
			ASFLAGS="$ASFLAGS -arch armv6"
			_backend="iphone"
			_build_scalers=no
			_mt32emu=no
			_seq_midi=no
			_timidity=no
			;;
		m68k-atari-mint)
			DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
			_ranlib=m68k-atari-mint-ranlib
			_ar="m68k-atari-mint-ar cru"
			_seq_midi=no
			;;
		maemo)
			_optimization_level=-Os
			CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s"
			CXXFLAGS="$CXXFLAGS -fomit-frame-pointer"
			INCLUDES="$INCLUDES -I/usr/X11R6/include"
			LIBS="$LIBS -lX11"
			LIBS="$LIBS -L/usr/lib"
			
			_backend="maemo"
			_vkeybd=yes
			_keymapper=yes
			_build_hq_scalers=no
			_mt32emu=no
			_alsa=no
			_mad=yes
			_tremor=yes
			_zlib=yes
			;;
		*mingw32*)
			_sdlconfig=$_host-sdl-config
			_windres=$_host-windres
			_ar="$_host-ar cru"
			_ranlib=$_host-ranlib
			;;
		mips-sgi*)
			LDFLAGS="$LDFLAGS -static-libgcc"
			LIBS="$LIBS -laudio"
			;;
		motoezx)
			DEFINES="$DEFINES -DMOTOEZX"
			ASFLAGS="$ASFLAGS -mfpu=vfp"
			_backend="linuxmoto"
			_build_hq_scalers=no
			_mt32emu=no
			_vkeybd=yes
			_seq_midi=no
			_port_mk="backends/platform/linuxmoto/linuxmoto.mk"
			;;
		motomagx)
			DEFINES="$DEFINES -DMOTOMAGX"
			ASFLAGS="$ASFLAGS -mfpu=vfp"
			_backend="linuxmoto"
			_build_hq_scalers=no
			_mt32emu=no
			_vkeybd=yes
			_seq_midi=no
			_port_mk="backends/platform/linuxmoto/linuxmoto.mk"
			;;
		n64)
			CXXFLAGS="$CXXFLAGS -mno-extern-sdata"
			CXXFLAGS="$CXXFLAGS --param max-inline-insns-auto=20"
			CXXFLAGS="$CXXFLAGS -fomit-frame-pointer"
			CXXFLAGS="$CXXFLAGS -march=vr4300"
			CXXFLAGS="$CXXFLAGS -mtune=vr4300"
			CXXFLAGS="$CXXFLAGS -mhard-float"
			LDFLAGS="$LDFLAGS -march=vr4300"
			LDFLAGS="$LDFLAGS -mtune=vr4300"
			LDFLAGS="$LDFLAGS -nodefaultlibs"
			LDFLAGS="$LDFLAGS -nostartfiles"
			LDFLAGS="$LDFLAGS -mno-crt0"
			LDFLAGS="$LDFLAGS -L$N64SDK/hkz-libn64"
			LDFLAGS="$LDFLAGS -L$N64SDK/lib"
			LDFLAGS="$LDFLAGS -T n64ld_cpp.x -Xlinker -Map -Xlinker residualvm.map"
			_backend="n64"
			_mt32emu=no
			_build_scalers=no
			_savegame_timestamp=no
			_translation=no
			_keymapper=no
			_text_console=no
			_vkeybd=yes
			_dynamic_modules=no
			_plugins_default=static
			# Force use of libmad, libtremor and zlib
			_mad=no
			_tremor=yes
			_zlib=yes
			_port_mk="backends/platform/n64/n64.mk"
			;;
		neuros)
			DEFINES="$DEFINES -DNEUROS"
			_backend='null'
			_build_hq_scalers=no
			_mt32emu=no
			;;
		openpandora)
			DEFINES="$DEFINES -DOPENPANDORA"
			DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
			if test "$_release_build" = no; then
				DEFINES="$DEFINES -DOP_DEBUG"
			fi

			# Use -O3 on the OpenPandora for optimized builds.
			if test "$_optimizations" = yes; then
				_optimization_level=-O3
			fi

			define_in_config_if_yes yes 'USE_ARM_NEON_ASPECT_CORRECTOR'
			CXXFLAGS="$CXXFLAGS -march=armv7-a"
			CXXFLAGS="$CXXFLAGS -mtune=cortex-a8"
			CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
			CXXFLAGS="$CXXFLAGS -mfpu=neon"
			CXXFLAGS="$CXXFLAGS -fsingle-precision-constant"
			ASFLAGS="$ASFLAGS -mfloat-abi=softfp"
			_backend="openpandora"
			_build_hq_scalers=yes
			_vkeybd=no
			_mt32emu=no
			_seq_midi=no
			_port_mk="backends/platform/openpandora/op-bundle.mk"
			;;
		ppc-amigaos)
			# PPC Linker requires this to fix relocation errors
			CXXFLAGS="$CXXFLAGS -mlongcall"

			# Only static builds link successfully on buildbot
			LDFLAGS=`echo $LDFLAGS | sed 's/-use-dynld//'`
			LDFLAGS="$LDFLAGS -static"

			# toolchain binaries prefixed by host
			_ranlib=$_host-ranlib
			_strip=$_host-strip
			_ar="$_host-ar cru"
			_as="$_host-as"
			_windres=$_host-windres

			_port_mk="backends/platform/sdl/amigaos/amigaos.mk"
			;;
		ps2)
			DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE"
			DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
			DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL"
			DEFINES="$DEFINES -DDISABLE_SID"
			DEFINES="$DEFINES -DDISABLE_NES_APU"
			CXXFLAGS="$CXXFLAGS -fno-exceptions"
			CXXFLAGS="$CXXFLAGS -fno-rtti"
			_backend="ps2"
			_build_scalers=no
			_mt32emu=no
			# HACK to enable mad & zlib (they are not properly detected due to linker issues).
			# This trick doesn't work for tremor right now, as the PS2 port the resulting library
			# libtremor, while our code later on expects it to be called libvorbisidec.
			# TODO: Enable tremor, e.g. by adding  -ltremor or by renaming the lib.
			# Disable this for older SDK as this breaks the build otherwise...
			if test -z "$PS2SDK_OLD"; then
				_tremor=yes
			fi
			_mad=yes
			_zlib=yes
			# HACK to fix compilation of C source files for now.
			add_line_to_config_mk 'CC := ee-gcc'
			add_line_to_config_mk 'CFLAGS := -std=c99 -W -Wno-unused-parameter -Wconversion -pedantic -G2 -s -O2 -Wuninitialized'
			# HACK to fix linking for now. It seems ee-g++ does not handle linking correctly.
			LD=ee-gcc

			if test "$_debug_build" = yes; then
				# TODO: Setup debug build properly
				DEFINES="$DEFINES -D__PS2_DEBUG__"
				#INCLUDES="$INCLUDES -I$(PS2GDB)/ee"
				#LDFLAGS="$LDFLAGS -L$(PS2GDB)/lib"
				LDFLAGS="$LDFLAGS -lps2gdbStub"
				LDFLAGS="$LDFLAGS -lps2ip"
				LDFLAGS="$LDFLAGS -ldebug"
			else
				# If not building for debug mode, strip binaries.
				CXXFLAGS="$CXXFLAGS -s"
			fi
			;;
		ps3)
			_mt32emu=no
			_timidity=no
			_vkeybd=yes
			_eventrec=no
			_port_mk="backends/platform/sdl/ps3/ps3.mk"
			;;
		psp)
			_backend="psp"
			_build_scalers=no
			_mt32emu=no
			_port_mk="backends/platform/psp/psp.mk"
			;;
		samsungtv)
			DEFINES="$DEFINES -DSAMSUNGTV"
			DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
			ASFLAGS="$ASFLAGS -mfpu=vfp"
			HOSTEXEEXT=".so"
			_backend="samsungtv"
			_mt32emu=no
			_vkeybd=yes
			;;
		tizen)
			_unix=yes
			_backend="tizen"
			_port_mk="backends/platform/tizen/tizen.mk"
			_arm_asm=yes
			_build_scalers=no
			_seq_midi=no
			_mt32emu=no
			_timidity=no
			_vkeybd=yes
			;;
		webos)
			_backend="webos"
			_port_mk="backends/platform/webos/webos.mk"
			_build_scalers=yes
			_build_hq_scalers=no
			_timidity=no
			_mt32emu=no
			_seq_midi=no
			_vkeybd=no
			_keymapper=yes
			add_line_to_config_mk "HOST_COMPILER = `uname`"
			;;
		wii)
			_backend="wii"
			_build_scalers=no
			_vkeybd=yes
			_port_mk="backends/platform/wii/wii.mk"
			add_line_to_config_mk 'GAMECUBE = 0'
			add_line_to_config_h '#define AUDIO_REVERSE_STEREO'
			add_line_to_config_h "#define DEBUG_WII_USBGECKO"
			add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */"
			add_line_to_config_h "/* #define DEBUG_WII_GDB */"
			add_line_to_config_h "#define USE_WII_DI"
			add_line_to_config_h "#define USE_WII_SMB"
			add_line_to_config_h "#define USE_WII_KBD"
			;;
		wince)
			LDFLAGS="$LDFLAGS -Wl,--stack,65536"
			_tremolo=yes
			_backend="wince"
			_detectlang=yes
			_mt32emu=no
			_port_mk="backends/platform/wince/wince.mk"
			;;
		*)
			echo "WARNING: Unknown target, continuing with auto-detected values"
			;;
	esac
fi

#
# Backend related stuff
#
case $_backend in
	android)
		DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
		CXXFLAGS="$CXXFLAGS -Wa,--noexecstack"
		LDFLAGS="$LDFLAGS -Wl,-z,noexecstack"
		INCLUDES="$INCLUDES -I$ANDROID_NDK/sources/cxx-stl/system/include"
		;;
	dc)
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc'
		INCLUDES="$INCLUDES "'-isystem $(ronindir)/include'
		LDFLAGS="$LDFLAGS -Wl,-Ttext,0x8c010000"
		LDFLAGS="$LDFLAGS -nostartfiles"
		LDFLAGS="$LDFLAGS "'$(ronindir)/lib/crt0.o'
		LDFLAGS="$LDFLAGS "'-L$(ronindir)/lib'
		# Enable serial debugging output only when --enable-debug is passed
		if test "$_release_build" = yes -o "$_debug_build" != yes; then
			LIBS="$LIBS -lronin-noserial -lm"
		else
			LIBS="$LIBS -lronin -lm"
		fi
		;;
	dingux)
		DEFINES="$DEFINES -DDINGUX"
		;;
	ds)
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/arm9/source'
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/commoninclude'
		INCLUDES="$INCLUDES "'-Ibackends/platform/ds/arm9/data'
		;;
	gph)
		# On the GPH devices we want fancy themes but do not want the load/save thumbnail grid.
		DEFINES="$DEFINES -DDISABLE_SAVELOADCHOOSER_GRID"
		DEFINES="$DEFINES -DGPH_DEVICE"
		DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE"
		if test "$_debug_build" = yes; then
			DEFINES="$DEFINES -DGPH_DEBUG"
		fi
		;;
	iphone)
		LIBS="$LIBS -lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES"
		LIBS="$LIBS -framework QuartzCore -framework CoreFoundation -framework Foundation"
		LIBS="$LIBS -framework AudioToolbox -framework CoreAudio"
		;;
	linuxmoto)
		DEFINES="$DEFINES -DLINUXMOTO"
		;;
	maemo)
		DEFINES="$DEFINES -DMAEMO"
		;;
	n64)
		INCLUDES="$INCLUDES "'-I$(N64SDK)/include'
		INCLUDES="$INCLUDES "'-I$(N64SDK)/mips64/include'
		INCLUDES="$INCLUDES "'-I$(N64SDK)/hkz-libn64'
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/n64'
		LIBS="$LIBS -lpakfs -lframfs -ln64 -ln64utils -lromfs"
		LIBS="$LIBS -lm -lstdc++ -lz"
		;;
	null)
		DEFINES="$DEFINES -DUSE_NULL_DRIVER"
		;;
	openpandora)
		;;
	ps2)
		DEFINES="$DEFINES -D_EE"
		DEFINES="$DEFINES -DFORCE_RTL"
		INCLUDES="$INCLUDES -I$PS2SDK/ee/include"
		INCLUDES="$INCLUDES -I$PS2SDK/common/include"
		INCLUDES="$INCLUDES -I$PS2SDK/ports/include"
		if test "$_dynamic_modules" = no ; then
			LDFLAGS="$LDFLAGS -mno-crt0"
			LDFLAGS="$LDFLAGS $PS2SDK/ee/startup/crt0.o"
			LDFLAGS="$LDFLAGS -T $PS2SDK/ee/startup/linkfile"
		fi
		LDFLAGS="$LDFLAGS -L$PS2SDK/ee/lib"
		LDFLAGS="$LDFLAGS -L$PS2SDK/ports/lib"
		LIBS="$LIBS -lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm"
		LIBS="$LIBS -lm -lc -lfileXio -lkernel -lstdc++"
		;;
	psp)
		DEFINES="$DEFINES -D__PSP__"
		DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
		DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL"
		LIBS="$LIBS -lpng"
		LIBS="$LIBS -Wl,-Map,mapfile.txt"
		;;
	samsungtv)
		DEFINES="$DEFINES -DSAMSUNGTV"
		LDFLAGS="$LDFLAGS -shared"
		LDFLAGS="$LDFLAGS -fpic"
		;;
	tizen)
		# dirent.h not available. NONSTANDARD_PORT==ensure portdefs.h is included
		DEFINES="$DEFINES -DTIZEN -DDISABLE_STDIO_FILESTREAM -DNONSTANDARD_PORT"
		DEFINES="$DEFINES -DNO_STDERR_STDOUT"
		DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/tizen'
		INCLUDES="$INCLUDES "'-I$(TIZEN_ROOTSTRAP)/usr/include'
		INCLUDES="$INCLUDES "'-I$(TIZEN_ROOTSTRAP)/usr/include/osp'
		if test "$_debug_build" = yes; then
			CXXFLAGS="$CXXFLAGS -D_DEBUG -DBUILD_DLL -O0 -g3"
		fi
		# created a shared library for inclusion via the eclipse build
		CXXFLAGS="$CXXFLAGS -Wno-psabi"
		CXXFLAGS="$CXXFLAGS --sysroot=${TIZEN_ROOTSTRAP}"
		CXXFLAGS="$CXXFLAGS -fmessage-length=0"
		CXXFLAGS="$CXXFLAGS -fPIC"
		HOSTEXEPRE=lib
		HOSTEXEEXT=.a
		;;
	webos)
		# There is no sdl-config in the WebOS PDK so we don't use find_sdlconfig here.
		# The PDL library acts as the WebOS device toolchain, and is required to control the virtual keyboard among other OS-level events.
		LIBS="$LIBS -lSDL -lpdl"
		DEFINES="$DEFINES -DWEBOS"
		DEFINES="$DEFINES -DSDL_BACKEND"
		add_line_to_config_mk "SDL_BACKEND = 1"
		MODULES="$MODULES backends/platform/sdl"
		;;
	wii)
		DEFINES="$DEFINES -D__WII__"
		DEFINES="$DEFINES -DGEKKO"
		case $_host_os in
		gamecube)
			LIBS="$LIBS -lgxflux -liso9660 -lfat -logc -ldb"
			;;
		*)
			LIBS="$LIBS -lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb"
			;;
		esac
		;;
	wince)
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince'
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince/CEgui'
		INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince/CEkeys'
		LIBS="$LIBS -static -lSDL"
		DEFINES="$DEFINES -DSDL_BACKEND"
		add_line_to_config_mk "SDL_BACKEND = 1"
		;;
	sdl)
		;;
	*)
		echo "support for $_backend backend not implemented in configure script yet"
		exit 1
		;;
esac
MODULES="$MODULES backends/platform/$_backend"

#
# Setup SDL specifics for SDL based backends
#
case $_backend in
	dingux | gph | linuxmoto | maemo | openpandora | samsungtv | sdl)
		find_sdlconfig
		INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`"
		LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`"
		DEFINES="$DEFINES -DSDL_BACKEND"
		add_line_to_config_mk "SDL_BACKEND = 1"

		_sdlversion=`$_sdlconfig --version`
		case $_sdlversion in
			1.3.*)
				add_line_to_config_mk "USE_SDL13 = 1"
				;;
			*)
				;;
		esac
		;;
esac


#
# Enable 16bit support only for backends which support it
#
case $_backend in
	android | dingux | dc | gph | iphone | maemo | openpandora | psp | samsungtv | sdl | tizen | webos | wii)
		if test "$_16bit" = auto ; then
			_16bit=yes
		else
			_16bit=no
		fi
		;;
	*)
		_16bit=no
		;;
esac

#
# Enable Event Recorder only for backends that support it
#
case $_backend in
	sdl)
		if test "$_eventrec" = auto ; then
			_eventrec=yes
		fi
		;;
	*)
		_eventrec=no
		;;
esac

#
# Disable savegame timestamp support for backends which don't have a reliable real time clock
#
case $_backend in
	gph | n64)
		if test "$_savegame_timestamp" = auto ; then
			_savegame_timestamp=no
		else
			_savegame_timestamp=yes
		fi
		;;
	*)
		if test "$_savegame_timestamp" = auto ; then
			_savegame_timestamp=yes
		else
			_savegame_timestamp=no
		fi
		;;
esac


#
# Determine whether host is POSIX compliant, or at least POSIX
# compatible enough to support our POSIX code (including dlsym(),
# mkdir() and some other APIs).
#
# TODO: Instead of basing this on the host name, we should really base
# this on the presence of features (such as the dlsym and mkdir APIs).
#
echo_n "Checking if host is POSIX compliant... "
case $_host_os in
	amigaos* | cygwin* | dreamcast | ds | gamecube | mingw* | n64 | ps2 | ps3 | psp | wii | wince)
		_posix=no
		;;
	android | beos* | bsd* | darwin* | freebsd* | gnu* | gph-linux | haiku* | hpux* | iphone | irix*| k*bsd*-gnu* | linux* | maemo | mint* | netbsd* | openbsd* | solaris* | sunos* | uclinux* | webos)
		_posix=yes
		;;
	os2-emx*)
		_posix=yes	# FIXME: Really???
		;;
	*)
		# given this is a shell script, we might assume some type of posix.
		# However, the host system might be a totally different one, so
		# we can assume nothing about it.
		# Indeed, as mentioned further above, we really should test for the
		# presences of relevant APIs on the host anyway...
		_posix=no
		;;
esac
echo $_posix

if test "$_posix" = yes ; then
	DEFINES="$DEFINES -DPOSIX"
	add_line_to_config_mk 'POSIX = 1'
fi

#
# Check whether to enable a verbose build
#
echo_n "Checking whether to have a verbose build... "
echo "$_verbose_build"
add_to_config_mk_if_yes "$_verbose_build" 'VERBOSE_BUILD = 1'


#
# If a specific optimization level was requested, enable optimizations
#
if test -n "$_optimization_level" ; then
	# Ports will specify an optimization level and expect that to be enabled
	if test "$_optimizations" != no ; then
		_optimizations=yes
	fi
else
	_optimization_level=$_default_optimization_level
fi

#
# Check whether to enable optimizations
#
if test "$_optimizations" = yes ; then
	# Enable optimizations. This also
	# makes it possible to use -Wuninitialized, so let's do that.
	CXXFLAGS="$CXXFLAGS $_optimization_level"
	CXXFLAGS="$CXXFLAGS -Wuninitialized"
fi

#
# Check whether plugin support is requested and possible
#
echo_n "Checking whether building plugins was requested... "
echo "$_dynamic_modules"
_mak_plugins=

if test "$_dynamic_modules" = yes ; then
	echo_n "Checking whether building plugins is supported... "
	case $_host_os in
	android)
		_plugin_prefix="lib"
		_plugin_suffix=".so"
		CXXFLAGS="$CXXFLAGS -fpic"
		LIBS="$LIBS -ldl"
# Work around an Android 2.0+ run-time linker bug:
# The linker doesn't actually look in previously
# loaded libraries when trying to resolve symbols -
# effectively turning all dlopen(RTLD_GLOBAL) calls
# into dlopen(RTLD_LOCAL).  It *does* look in
# DT_NEEDED libraries, so the workaround is to add an
# (otherwise unnecessary) dependency from plugins back
# to the main libscummvm.so.
_mak_plugins='
PLUGIN_EXTRA_DEPS = libresidualvm.so
PLUGIN_LDFLAGS  += $(LDFLAGS) -L. -lresidualvm
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;
	darwin*)
		_plugin_prefix=""
		_plugin_suffix=".plugin"
		LIBS="$LIBS -ldl"
_mak_plugins='
PLUGIN_EXTRA_DEPS = $(EXECUTABLE)
PLUGIN_LDFLAGS  += -bundle -bundle_loader $(EXECUTABLE) -exported_symbols_list "$(srcdir)/plugin.exp"
PRE_OBJS_FLAGS  := -all_load
POST_OBJS_FLAGS :=
'
		;;
	dreamcast)
		_plugin_prefix=""
		_plugin_suffix=".plg"
_mak_plugins='
PLUGIN_EXTRA_DEPS	= $(abspath $(srcdir)/backends/platform/dc/plugin.x $(srcdir)/backends/platform/dc/plugin.syms) $(EXECUTABLE) backends/platform/dc/plugin_head.o
PLUGIN_LDFLAGS		= -ml -m4-single-only -nostartfiles -Wl,-q,-T$(srcdir)/backends/platform/dc/plugin.x,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/dc/plugin.syms backends/platform/dc/plugin_head.o
PRE_OBJS_FLAGS		:= -Wl,--whole-archive
POST_OBJS_FLAGS		:= -Wl,--no-whole-archive
'
		;;
	ds)
		_elf_loader=yes
		DEFINES="$DEFINES -DELF_LOADER_CXA_ATEXIT"
		DEFINES="$DEFINES -DUNCACHED_PLUGINS"
		DEFINES="$DEFINES -DELF_NO_MEM_MANAGER"
_mak_plugins='
PLUGIN_LDFLAGS		+= -Wl,-T$(srcdir)/backends/plugins/ds/plugin.ld -mthumb-interwork -mno-fpu
'
		;;
	freebsd*)
		_plugin_prefix="lib"
		_plugin_suffix=".so"
		CXXFLAGS="$CXXFLAGS -fPIC"
_mak_plugins='
PLUGIN_EXTRA_DEPS =
PLUGIN_LDFLAGS  += -shared
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;
	gamecube | wii)
		_elf_loader=yes
		DEFINES="$DEFINES -DELF_LOADER_CXA_ATEXIT"
		DEFINES="$DEFINES -DUNCACHED_PLUGINS"
_mak_plugins='
PLUGIN_LDFLAGS		+= -Wl,-T$(srcdir)/backends/plugins/wii/plugin.ld
'
		;;
	gph*)
		_plugin_prefix=""
		_plugin_suffix=".plugin"
		CXXFLAGS="$CXXFLAGS -fpic"
		LIBS="$LIBS -ldl"
_mak_plugins='
PLUGIN_EXTRA_DEPS = $(EXECUTABLE)
PLUGIN_LDFLAGS  += -shared
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;
	irix*)
		_plugin_prefix="lib"
		_plugin_suffix=".so"
		CXXFLAGS="$CXXFLAGS -fpic"
		LIBS="$LIBS -ldl"
_mak_plugins='
PLUGIN_EXTRA_DEPS =
PLUGIN_LDFLAGS  += -shared -static-libgcc
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;

	linux* | gnu* | k*bsd*-gnu*)
		_plugin_prefix="lib"
		_plugin_suffix=".so"
		CXXFLAGS="$CXXFLAGS -fPIC"
		LIBS="$LIBS -ldl"
_mak_plugins='
PLUGIN_EXTRA_DEPS =
PLUGIN_LDFLAGS  += -shared
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;
	*mingw32*)
		_plugin_prefix=""
		_plugin_suffix=".dll"
_mak_plugins='
PLUGIN_EXTRA_DEPS	= $(EXECUTABLE)
PLUGIN_LDFLAGS		:= -Wl,--enable-auto-import -shared ./libresidualvm.a
PRE_OBJS_FLAGS		:= -Wl,--whole-archive
POST_OBJS_FLAGS		:= -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libresidualvm.a
'
		;;
	wince)
		DEFINES="$DEFINES -DUNCACHED_PLUGINS"
		HOSTEXEEXT=".dll"
		_plugin_prefix=""
		_plugin_suffix=".plugin"
_mak_plugins='
PLUGIN_EXTRA_DEPS	= $(EXECUTABLE)
PLUGIN_LDFLAGS		:= -shared -lresidualvm -L.
PRE_OBJS_FLAGS		:= -Wl,--whole-archive
POST_OBJS_FLAGS		:= -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libresidualvm.a -shared
'
		;;
	ps2)
		_elf_loader=yes
		DEFINES="$DEFINES -DUNCACHED_PLUGINS"
_mak_plugins='
LDFLAGS         += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/main_prog.ld
PLUGIN_LDFLAGS  += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/plugin.ld -lstdc++ -lc
'
		;;
	psp)
		_elf_loader=yes
		DEFINES="$DEFINES -DUNCACHED_PLUGINS"
_mak_plugins='
LDFLAGS				+= -Wl,-T$(srcdir)/backends/plugins/psp/main_prog.ld
PLUGIN_LDFLAGS		+= -Wl,-T$(srcdir)/backends/plugins/psp/plugin.ld -lstdc++ -lc
'
		;;
	webos)
		_plugin_prefix="lib"
		_plugin_suffix=".so"
		CXXFLAGS="$CXXFLAGS -fpic"
		LIBS="$LIBS -ldl"
_mak_plugins='
PLUGIN_EXTRA_DEPS =
PLUGIN_LDFLAGS  += -shared $(LDFLAGS)
PRE_OBJS_FLAGS  := -Wl,-export-dynamic -Wl,-whole-archive
POST_OBJS_FLAGS := -Wl,-no-whole-archive
'
		;;
	*)
		_dynamic_modules=no
		_mak_plugins=
		;;
	esac
	echo "$_dynamic_modules"
fi

#
# Check whether integrated ELF loader support is requested
#
define_in_config_if_yes "$_elf_loader" 'USE_ELF_LOADER'

if test "$_elf_loader" = yes; then
	_plugin_prefix=""
	_plugin_suffix=".plg"
	_mak_plugins='
PLUGIN_EXTRA_DEPS	= $(EXECUTABLE)
PLUGIN_LDFLAGS		= -nostartfiles backends/plugins/elf/version.o -Wl,-q,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/plugins/elf/plugin.syms
PRE_OBJS_FLAGS		:= -Wl,--whole-archive
POST_OBJS_FLAGS		:= -Wl,--no-whole-archive
'"$_mak_plugins"
fi

#
# Set up some common plugin settings in config.h and config.mk, if enabled
#
define_in_config_if_yes "$_dynamic_modules" 'DYNAMIC_MODULES'

if test "$_dynamic_modules" = yes ; then
	add_line_to_config_h "#define PLUGIN_PREFIX	\"$_plugin_prefix\""
	add_line_to_config_h "#define PLUGIN_SUFFIX	\"$_plugin_suffix\""
	add_line_to_config_mk "PLUGIN_PREFIX := $_plugin_prefix"
	add_line_to_config_mk "PLUGIN_SUFFIX := $_plugin_suffix"
fi


#
# Check whether integrated MT-32 emulator support is requested
#
define_in_config_if_yes "$_mt32emu" 'USE_MT32EMU'

#
# Check whether 16bit color support is requested
#
define_in_config_if_yes "$_16bit" 'USE_RGB_COLOR'

#
# Check whether save games use the current time as default description
#
define_in_config_if_yes "$_savegame_timestamp" 'USE_SAVEGAME_TIMESTAMP'

#
# Check whether to enable the (hq) scalers
#
if test "$_build_scalers" = no ; then
	_build_hq_scalers=no
fi
define_in_config_if_yes "$_build_scalers" 'USE_SCALERS'

define_in_config_if_yes "$_build_hq_scalers" 'USE_HQ_SCALERS'

#
# Check for math lib
#
cat > $TMPC << EOF
int main(void) { return 0; }
EOF
cc_check -lm && LIBS="$LIBS -lm"

#
# Check for Ogg Vorbis
#
echocheck "Ogg Vorbis"
if test "$_vorbis" = auto ; then
	_vorbis=no
	cat > $TMPC << EOF
#include <vorbis/codec.h>
int main(void) { vorbis_packet_blocksize(0,0); return 0; }
EOF
	cc_check $OGG_CFLAGS $OGG_LIBS $VORBIS_CFLAGS $VORBIS_LIBS \
		-lvorbisfile -lvorbis -logg && _vorbis=yes
fi
if test "$_vorbis" = yes ; then
	LIBS="$LIBS $OGG_LIBS $VORBIS_LIBS -lvorbisfile -lvorbis -logg"
	INCLUDES="$INCLUDES $OGG_CFLAGS $VORBIS_CFLAGS"
fi
define_in_config_if_yes "$_vorbis" 'USE_VORBIS'
echo "$_vorbis"

#
# Check for Tremor
#
echocheck "Tremor"
if test "$_tremolo" = yes ; then
	_tremor=yes
fi

if test "$_tremor" = auto ; then
	_tremor=no
	cat > $TMPC << EOF
#include <tremor/ivorbiscodec.h>
int main(void) { vorbis_info_init(0); return 0; }
EOF
	cc_check $TREMOR_CFLAGS $TREMOR_LIBS -lvorbisidec && \
	_tremor=yes
fi
if test "$_tremor" = yes && test "$_vorbis" = no; then
	add_line_to_config_h '#define USE_TREMOR'
	add_line_to_config_h '#define USE_VORBIS'
	if test "$_tremolo" = yes ; then
		add_line_to_config_h '#define USE_TREMOLO'
		LIBS="$LIBS $TREMOR_LIBS -ltremolo"
	elif test "$_host" = ps2 ; then
		LIBS="-ltremor $LIBS"
	else
		LIBS="$LIBS $TREMOR_LIBS -lvorbisidec"
	fi
	INCLUDES="$INCLUDES $TREMOR_CFLAGS"
else
	if test "$_vorbis" = yes; then
		_tremor="no (Ogg Vorbis/Tremor support is mutually exclusive)"
	fi
	add_line_to_config_h '#undef USE_TREMOR'
fi
add_to_config_mk_if_yes "$_tremor" 'USE_TREMOR = 1'
echo "$_tremor"

#
# Check for FLAC
#
echocheck "FLAC >= 1.0.1"
if test "$_flac" = auto ; then
	_flac=no
	cat > $TMPC << EOF
#include <FLAC/format.h>
int main(void) { return FLAC__STREAM_SYNC_LEN >> 30; /* guaranteed to be 0 */ }
EOF
	if test "$_vorbis" = yes ; then
		cc_check $FLAC_CFLAGS $FLAC_LIBS $OGG_CFLAGS $OGG_LIBS \
			-lFLAC -logg && _flac=yes
	else
		cc_check $FLAC_CFLAGS $FLAC_LIBS \
			-lFLAC && _flac=yes
	fi
fi
if test "$_flac" = yes ; then
	if test "$_vorbis" = yes ; then
		LIBS="$LIBS $FLAC_LIBS $OGG_LIBS -lFLAC -logg"
	else
		LIBS="$LIBS $FLAC_LIBS -lFLAC"
	fi
	INCLUDES="$INCLUDES $FLAC_CFLAGS"
fi
define_in_config_if_yes "$_flac" 'USE_FLAC'
echo "$_flac"

#
# Check for MAD (MP3 library)
#
echocheck "MAD"
if test "$_mad" = auto ; then
	_mad=no
	cat > $TMPC << EOF
#include <mad.h>
int main(void) { return 0; }
EOF
	cc_check $MAD_CFLAGS $MAD_LIBS -lmad && _mad=yes
fi
if test "$_mad" = yes ; then
	LIBS="$LIBS $MAD_LIBS -lmad"
	INCLUDES="$INCLUDES $MAD_CFLAGS"
fi
define_in_config_if_yes "$_mad" 'USE_MAD'
echo "$_mad"

#
# Check for ALSA
#
echocheck "ALSA >= 0.9"
if test "$_alsa" = auto ; then
	_alsa=no
	cat > $TMPC << EOF
#include <alsa/asoundlib.h>
int main(void) { return (!(SND_LIB_MAJOR==0 && SND_LIB_MINOR==9)); }
EOF
	cc_check $ALSA_CFLAGS $ALSA_LIBS -lasound && _alsa=yes
fi
if test "$_alsa" = yes ; then
	LIBS="$LIBS $ALSA_LIBS -lasound"
	INCLUDES="$INCLUDES $ALSA_CFLAGS"
fi
define_in_config_h_if_yes "$_alsa" 'USE_ALSA'
echo "$_alsa"

#
# Check for libjpeg
#
echocheck "libjpeg >= v6b"
if test "$_jpeg" = auto ; then
	_jpeg=no
	cat > $TMPC << EOF
#include <stdio.h>
#include <jpeglib.h>
int main(void) {
#if JPEG_LIB_VERSION >= 62
#else
  syntax error
#endif
  return 0;
}
EOF
	cc_check $JPEG_CFLAGS $JPEG_LIBS -ljpeg && _jpeg=yes
fi
if test "$_jpeg" = yes ; then
	LIBS="$LIBS $JPEG_LIBS -ljpeg"
	INCLUDES="$INCLUDES $JPEG_CFLAGS"
fi
define_in_config_if_yes "$_jpeg" 'USE_JPEG'
echo "$_jpeg"

#
# Check for PNG
#
echocheck "PNG >= 1.2.8"
if test "$_png" = auto ; then
	_png=no
	cat > $TMPC << EOF
#include <png.h>
int main(void) {
#if PNG_LIBPNG_VER >= 10208
#else
  syntax error
#endif
  return 0;
}
EOF
	cc_check $PNG_CFLAGS $PNG_LIBS -lpng -lz && _png=yes
fi
if test "$_png" = yes ; then
	LIBS="$LIBS $PNG_LIBS -lpng -lz"
	INCLUDES="$INCLUDES $PNG_CFLAGS"
fi
define_in_config_if_yes "$_png" 'USE_PNG'
echo "$_png"

#
# Check for Theora Decoder
#
echocheck "libtheoradec >= 1.0"
if test "$_vorbis" = no ; then
	echo "skipping. no vorbis"
	_theoradec=notsupported
fi
if test "$_theoradec" = auto ; then
	_theoradec=no
	cat > $TMPC << EOF
#include <theora/theoradec.h>
#include <vorbis/codec.h>
int main(void) { th_ycbcr_buffer yuv; th_decode_ycbcr_out(NULL, yuv);  }
EOF
	cc_check $THEORADEC_CFLAGS $THEORADEC_LIBS -ltheoradec && _theoradec=yes
fi
if test "$_theoradec" = yes ; then
	LIBS="$LIBS $THEORADEC_LIBS -ltheoradec"
	INCLUDES="$INCLUDES $THEORADEC_CFLAGS"
fi
define_in_config_if_yes "$_theoradec" 'USE_THEORADEC'
if test ! "$_theoradec" = notsupported ; then
	echo "$_theoradec"
fi

#
# Check for the AAC decoder
#
echocheck "libfaad"
if test "$_faad" = auto ; then
	_faad=no
	cat > $TMPC << EOF
#include <neaacdec.h>
int main(void) { NeAACDecGetCapabilities(); return 0; }
EOF
	cc_check $FAAD_CFLAGS $FAAD_LIBS -lfaad && _faad=yes
fi
if test "$_faad" = yes ; then
	LIBS="$LIBS $FAAD_LIBS -lfaad"
	INCLUDES="$INCLUDES $FAAD_CFLAGS"
fi
define_in_config_if_yes "$_faad" 'USE_FAAD'
echo "$_faad"

#
# Check for SEQ MIDI
#
echocheck "SEQ MIDI"
if test "$_seq_midi" = auto ; then
	# TODO: Test for /dev/sequencer presence? Or maybe just for /dev ?
	# For now, we just always enable it when "posix" mode is on (backends
	# that do not want it can disable it by setting _seq_midi=no).
	_seq_midi="$_posix"
fi
define_in_config_h_if_yes "$_seq_midi" 'USE_SEQ_MIDI'
echo "$_seq_midi"

#
# Check for sndio
#
echocheck "sndio"
if test "$_sndio" = auto ; then
	_sndio=no
	cat > $TMPC << EOF
#include <sndio.h>
int main(void) { struct sio_par par; sio_initpar(&par); return 0; }
EOF
	cc_check $SNDIO_CFLAGS $SNDIO_LIBS -lsndio && _sndio=yes
fi
if test "$_sndio" = yes ; then
	LIBS="$LIBS $SNDIO_LIBS -lsndio"
	INCLUDES="$INCLUDES $SNDIO_CFLAGS"
fi
define_in_config_h_if_yes "$_sndio" 'USE_SNDIO'
echo "$_sndio"

#
# Check for TiMidity(++)
#
echocheck "TiMidity"
if test "$_timidity" = auto ; then
	# TODO: Is there a good possibility of auto detecting whether we
	# should include TiMidity support? It can only be used on Unix
	# currently so we use that as "detection" for now.
	_timidity="$_posix"
fi
define_in_config_h_if_yes "$_timidity" 'USE_TIMIDITY'
echo "$_timidity"

#
# Check for ZLib
#
echocheck "zlib"
if test "$_zlib" = auto ; then
	_zlib=no
	cat > $TMPC << EOF
#include <string.h>
#include <zlib.h>
int main(void) { return strcmp(ZLIB_VERSION, zlibVersion()); }
EOF
	cc_check $ZLIB_CFLAGS $ZLIB_LIBS -lz && _zlib=yes
fi
if test "$_zlib" = yes ; then
	LIBS="$LIBS $ZLIB_LIBS -lz"
	INCLUDES="$INCLUDES $ZLIB_CFLAGS"
fi
define_in_config_if_yes "$_zlib" 'USE_ZLIB'
echo "$_zlib"

#
# Check for LibMPEG2
#
echocheck "libmpeg2 >= 0.4.0"
if test "$_mpeg2" = auto ; then
	_mpeg2=no
	cat > $TMPC << EOF
typedef signed $type_1_byte int8_t;
typedef signed $type_2_byte int16_t;
typedef signed $type_4_byte int32_t;

typedef unsigned $type_1_byte uint8_t;
typedef unsigned $type_2_byte uint16_t;
typedef unsigned $type_4_byte uint32_t;

extern "C" {
#include <mpeg2dec/mpeg2.h>
}

int main(void) {
	#if MPEG2_RELEASE < MPEG2_VERSION(0, 4, 0)
	#error libmpeg2 version too low
	#endif

	/* mpeg2_state_t first appears in 0.4.0 */
	mpeg2_state_t state;

	return 0;
}
EOF

	if test -n "$_host"; then
		# don't execute while cross compiling
		cc_check $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && _mpeg2=yes
	else
		cc_check_no_clean $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && $TMPO$HOSTEXEEXT && _mpeg2=yes
		cc_check_clean
	fi
fi
if test "$_mpeg2" = yes ; then
	INCLUDES="$INCLUDES $MPEG2_CFLAGS"
	LIBS="$LIBS $MPEG2_LIBS -lmpeg2"
fi
define_in_config_if_yes "$_mpeg2" 'USE_MPEG2'
echo "$_mpeg2"

#
# Check for Sparkle if updates support is enabled
#
echocheck "Sparkle"
if test "$_updates" = no; then
	_sparkle=no
else
if test "$_sparkle" = auto ; then
	_sparkle=no
	cat > $TMPC << EOF
#include <Cocoa/Cocoa.h>
#include <Sparkle/Sparkle.h>
int main(void) { SUUpdater *updater = [SUUpdater sharedUpdater]; return 0; }
EOF
	cc_check $SPARKLE_CFLAGS $SPARKLE_LIBS -framework Sparkle -ObjC++ -lobjc && _sparkle=yes
fi
if test "$_sparkle" = yes ; then
	LIBS="$LIBS $SPARKLE_LIBS -framework Sparkle"
	INCLUDES="$INCLUDES $SPARKLE_CFLAGS"
fi
define_in_config_if_yes "$_sparkle" 'USE_SPARKLE'
fi
echo "$_sparkle"

#
# Check for libfluidsynth
#
echocheck "libfluidsynth"
if test "$_fluidsynth" = auto ; then
	_fluidsynth=no
	cat > $TMPC << EOF
#include <fluidsynth.h>
int main(void) { return 0; }
EOF
	cc_check $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS -lfluidsynth && _fluidsynth=yes
fi
if test "$_fluidsynth" = yes ; then
	case $_host_os in
		mingw*)
			LIBS="$LIBS $FLUIDSYNTH_LIBS -lfluidsynth -ldsound -lwinmm"
		;;
		*)
			LIBS="$LIBS $FLUIDSYNTH_LIBS -lfluidsynth"
		;;
	esac
	INCLUDES="$INCLUDES $FLUIDSYNTH_CFLAGS"
fi
define_in_config_if_yes "$_fluidsynth" 'USE_FLUIDSYNTH'
echo "$_fluidsynth"

#
# Check for readline if text_console is enabled
#
echocheck "readline"
if test "$_text_console" = yes ; then
	_READLINE_LIBS="-lreadline"
	if test "$_readline" = auto ; then
		_readline=no
		cat > $TMPC << EOF
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int main(void) {
	char *x = readline("");
}
EOF
		cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes
		if test "$_readline" = no ; then
			_READLINE_LIBS="-lreadline -ltermcap"
			cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes
		fi
	fi
	cc_check_clean
	echo "$_readline"
else
	_readline=no
	echo "skipping (text console disabled)"
fi

if test "$_readline" = yes ; then
	LIBS="$LIBS $READLINE_LIBS $_READLINE_LIBS"
	INCLUDES="$INCLUDES $READLINE_CFLAGS"

	#
	# Check the type of rl_completion_entry_function.
	# It can be int(*)(const char *, int) or char *(*)(const char *, int).
	#
	cat > $TMPC << EOF
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>

int readline_completionFunction(const char *, int);

int main(void) {
	char *x = readline("");
	rl_completion_entry_function = &readline_completionFunction;
}
EOF
	cc_check -c && add_line_to_config_h '#define USE_READLINE_INT_COMPLETION'

fi
define_in_config_h_if_yes "$_readline" 'USE_READLINE'

define_in_config_h_if_yes "$_text_console" 'USE_TEXT_CONSOLE_FOR_DEBUGGER'

#
# Check for Unity if taskbar integration is enabled
#
echocheck "libunity"
if test "$_unix" = no || test "$_taskbar" = no; then
	_libunity=no
else
if test "$_libunity" = auto ; then
	case $_host_os in
		mingw*)
			# pkgconfig and unity are not supported on mingw
			_libunity=no
			;;
		*)
			# Unity has a lots of dependencies, update the libs and cflags var with them
			LIBUNITY_LIBS="$LIBUNITY_LIBS `pkg-config --libs 'unity > 3.8.1' 2>> "$TMPLOG"`"
			LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `pkg-config --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`"
			_libunity=no
			cat > $TMPC << EOF
#include <unity.h>
int main(void) {
	unity_launcher_entry_get_for_desktop_id("residualvm.desktop");
	return 0;
}
EOF
			cc_check $LIBUNITY_CFLAGS $LIBUNITY_LIBS && _libunity=yes
			;;
	esac
fi
if test "$_libunity" = yes ; then
	if test "$LIBUNITY_CFLAGS" = "" || test "$LIBUNITY_LIBS" = ""; then
		LIBUNITY_LIBS="$LIBUNITY_LIBS `pkg-config --libs 'unity > 3.8.1' 2>> "$TMPLOG"`"
		LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `pkg-config --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`"
	fi
	LIBS="$LIBS $LIBUNITY_LIBS"
	INCLUDES="$INCLUDES $LIBUNITY_CFLAGS"
fi
define_in_config_h_if_yes "$_libunity" 'USE_UNITY'
fi
echo "$_libunity"

#
# Check for FreeType2 to be present
#
if test "$_freetype2" != "no"; then

	# Look for the freetype-config script
	find_freetypeconfig

	if test -z "$_freetypeconfig"; then
		_freetype2=no
	else
		FREETYPE2_LIBS=`$_freetypeconfig --prefix="$_freetypepath" --libs`
		FREETYPE2_CFLAGS=`$_freetypeconfig --prefix="$_freetypepath" --cflags`

		if test "$_freetype2" = "auto"; then
			_freetype2=no

			cat > $TMPC << EOF
#include <ft2build.h>
#include FT_FREETYPE_H

int main(int argc, char *argv[]) {
	FT_Library library;
	FT_Error error = FT_Init_FreeType(&library);
	FT_Done_FreeType(library);
}
EOF

			cc_check $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes
		fi

		if test "$_freetype2" = "yes"; then
			LIBS="$LIBS $FREETYPE2_LIBS"
			INCLUDES="$INCLUDES $FREETYPE2_CFLAGS"
		fi
	fi

fi

echocheck "FreeType2"
echo "$_freetype2"

define_in_config_if_yes "$_freetype2" "USE_FREETYPE2"

#
# Check for iconv
#
echo_n "Checking whether iconv.h is present... "
if test "$_iconv" = auto ; then
	_iconv=no
	cat > $TMPC << EOF
#include <iconv.h>
int main(int, char **) {
	return 0;
}
EOF
	cc_check $ICONV_CFLAGS $ICONV_LIBS && _iconv=yes
fi

create_iconv_test() {
	cat > $TMPC << EOF
#include <iconv.h>
int main(int, char **) {
	iconv_t iconv = iconv_open("UTF-32", "SJIS");
	iconv_close(iconv);
	return 0;
}
EOF
}
echo "$_iconv"

if test "$_iconv" = yes ; then
	echo_n "Checking whether iconv needs linking against libiconv... "

	needs_iconvlib='auto'
	create_iconv_test
	cc_check $ICONV_CFLAGS $ICONV_LIBS -liconv && needs_iconvlib='yes'
	# We do check linking without -liconv here too, just in case
	# it would fail otherwise too
	create_iconv_test
	cc_check $ICONV_CFLAGS $ICONV_LIBS && needs_iconvlib='no'

	if test "$needs_iconvlib" = auto ; then
		_iconv=no
		echo "does not link at all"
	else
		if test "$needs_iconvlib" = yes ; then
			ICONV_LIBS="$ICONV_LIBS -liconv"
		fi
		echo "$needs_iconvlib"

		echo_n "Checking signature of iconv... "
		uses_const=no

		cat > $TMPC << EOF
#include <iconv.h>
int main(int argc, char **argv) {
	iconv_t iconvP;
	const char **inbuf = 0;
	iconv(iconvP, inbuf, 0, 0, 0);
	return 0;
}
EOF
		cc_check $ICONV_CFLAGS $ICONV_LIBS && uses_const=yes

		if test "$uses_const" = yes ; then
			echo "iconv_t, const char **, size_t *, char **, size_t *"
		else
			echo "iconv_t, char **, size_t *, char **, size_t *"
		fi

		define_in_config_if_yes "$uses_const" 'ICONV_USES_CONST'
	fi
fi

if test "$_iconv" = yes ; then
	LIBS="$LIBS $ICONV_LIBS"
	INCLUDES="$INCLUDES $ICONV_CFLAGS"
fi

echocheck "iconv"
define_in_config_if_yes "$_iconv" 'USE_ICONV'
echo "$_iconv"

#
# Check for OpenGL (ES)
#
echocheck "OpenGL"

case $_backend in
	openpandora)
		# Only enable OpenGL ES on the OpanPandora if --enable-opengl is passed in explicitly.
		if test "$_opengl" = yes ; then
			_opengl=yes
			_opengles=yes
			OPENGL_LIBS="-lGLES_CM -lEGL -lX11"
			OPENGL_CFLAGS="$OPENGL_LIBS"
			LIBS="$LIBS $OPENGL_LIBS"
			INCLUDES="$INCLUDES $OPENGL_CFLAGS"
		fi
		;;
esac

# ResidualVM specific start ->
if test "$_opengl" = auto ; then
	_opengl=no
	if test "$_backend" = "sdl" || test "$_backend" = "android"; then
		# Try different header filenames
		# 1) GL/gl.h         This is usually used on POSIX and Windows systems
		# 2) OpenGL/gl.h     This is used on Mac OS X
		# 3) GLES2/gl2.h     This is used for OpenGL ES 2.x
		# 4) GLES/gl.h       This is used for OpenGL ES 1.x
		for i in "GL/gl.h" "OpenGL/gl.h" "GLES2/gl2.h" "GLES/gl.h"; do
			# Test the current header for OpenGL
			if test "$_opengles2" = no ; then
				cat > $TMPC << EOF
#include <$i>
#include <stdio.h>
int main(void) { printf("ANTIVIRUS FALSE POSITIVE WORKAROUND"); return GL_VERSION_1_1; }
EOF
				cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && break
			fi

			# Test the current header for OpenGL ES2
			cat > $TMPC << EOF
#include <$i>
int main(void) { return GL_ES_VERSION_2_0; }
EOF
			cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && _opengles2=yes && break

			# Test the current header for OpenGL ES
			if test "$_opengles2" = no ; then
				cat > $TMPC << EOF
#include <$i>
int main(void) { return GL_OES_VERSION_1_1; }
EOF
				cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl=yes && _opengles=yes && break
			fi
		done
	fi
fi
if test "$_opengl" = yes ; then
	# Our simple test case
	cat > $TMPC << EOF
int main(void) { return 0; }
EOF

	_opengl=no
	# Try different library names
	if test "$_opengles" = "yes" ; then
		# 1) GLES_CM    This is usually used for OpenGL ES 1.1 (Common profile)
		# 2) GLESv1_CM  This is used by the Windows Mali OpenGL ES 1.1 Emulator
		# 3) glesv1     This is used by the Linux Mali OpenGL ES 1.1 Emulator
		_opengles=no
		for lib in "-lGLES_CM" "-lGLESv1_CM" "-lglesv1"; do
			if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS $lib
				then
				_opengl=yes
				_opengles=yes
				OPENGL_LIBS="$OPENGL_LIBS $lib"
				break
			fi
		done
	elif test "$_opengles2" = yes ; then
		_opengles2=no
		if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS "-lGLESv2"
			then
			_opengl=yes
			_opengles2=yes
			OPENGL_LIBS="$OPENGL_LIBS -lGLESv2"
		fi
	else
		case $_host_os in
		darwin*)
			OPENGL_LIBS="-framework OpenGL"
			;;
		mingw*)
			OPENGL_LIBS="-lopengl32"
			;;
		*)
			OPENGL_LIBS="-lGL"
			;;
		esac
		if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS
			then
			_opengl=yes
		fi
	fi

	if test "$_opengl" = yes ; then
		LIBS="$LIBS $OPENGL_LIBS"
		INCLUDES="$INCLUDES $OPENGL_CFLAGS"
		if test "$_opengl_shaders" = yes ; then
			if test "$_opengles2" = no ; then
				_opengl_shaders=no
				GLEW_LIBS=`pkg-config --libs glew 2>> $TMPLOG`
				GLEW_INCLUDES=`pkg-config --cflags glew 2>> $TMPLOG`
				cat > $TMPC << EOF
#include <GL/glew.h>
int main(void) {
	glewInit();
	return 0;
}
EOF
				if cc_check_no_clean $DEFINES $GLEW_LIBS $GLEW_INCLUDES
					then
					_opengl_shaders=yes
					LIBS="$LIBS $GLEW_LIBS"
					INCLUDES="$INCLUDES $GLEW_INCLUDES"
				fi
			fi
		fi
	else
		_opengl_shaders=no
	fi
	cc_check_clean
fi
# ResidualVM specific end <-

case $_host_os in
	tizen)
		# components live in non-standard locations so just assume sane SDK
		_opengl=yes
		_opengles=yes
		;;
esac

if test "$_opengles" = "yes" ; then
	echo "yes (OpenGL ES)"
# ResidualVM specific start here ->
elif test "$_opengles2" = "yes" ; then
	echo "yes (OpenGL ES2)"
else
	if test "$_opengl_shaders" = "yes" ; then
		echo "$_opengl (shaders enabled)"
	elif test "$_opengl" = "yes" ; then
		echo "$_opengl (shaders disabled)"
	else
		echo "no"
	fi
fi

define_in_config_if_yes "$_opengl" "USE_OPENGL"
define_in_config_if_yes "$_opengles" "USE_GLES"
define_in_config_if_yes "$_opengles2" "USE_GLES2"
define_in_config_if_yes "$_opengl_shaders" "USE_OPENGL_SHADERS"
# ResidualVM specific ends here <-


#
# Check for nasm
#
if test "$_have_x86" = yes ; then
	echocheck "nasm"
	if test "$_nasm" = no ; then
		echo "disabled"
	else
		IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$SEPARATOR

		for path_dir in $_nasmpath; do
			if test -x "$path_dir/nasm$NATIVEEXEEXT" ; then
				NASM="$path_dir/nasm$NATIVEEXEEXT"
				NASMFLAGS="-O1 -g"
				echo $NASM
				break
			fi
		done

		# fallback to the nasm compatible yasm
		if test x$NASM = x -o x$NASM = x'"$NASM"'; then
			for path_dir in $_nasmpath; do
				if test -x "$path_dir/yasm$NATIVEEXEEXT" ; then
					NASM="$path_dir/yasm$NATIVEEXEEXT"
					NASMFLAGS="-a x86 -m x86"
					echo $NASM
					break
				fi
			done
		fi

		IFS="$ac_save_ifs"

		if test x$NASM = x -o x$NASM = x'"$NASM"'; then
			echo "not found"
			_nasm=no
		else
			case $_host_os in
				darwin*)
					NASMFLAGS="$NASMFLAGS -f macho"
				;;
				mingw*)
					NASMFLAGS="$NASMFLAGS -f win32"
				;;
				os2-emx*)
					NASMFLAGS="$NASMFLAGS -f aout"
				;;
				*)
					NASMFLAGS="$NASMFLAGS -f elf"
				;;
			esac
			_nasm=yes
		fi
	fi
fi

define_in_config_if_yes $_nasm 'USE_NASM'

#
# Enable vkeybd / keymapper / event recorder
#
define_in_config_if_yes $_vkeybd 'ENABLE_VKEYBD'
define_in_config_if_yes $_keymapper 'ENABLE_KEYMAPPER'
define_in_config_if_yes $_eventrec 'ENABLE_EVENTRECORDER'

#
# Check if the keymapper and the event recorder are enabled simultaneously
#
if test "$_keymapper" = yes ; then
	if test "$_eventrec" = yes ; then
		echo "ERROR: The keymapper and the event recorder cannot be enabled simultaneously currently, please disable one of the two"
		exit 1
	fi
fi

# Check whether to build translation support
#
echo_n "Building translation support... "
define_in_config_if_yes $_translation 'USE_TRANSLATION'
if test "$_translation" = no ; then
	echo "no"
else
	echo_n "yes ("

	if test "$_detectlang" != yes ; then
		cat > $TMPC << EOF
#include <locale.h>
int main(void) { setlocale(LC_ALL, ""); return 0; }
EOF
		_detectlang=no
		cc_check $LDFLAGS $CXXFLAGS && _detectlang=yes
	fi

	define_in_config_h_if_yes $_detectlang 'USE_DETECTLANG'
	if test "$_detectlang" = yes ; then
		echo "with runtime language detection)"
	else
		echo "without runtime language detection)"
	fi
fi

#
# Check whether to build taskbar integration support
#
echo_n "Building taskbar integration support... "
if test "$_taskbar" = "no"; then
	echo "no"
else
	case $_host_os in
	mingw*)
		LIBS="$LIBS -lole32 -luuid"
		echo "win32"
		_taskbar=yes
		;;
	darwin*)
		echo "osx"
		_taskbar=yes
		;;
	ps2)
		# PS2 bogus dir: it actually depends on launch medium
		DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"host:plugins\\\""
		;;
	*)
		if test "$_libunity" = yes; then
			echo "unity"
			_taskbar=yes
		else
			echo "no"
			_taskbar=no
		fi
		;;
	esac
fi
define_in_config_if_yes $_taskbar 'USE_TASKBAR'

#
# Check whether to build Bink video support
#
echo_n "Building Bink video support... "
define_in_config_if_yes $_bink 'USE_BINK'
echo "$_bink"

#
# ResidualVM specific:
# Check whether to build Safedisc decryption support
#
echo_n "Building SafeDisc decryption support... "
define_in_config_if_yes $_safedisc 'USE_SAFEDISC'
echo "$_safedisc"

#
# Check whether to build updates support
#
echo_n "Building updates support... "
define_in_config_if_yes $_updates 'USE_UPDATES'
if test "$_updates" = yes; then
	if test "$_sparkle" = yes; then
		echo "Sparkle"
	else
		echo "$_updates"
	fi
else
	echo "$_updates"
fi

#
# Check whether to activate engines (ResidualVM specific)
#
if test `get_engine_build monkey4` = yes && test ! "$_mpeg2" = yes ; then
	echo "...disabling support for video cutscenes in PS2 version of Escape from Monkey Island. mpeg2dec is required"
fi

if test `get_engine_build monkey4` = yes && test ! "$_bink" = yes ; then
	echo "...disabling Escape from Monkey Island. bink is required"
	engine_disable monkey4
fi

if test `get_engine_build myst3` = yes && test ! "$_bink" = yes ; then
	echo "...disabling Myst 3 engine. bink is required"
	engine_disable myst3
fi


#
# Figure out installation directories
#
test "x$prefix" = xNONE && prefix=/usr/local
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

case $_host_os in
	mingw*)
		# Windows stores all the external data files in executable file.
		;;
	*)
		DEFINES="$DEFINES -DDATA_PATH=\\\"$datadir\\\""
		;;
esac

case $_backend in
	openpandora)
		# Add ../plugins as a path so plugins can be found when running from a .PND.
		DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"../plugins\\\""
		;;
	maemo | webos)
		# The WebOS and Maemo apps want the plugins in the "lib" directory
		# without a scummvm sub directory.
		DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$libdir\\\""
		;;
	*)
		DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$libdir/residualvm\\\""
		;;
esac

#
# Set variables for profiling.
# We need to do it here to prevent mess-ups with the tests e.g. on the PSP
#
if test "$_enable_prof" = yes ; then
	CXXFLAGS="$CXXFLAGS -pg"
	LDFLAGS="$LDFLAGS -pg"
	DEFINES="$DEFINES -DENABLE_PROFILING"
fi

echo_n "Backend... "
echo_n "$_backend"

if test "$_backend" = "sdl" -a -n "$_sdlversion"; then
	echo_n " ($_sdlversion)"
fi

if test "$_nasm" = yes ; then
	echo_n ", assembly routines"
fi

if test "$_16bit" = yes ; then
	: # residualvm not use it
fi

if test "$_savegame_timestamp" = yes ; then
	echo_n ", savegame timestamp"
fi

if test "$_build_scalers" = yes ; then
	if test "$_build_hq_scalers" = yes ; then
		: # residualvm not use it
	else
		: # residualvm not use it
	fi
fi

if test "$_mt32emu" = yes ; then
	echo_n ", MT-32 emu"
fi

if test "$_text_console" = yes ; then
	echo_n ", text console"
fi

if test "$_vkeybd" = yes ; then
	echo_n ", virtual keyboard"
fi

if test "$_keymapper" = yes ; then
	echo_n ", keymapper"
fi

if test "$_eventrec" = yes ; then
	echo ", event recorder"
else
	echo
fi

#
# Some last-minute backend specific stuff, executed
# after all of CXXFLAGS, LDFLAGS, LIBS etc. have been setup
#
case $_backend in
	android)
		# ssp at this point so the cxxtests link
		if test "$_debug_build" = yes; then
			CXXFLAGS="$CXXFLAGS -fstack-protector"
		else
			CXXFLAGS="$CXXFLAGS -fno-stack-protector"
		fi

		static_libs=''
		system_libs=''
		for lib in $LIBS; do
			case $lib in
			-lz|-lm|-ldl|-landroid|-lGLESv1_CM|-lGLESv2) # ResidualVM specific
				system_libs="$system_libs $lib"
				;;
			*)
				static_libs="$static_libs $lib"
				;;
			esac
		done

		# -lgcc is carefully placed here - we want to catch
		# all toolchain symbols in *our* libraries rather
		# than pick up anything unhygenic from the Android libs.
		LIBS="-Wl,-Bstatic $static_libs -Wl,-Bdynamic -lgcc $system_libs -llog -landroid" # ResidualVM removed: -lGLESv1_CM
		;;
	n64)
		# Move some libs down here, otherwise some symbols requires by libvorbis aren't found
		# during linking stage
		LIBS="$LIBS -lc -lgcc -lnosys"
		;;
esac


#
# Engine selection
#
_engines_built_static=""
_engines_built_dynamic=""
_engines_skipped=""

# Show a message if looping over engines takes longer than 5 secs
sh -c "
	touch config.gnomes
	sleep 5
	if test -f config.gnomes; then
		printf 'Employing little gnomes...'
		rm -f config.gnomes
	fi" 2>/dev/null &

for engine in $_engines; do
	# Check whether all dependencies are available
	check_engine_deps $engine

	if test "`get_engine_sub $engine`" = "no" ; then
		# It's a main engine
		if test `get_engine_build $engine` = no ; then
			isbuilt=no
		else
			# If dynamic plugins aren't supported, mark
			# all the engines as static
			if test $_dynamic_modules = no ; then
				set_var _engine_${engine}_build "static"
			else
				# If it wasn't explicitly marked as static or
				# dynamic, use the configured default
				if test `get_engine_build $engine` = yes ; then
					set_var _engine_${engine}_build "${_plugins_default}"
				fi
			fi

			# Prepare the defines
			if test `get_engine_build $engine` = dynamic ; then
				isbuilt=DYNAMIC_PLUGIN
			else
				set_var _engine_${engine}_build "static"
				isbuilt=STATIC_PLUGIN
			fi
		fi
	else
		# It's a subengine, just say yes or no
		if test "`get_engine_build $engine`" = "no" ; then
			isbuilt=no
		else
			isbuilt=1
		fi
	fi

	# Save the settings
	defname="ENABLE_`echo $engine | tr '[a-z]' '[A-Z]'`"
	if test "$isbuilt" = "no" ; then
		add_line_to_config_mk "# $defname"
	else
		add_line_to_config_mk "$defname = $isbuilt"
	fi
done

# Sort engines to place our headline engine at start...
# No technical reason, just historical convention
headline_engine=grim
_sorted_engines="${headline_engine}"
for engine in $_engines; do
	if test "${engine}" != "${headline_engine}" ; then
		_sorted_engines="${_sorted_engines} ${engine}"
	fi
done

# Prepare the information to be shown
for engine in $_sorted_engines; do
	if test "`get_engine_sub $engine`" = "no" ; then
		# It's a main engine
		prepare_engine_build_strings $engine
	fi
done

#
# Detection of WIP/unstable engines
#
for engine in $_engines; do
	engine_build=`get_engine_build $engine`
	engine_build_default=`get_engine_build_default $engine`
	if test $engine_build != no -a $engine_build_default = no ; then
		set_var _tainted_build "yes"
	fi
done

add_to_config_h_if_yes `get_var _tainted_build` '#define TAINTED_BUILD'

# Complete the message on slow systems
if test -f config.gnomes ; then
	# Kill does not work well here as it produces nasty 'Killed' message
	rm -rf config.gnomes
else
	echo " work is done"
fi

#
# Show which engines ("frontends") are to be built
#
echo
if test -n "$_engines_built_static" ; then
	echo "Engines (builtin):"
	echo "$_engines_built_static" | sed 's/@/\
/g
s/#/    /g'
fi

if test -n "$_engines_built_dynamic" ; then
	echo "Engines (plugins):"
	echo "$_engines_built_dynamic" | sed 's/@/\
/g
s/#/    /g'
fi

if test -n "$_engines_skipped" ; then
	echo "Engines Skipped:"
	echo "$_engines_skipped" | sed 's/@/\
/g
s/#/    /g'
fi

if test -n "$_engines_built_wip" ; then
	echo "WARNING: This ResidualVM build contains the following UNSTABLE engines:"
	echo "$_engines_built_wip" | sed 's/@/\
/g
s/#/    /g'
fi

echo
echo "Creating config.h"
cat > config.h << EOF
/* This file is automatically generated by configure */
/* DO NOT EDIT MANUALLY */

#ifndef CONFIG_H
#define CONFIG_H

$_config_h_data

/* Data types */
typedef unsigned $type_1_byte byte;
typedef unsigned int uint;
typedef unsigned $type_1_byte uint8;
typedef unsigned $type_2_byte uint16;
typedef unsigned $type_4_byte uint32;
typedef signed $type_1_byte int8;
typedef signed $type_2_byte int16;
typedef signed $type_4_byte int32;
EOF

if test -n "$_def_64bit_type_unsigned"  ; then
cat >> config.h << EOF

/* 64-bit stuff */
$_def_64bit_type_signed
#if defined(__APPLE__) && !defined(__ppc__)
#ifndef _UINT64
#define _UINT64
$_def_64bit_type_unsigned
#endif
#else
$_def_64bit_type_unsigned
#endif
EOF
fi

cat >> config.h << EOF

#endif /* CONFIG_H */
EOF

echo "Creating config.mk"
cat > config.mk << EOF
# -------- Generated by configure -----------

CXX := $CXX
CXXFLAGS := $CXXFLAGS
LD := $LD
LIBS += $LIBS
RANLIB := $_ranlib
STRIP := $_strip
AR := $_ar
AS := $_as
ASFLAGS := $ASFLAGS
WINDRES := $_windres
WINDRESFLAGS := $WINDRESFLAGS
STAGINGPATH=$_stagingpath
WIN32PATH=$_win32path
AMIGAOSPATH=$_amigaospath
STATICLIBPATH=$_staticlibpath

BACKEND := $_backend
MODULES += $MODULES
MODULE_DIRS += $MODULE_DIRS
EXEPRE := $HOSTEXEPRE
EXEEXT := $HOSTEXEEXT
NASM := $NASM
NASMFLAGS := $NASMFLAGS

prefix = $prefix
exec_prefix = $exec_prefix
bindir = $bindir
libdir = $libdir
datarootdir = $datarootdir
datadir = $datadir
mandir = $mandir
docdir = $docdir

$_config_mk_data

INCLUDES += $INCLUDES
OBJS += $OBJS
DEFINES += $DEFINES
LDFLAGS += $LDFLAGS

$_mak_plugins

port_mk = $_port_mk

SAVED_CONFIGFLAGS  := $SAVED_CONFIGFLAGS
SAVED_LDFLAGS      := $SAVED_LDFLAGS
SAVED_CXX          := $SAVED_CXX
SAVED_CXXFLAGS     := $SAVED_CXXFLAGS
SAVED_CPPFLAGS     := $SAVED_CPPFLAGS
SAVED_ASFLAGS      := $SAVED_ASFLAGS
SAVED_WINDRESFLAGS := $SAVED_WINDRESFLAGS
EOF

#
# Create a custom Makefile when building outside the source tree
# TODO: Add a better check than just looking for 'Makefile'
#
if test ! -f Makefile.common ; then
echo "Creating Makefile"

cat > Makefile << EOF
# -------- Generated by configure -----------
srcdir = $_srcdir
vpath %.h \$(srcdir)
vpath %.cpp \$(srcdir)
vpath %.c \$(srcdir)
vpath %.m \$(srcdir)
vpath %.mm \$(srcdir)
vpath %.asm \$(srcdir)
vpath %.s \$(srcdir)
vpath %.S \$(srcdir)
include \$(srcdir)/Makefile
EOF

fi

# Ensure engines folder exists prior to trying to generate
# files into it (used for out-of-tree-builds)
mkdir -p engines

echo "Creating engines/engines.mk"
cat > engines/engines.mk << EOF
# This file is automatically generated by configure
# DO NOT EDIT MANUALLY
# This file is being included by "Makefile.common"
EOF

for engine in $_sorted_engines; do
	j=`echo $engine | tr '[:lower:]' '[:upper:]'`
	if test "`get_engine_sub $engine`" = "no" ; then
		# main engine
		cat >> engines/engines.mk << EOF

ifdef ENABLE_$j
DEFINES += -DENABLE_$j=\$(ENABLE_$j)
MODULES += engines/$engine
EOF

	for subeng in `get_engine_subengines $engine` ; do
		k=`echo $subeng | tr '[:lower:]' '[:upper:]'`
		cat >> engines/engines.mk << EOF

ifdef ENABLE_$k
DEFINES += -DENABLE_$k
endif
EOF
	done

	cat >> engines/engines.mk << EOF
endif
EOF
	fi
done

echo "Creating engines/plugins_table.h"
cat > engines/plugins_table.h << EOF
/* This file is automatically generated by configure */
/* DO NOT EDIT MANUALLY */
// This file is being included by "base/plugins.cpp"
EOF

for engine in $_sorted_engines; do
	if test "`get_engine_sub $engine`" = "no" ; then
		j=`echo $engine | tr '[:lower:]' '[:upper:]'`
		cat >> engines/plugins_table.h << EOF
#if PLUGIN_ENABLED_STATIC($j)
LINK_PLUGIN($j)
#endif
EOF
	fi
done
