config.lib
author rubidium
Sat, 04 Aug 2007 00:45:53 +0000
changeset 7902 cd82da0e7c9b
parent 7826 443e2b662060
child 7920 e9bf2ab2b8d0
permissions -rw-r--r--
(svn r10779) -Fix: GCC 4.2 makes (by default for -O2, -O3 and -Os) an assumption that signed integers do not overflow, whereas it is very likely that some of the legacy code does so. It furthermore breaks with the assumed standard (the behaviour is not actually defined in the standard) about the behaviour when signed integers wrap.

log() {
	if [ $1 = "1" ]; then echo "$2"; fi
	echo "$2" >> $config_log
}

set_default() {
	released_version=""

	ignore_extra_parameters="0"
	# We set all kinds of defaults for params. Later on the user can override
	# most of them; but if they don't, this default is used.
	build=""
	host=""
	cc_build=""
	cc_host=""
	cxx_build=""
	cxx_host=""
	windres=""
	strip=""
	lipo=""
	awk="awk"
	os="DETECT"
	endian="AUTO"
	cpu_type="DETECT"
	revision=""
	config_log="config.log"
	prefix_dir="/usr/local"
	binary_dir="games"
	data_dir="share/games/openttd"
	icon_dir="share/pixmaps"
	personal_dir="1"
	install_dir="/"
	enable_debug="0"
	enable_profiling="0"
	enable_dedicated="0"
	enable_network="1"
	enable_static="1"
	enable_translator="0"
	enable_assert="1"
	enable_strip="1"
	enable_universal="1"
	enable_osx_g5="0"
	enable_unicode="1"
	with_distcc="1"
	with_ccache="1"
	with_osx_sysroot="1"
	with_application_bundle="1"
	with_sdl="1"
	with_cocoa="1"
	with_zlib="1"
	with_png="1"
	with_makedepend="1"
	with_direct_music="1"
	with_sort="1"
	with_iconv="1"
	with_midi=""
	with_midi_arg=""
	with_libtimidity="1"
	with_freetype="1"
	with_fontconfig="1"
	with_psp_config="1"
	with_threads="1"

	save_params_array="build host cc_build cc_host cxx_build cxx_host windres strip awk lipo os cpu_type revision endian config_log prefix_dir binary_dir data_dir icon_dir personal_dir install_dir enable_debug enable_profiling enable_dedicated enable_network enable_static enable_translator enable_assert enable_strip with_distcc with_osx_sysroot enable_universal enable_osx_g5 enable_unicode with_application_bundle with_sdl with_cocoa with_zlib with_png with_makedepend with_direct_music with_sort with_iconv with_midi with_midi_arg with_libtimidity with_freetype with_fontconfig with_psp_config with_threads CC CXX CFLAGS LDFLAGS"
}

detect_params() {
	# Walk over all params from the user and override any default settings if
	#  needed. This also handles any invalid option.
	for p in "$@"; do
		if [ -n "$prev_p" ]; then
			eval "$prev_p=\$p"
			prev_p=
			continue
		fi

		optarg=`expr "x$p" : 'x[^=]*=\(.*\)'`

		case "$p" in
			--help | -h)                  showhelp; exit 0;;

			--config-log)                 prev_p="config_log";;
			--config-log=*)               config_log="$optarg";;

			--build)                      prev_p="build";;
			--build=*)                    build="$optarg";;

			--host)                       prev_p="host";;
			--host=*)                     host="$optarg";;

			--os)                         prev_p="os";;
			--os=*)                       os="$optarg";;

			--cpu-type)                   prev_p="cpu_type";;
			--cpu-type=*)                 cpu_type="$optarg";;

			--revision=*)                 revision="$optarg";;

			--cc-build)                   prevp_p="cc_build";;
			--cc-build=*)                 cc_build="$optarg";;
			--cc-host)                    prevp_p="cc_host";;
			--cc-host=*)                  cc_host="$optarg";;
			--cxx-build)                  prevp_p="cxx_build";;
			--cxx-build=*)                cxx_build="$optarg";;
			--cxx-host)                   prevp_p="cxx_host";;
			--cxx-host=*)                 cxx_host="$optarg";;
			--windres)                    prevp_p="windres";;
			--windres=*)                  windres="$optarg";;
			--awk)                        prevp_p="awk";;
			--awk=*)                      awk="$optarg";;
			--strip)                      prevp_p="strip";;
			--strip=*)                    strip="$optarg";;
			--lipo)                       prevp_p="lipo";;
			--lipo=*)                     lipo="$optarg";;

			--endian)                     prev_p="endian";;
			--endian=*)                   endian="$optarg";;



			--prefix-dir)                 prevp_p="prefix-dir";;
			--prefix-dir=*)               prefix_dir="$optarg";;

			--binary-dir)                 prevp_p="binary-dir";;
			--binary-dir=*)               binary_dir="$optarg";;

			--data-dir)                   prevp_p="data-dir";;
			--data-dir=*)                 data_dir="$optarg";;

			--icon-dir)                   prevp_p="icon-dir";;
			--icon-dir=*)                 icon_dir="$optarg";;

			--personal-dir)               prevp_p="personal-dir";;
			--personal-dir=*)             personal_dir="$optarg";;
			--without-personal-dir)       personal_dir="";;

			--install-dir)                prevp_p="install-dir";;
			--install-dir=*)              install_dir="$optarg";;



			--enable-debug)               enable_debug="1";;
			--enable-debug=*)             enable_debug="$optarg";;
			--enable-profiling)           enable_profiling="1";;
			--enable-profiling=*)         enable_profiling="$optarg";;
			--enable-dedicated)           enable_dedicated="1";;
			--enable-dedicated=*)         enable_dedicated="$optarg";;
			--enable-network=*)           enable_network="$optarg";;
			--disable-network)            enable_network="0";;
			--disable-static)             enable_static="0";;
			--enable-static)              enable_static="2";;
			--enable-static=*)            enable_static="$optarg";;
			--disable-translator)         enable_translator="0";;
			--enable-translator)          enable_translator="2";;
			--enable-translator=*)        enable_translator="$optarg";;
			--disable-assert)             enable_assert="0";;
			--enable-assert)              enable_assert="2";;
			--enable-assert=*)            enable_assert="$optarg";;
			--disable-strip)              enable_strip="0";;
			--enable-strip)               enable_strip="2";;
			--enable-strip=*)             enable_strip="$optarg";;
			--disable-universal)          enable_universal="0";;
			--enable-universal)           enable_universal="2";;
			--enable-universal=*)         enable_universal="$optarg";;
			--disable-osx-g5)             enable_osx_g5="0";;
			--enable-osx-g5)              enable_osx_g5="2";;
			--enable-osx-g5=*)            enable_osx_g5="$optarg";;
			--disable-unicode)            enable_unicode="0";;
			--enable-unicode)             enable_unicode="2";;
			--enable-unicode=*)           enable_unicode="$optarg";;

			--with-sdl)                   with_sdl="2";;
			--without-sdl)                with_sdl="0";;
			--with-sdl=*)                 with_sdl="$optarg";;

			--with-cocoa)                 with_cocoa="2";;
			--without-cocoa)              with_cocoa="0";;
			--with-cocoa=*)               with_cocoa="$optarg";;

			--with-zlib)                  with_zlib="2";;
			--without-zlib)               with_zlib="0";;
			--with-zlib=*)                with_zlib="$optarg";;

			--with-png)                   with_png="2";;
			--without-png)                with_png="0";;
			--with-png=*)                 with_png="$optarg";;
			--with-libpng)                with_png="2";;
			--without-libpng)             with_png="0";;
			--with-libpng=*)              with_png="$optarg";;

			--with-libtimidity)           with_libtimidity="2";;
			--without-libtimidity)        with_libtimidity="0";;
			--with-libtimidity=*)         with_libtimidity="$optarg";;

			--with-freetype)              with_freetype="2";;
			--without-freetype)           with_freetype="0";;
			--with-freetype=*)            with_freetype="$optarg";;
			--with-libfreetype)           with_freetype="2";;
			--without-libfreetype)        with_freetype="0";;
			--with-libfreetype=*)         with_freetype="$optarg";;

			--with-fontconfig)            with_fontconfig="2";;
			--without-fontconfig)         with_fontconfig="0";;
			--with-fontconfig=*)          with_fontconfig="$optarg";;
			--with-libfontconfig)         with_fontconfig="2";;
			--without-libfontconfig)      with_fontconfig="0";;
			--with-libfontconfig=*)       with_fontconfig="$optarg";;

			--with-psp-config)            with_psp_config="2";;
			--without-psp-config)         with_psp_config="0";;
			--with-psp-config=*)          with_psp_config="$optarg";;

			--with-makedepend)            with_makedepend="2";;
			--without-makedepend)         with_makedepend="0";;
			--with-makedepend=*)          with_makedepend="$optarg";;

			--with-direct-music)          with_direct_music="2";;
			--without-direct-music)       with_direct_music="0";;
			--with-direct-music=*)        with_direct_music="$optarg";;

			--with-sort)                  with_sort="2";;
			--without-sort)               with_sort="0";;
			--with-sort=*)                with_sort="$optarg";;

			--with-iconv)                 with_iconv="2";;
			--without-iconv)              with_iconv="0";;
			--with-iconv=*)               with_iconv="$optarg";;

			--with-midi=*)                with_midi="$optarg";;
			--with-midi-arg=*)            with_midi_arg="$optarg";;

			--without-distcc)             with_distcc="0";;
			--with-distcc)                with_distcc="2";;
			--with-distcc=*)              with_distcc="$optarg";;

			--without-ccache)             with_ccache="0";;
			--with-ccache)                with_ccache="2";;
			--with-ccache=*)              with_ccache="$optarg";;

			--without-osx-sysroot)        with_osx_sysroot="0";;
			--with-osx-sysroot)           with_osx_sysroot="2";;
			--with-osx-sysroot=*)         with_osx_sysroot="$optarg";;

			--without-application-bundle) with_application_bundle="0";;
			--with-application-bundle)    with_application_bundle="1";;
			--with-application-bundle=*)  with_application_bundle="$optarg";;

			--without-threads)            with_threads="0";;
			--with-threads)               with_threads="1";;
			--with-threads=*)             with_threads="$optarg";;

			CC=* | --CC=*)                CC="$optarg";;
			CXX=* | --CXX=*)              CXX="$optarg";;
			CFLAGS=* | --CFLAGS=*)        CFLAGS="$optarg";;
			LDFLAGS=* | --LDFLAGS=*)      LDFLAGS="$optarg";;

			--ignore-extra-parameters)    ignore_extra_parameters="1";;

			--*)
				if [ "$ignore_extra_parameters" = "0" ]; then
					echo "Unknown option $p"
					exit 1
				else
					echo "Unknown option $p ignored"
				fi
				;;
		esac
	done

	if [ -n "$prev_p" ]; then
		echo "configure: error: missing argument to --$prev_p"
		exit 1
	fi

	# Clean the logfile
	echo "" > $config_log
}

save_params() {
	# Here we save all params, so we can later on do an exact redo of this
	#  configuration, without having the user to re-input stuff

	echo "Running configure with following options:" >> $config_log
	echo "" >> $config_log

	configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
	for p in $save_params_array; do
		eval "v=\"\$$p\""
		p=`echo "$p" | sed 's/_/-/g;s/\n//g;'`
		# Only save those params that aren't empty
		configure="$configure --$p=\"$v\""
	done

	echo "$configure" >> $config_log
	echo "$configure" > config.cache
	echo "" >> $config_log
}

check_params() {
	# Some params want to be in full uppercase, else they might not work as
	# expected.. fix that here

	endian=`echo $endian | tr '[a-z]' '[A-Z]'`
	os=`echo $os | tr '[a-z]' '[A-Z]'`
	cpu_type=`echo $cpu_type | tr '[a-z]' '[A-Z]'`

	# Check if all params have valid values

	# Endian only allows AUTO, LE and, BE
	if [ -z "`echo $endian | egrep '^(AUTO|LE|BE)$'`" ]; then
		echo "configure: error: invalid option --endian=$endian"
		echo " Available options are: --endian=[AUTO|LE|BE]"
		exit 1
	fi
	# OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP
	if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP)$'`" ]; then
		echo "configure: error: invalid option --os=$os"
		echo " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP]"
		exit 1
	fi
	# cpu_type can be either 32 or 64
	if [ -z "`echo $cpu_type | egrep '^(32|64|DETECT)$'`" ]; then
		echo "configure: error: invalid option --cpu-type=$cpu_type"
		echo " Available options are: --cpu-type[=DETECT|32|64]"
		exit 1
	fi
	# enable_debug should be between 0 and 4
	if [ -z "`echo $enable_debug | egrep '^[0123]$'`" ]; then
		echo "configure: error: invalid option --enable-debug=$enable_debug"
		echo " Available options are: --enable-debug[=0123]"
		exit 1
	fi

	detect_awk

	check_build
	check_host

	detect_os

# We might enable universal builds always on OSX targets.. but currently we don't
#	if [ "$enable_universal" = "1" ]  && [ "$os" != "OSX" ]; then
	if [ "$enable_universal" = "1" ]; then
		enable_universal="0"
	fi
	if [ "$enable_universal" = "2" ]  && [ "$os" != "OSX" ]; then
		log 1 "configure: error: --enable-universal only works on OSX"
		exit 1
	fi
	if [ "$enable_universal" = "0" ]; then
		log 1 "checking universal build... no"
	else
		log 1 "checking universal build... yes"
	fi

	# Already detected by check_build
	log 1 "checking build cc... $cc_build"
	log 1 "checking host cc... $cc_host"

	check_cxx_build
	check_cxx_host
	check_windres
	if [ "$enable_strip" != "0" ]; then
		check_strip
	else
		log 1 "checking strip... disabled"
	fi
	check_lipo
	check_makedepend
	detect_cputype

	if [ "$enable_static" = "1" ]; then
		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "OSX" ]; then
			enable_static="2"
		else
			enable_static="0"
		fi
	fi

	if [ "$enable_static" != "0" ]; then
		log 1 "checking static... yes"

		if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ]; then
			log 1 "WARNING: static is only known to work on Windows, MacOSX and MorphOS"
			log 1 "WARNING: use static at your own risk on this platform"

			sleep 5
		fi
	else
		log 1 "checking static... no"
	fi

	if [ "$enable_unicode" = "1" ]; then
		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
			enable_unicode="2"
		else
			enable_unicode="0"
		fi
	fi

	if [ "$enable_unicode" != "0" ]; then
		log 1 "checking unicode... yes"
	else
		log 1 "checking unicode... no"
	fi

	# Show what we configured
	if [ "$enable_debug" = "0" ]; then
		log 1 "using debug level... no"
	elif [ "$enable_profiling" != "0" ]; then
		log 1 "using debug level... profiling (debug level $enable_debug)"
	else
		log 1 "using debug level... level $enable_debug"
	fi

	detect_sdl
	detect_cocoa

	if [ "$enable_dedicated" != "0" ]; then
		log 1 "checking GDI video driver... skipping"
		log 1 "checking dedicated... found"

		if [ "$enable_network" = "0" ]; then
			log 1 "WARNING: compiling a dedicated server without network is pointless"
			sleep 5
		fi
	else
		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
			log 1 "checking GDI video driver... found"
		else
			log 1 "checking GDI video driver... not Windows, skipping"
		fi

		if [ -z "$sdl_config" ] && [ "$with_cocoa" = 0 ] && [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
			log 1 "WARNING: no video driver found, building dedicated only"
			enable_dedicated="1"
			sleep 1

			log 1 "checking dedicated... found"
		else
			log 1 "checking dedicated... not selected"
		fi
	fi

	if [ "$enable_network" != "0" ]; then
		log 1 "checking network... found"
	else
		log 1 "checking network... disabled"
	fi

	if [ "$enable_translator" != "0" ]; then
		log 1 "checking translator... debug"
		# -t shows TODO items, normally they are muted
		strgen_flags="-t"
	else
		log 1 "checking translator... no"
		strgen_flags=""
	fi

	if [ "$enable_assert" != "0" ]; then
		log 1 "checking assert... enabled"
	else
		log 1 "checking assert... disabled"
	fi

	detect_zlib
	detect_png
	detect_freetype
	detect_fontconfig
	detect_iconv
	detect_pspconfig
	detect_libtimidity

	if [ "$with_direct_music" = "1" ] || [ "$with_direct_music" = "2" ]; then
		if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then
			if [ "$with_direct_music" = "2" ]; then
				log 1 "configure: error: direct-music is only supported on Win32 targets"
				exit 1
			fi
			with_direct_music="0"

			log 1 "checking direct-music... not Windows, skipping"
		else
			check_direct_music
		fi
	fi

	detect_sort

	if [ "$os" = "OSX" ] && [ "$endian" = "AUTO" ]; then
		endian="PREPROCESSOR"
	fi

	log 1 "checking endianess... $endian"

	# Suppress language errors when there is a version defined, indicating a release
	#  It just isn't pretty if any release produces warnings in the languages.
	if [ -f "$ROOT_DIR/version" ]; then
		lang_suppress="yes"
		log 1 "suppress language errors... yes"
	else
		lang_suppress=""
		log 1 "suppress language errors... no"
	fi

	if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then
		if [ "$os" = "MORPHOS" ]; then
			strip_arg="--strip-all --strip-unneeded --remove-section .comment"
		elif [ "$os" = "OSX" ]; then
			strip_arg=""
		elif [ "$os" = "OS2" ]; then
			strip_arg=""
			# OS2 uses strip via gcc, because it needs to be feed to emxbind
			LDFLAGS="$LDFLAGS -s"
		elif [ "$os" = "SUNOS" ]; then
			# The GNU strip does know -s, the non-GNU doesn't
			#  So try to detect it (in a bit of an ugly way)
			strip_arg="`$strip -s strip.test 2>/dev/null && echo \"-s\"`"
		else
			strip_arg="-s"
		fi

		log 1 "checking stripping... $strip $strip_arg"
	else
		strip=""
		log 1 "checking stripping... skipped"
	fi

	if [ "$with_distcc" = "0" ]; then
		log 1 "checking distcc... no"
	elif [ "$with_distcc" = "1" ]; then
		with_distcc="0"

		log 1 "checking distcc... no (only used when forced)"
	elif [ "$with_distcc" = "2" ]; then
		distcc="distcc"
	else
		distcc="$with_distcc"
	fi
	if [ "$with_distcc" != "0" ]; then
		res="`$distcc --version 2>/dev/null | head -n 1 | cut -b 0-6`"
		if [ "$res" != "distcc" ]; then
			distcc=""
			log 1 "checking distcc... no"
			if [ "$with_distcc" = "2" ]; then
				log 1 "configure: error: no distcc detected, but was forced to be used"
				exit 1
			fi
			if [ "$with_distcc" != "1" ]; then
				log 1 "configure: error: '$with_distcc' doesn't seem a distcc to me"
				exit 1
			fi
		fi

		log 1 "checking distcc... $distcc"
	fi

	if [ "$with_ccache" = "0" ]; then
		log 1 "checking ccache... no"
	elif [ "$with_ccache" = "1" ]; then
		with_ccache="0"

		log 1 "checking ccache... no (only used when forced)"
	elif [ "$with_ccache" = "2" ]; then
		ccache="ccache"
	else
		ccache="$with_ccache"
	fi
	if [ "$with_ccache" != "0" ]; then
		res="`$ccache --version 2>/dev/null | head -n 1 | cut -b 0-6`"
		if [ "$res" != "ccache" ]; then
			ccache=""
			log 1 "checking ccache... no"
			if [ "$with_ccache" = "2" ]; then
				log 1 "configure: error: no ccache detected, but was forced to be used"
				exit 1
			fi
			if [ "$with_ccache" != "1" ]; then
				log 1 "configure: error: '$with_ccache' doesn't seem a ccache to me"
				exit 1
			fi
		fi

		log 1 "checking ccache... $ccache"
	fi

	if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then
		if [ "$with_osx_sysroot" = "1" ]; then
			with_osx_sysroot="0"

			log 1 "checking OSX sysroot... not OSX, skipping"
		else
			log 1 "configure: error: --with-osx-sysroot only works if OSX is the target"
			exit 1
		fi
	fi

	if [ "$with_osx_sysroot" != "0" ]; then
		if [ "$enable_universal" = "0" ] && [ "$with_osx_sysroot" != "1" ] && [ "$with_osx_sysroot" != "2" ]; then
			log 1 "checking OSX sysroot... $with_osx_sysroot"
		else
			# If autodetect and no universal, use system default
			if [ "$with_osx_sysroot" = "1" ] && [ "$enable_universal" = "0" ]; then
				log 1 "checking OSX sysroot... no (use system default)"
				with_osx_sysroot="0"
			else
				log 1 "checking OSX sysroot... automatically"
				with_osx_sysroot="3"
			fi
		fi
	else
		if [ "$os" = "OSX" ]; then
			log 1 "checking OSX sysroot... no (use system default)"
		fi
	fi

	if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then
		if [ "$with_application_bundle" = "1" ]; then
			with_application_bundle="0"

			log 1 "checking OSX application bundle... not OSX, skipping"
		else
			log 1 "configure: error: --with-application-bundle only works if OSX is the target"
			exit 1
		fi
	fi

	if [ "$os" = "OSX" ] && [ "$with_application_bundle" = "1" ]; then
		OSXAPP="OpenTTD.app"
	else
		OSXAPP=""
	fi

	if [ "$os" = "OSX" ]; then
		# Test on G5

		if [ "$enable_osx_g5" != "0" ]; then
			log 1 "detecting G5... yes (forced)"
		else
			# First, are we a real OSX system, else we can't detect it
			native=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | grep darwin`
			# If $host doesn't match $build , we are cross-compiling
			if [ -n "$native" ] && [ "$build" == "$host" ]; then
				$cxx_build $SRC_DIR/os/macosx/G5_detector.cpp -o G5_detector
				res=`./G5_detector`
				rm -f G5_detector
				if [ -n "$res" ]; then
					# This is G5, add flags for it
					enable_osx_g5="2"

					log 1 "detecting G5... yes"
				else
					enable_osx_g5="0"

					log 1 "detecting G5... no"
				fi
			else
				enable_osx_g5="0"

				log 1 "detecting G5... no (cross-compiling)"
			fi
		fi
	else
		if [ "$enable_osx_g5" != "0" ]; then
			log 1 "configure: error: OSX G5 selected, but not compiling for OSX"
			log 1 "configure: error: either select OSX as OS, or deselect OSX G5"

			exit 1
		fi
	fi

	if [ -n "$released_version" ]; then
		log 1 "checking revision... release ($released_version)"
		if [ -n "$revision" ] && [ "$revision" != "$released_version" ]; then
			log 1 "WARNING: overriding of the revision is NOT possible for releases"
			log 1 "WARNING: the given revision is IGNORED"

			sleep 5
		fi
		revision=$released_version
	else
		if [ -n "$revision" ]; then
			log 1 "checking revision... $revision"
			log 1 "WARNING: we do not advise you to use this setting"
			log 1 "WARNING: in most cases it is not safe for network use"
			log 1 "WARNING: USE WITH CAUTION!"

			sleep 5
		elif [ -f "$ROOT_DIR/version" ]; then
			revision="`cat $ROOT_DIR/version`"

			log 1 "checking revision... $revision"
		elif [ -d "$ROOT_DIR/.svn" ] && [ -n "`svn help`" ]; then
			revision=""
			log 1 "checking revision... svn detection"
		elif [ -d "$ROOT_DIR/.git" ] && [ -n "`git help`" ]; then
			revision=""
			log 1 "checking revision... git detection"
		else
			revision=""
			log 1 "checking revision... no detection"
			log 1 "WARNING: there is no means to determine the version."
			log 1 "WARNING: please use a subversion or git checkout of OpenTTD."
			log 1 "WARNING: this version is only allowed by game servers that"
			log 1 "WARNING: have been compiled without version detection."
			log 1 "WARNING: there is a great chance you desync."
			log 1 "WARNING: USE WITH CAUTION!"

			sleep 5
		fi
	fi

	if [ "$personal_dir" = "1" ]; then
		if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
			personal_dir="OpenTTD"
		elif [ "$os" = "OSX" ]; then
			personal_dir="Documents/OpenTTD"
		else
			personal_dir=".openttd"
		fi
	fi

	if [ -n "$personal_dir" ]
	then
		log 1 "personal home directory... $personal_dir"
	else
		log 1 "personal home directory... none"
	fi

	if [ -n "$install_dir" ]
	then
		log 1 "installation directory... $install_dir"
	else
		log 1 "installation directory... none"
	fi
}

make_cflags_and_ldflags() {
	# General CFlags for BUILD
	CFLAGS_BUILD=""
	# General CFlags for HOST
	CFLAGS="$CFLAGS -D$os -DWITH_REV"
	# CFlags for HOST and C-Compiler
	CC_FLAGS=""
	# Libs to compile. In fact this is just LDFLAGS
	LIBS="-lstdc++"
	# LDFLAGS used for HOST
	LDFLAGS="$LDFLAGS"

	if [ $enable_debug = 0 ]; then
		# No debug, add default stuff
		OBJS_SUBDIR="release"
		if [ "$os" = "OSX" ]; then
			# these compilerflags makes the app run as fast as possible without making the app unstable. It works on G3 or newer
			CFLAGS="-O3 -funroll-loops -fsched-interblock -falign-loops=16 -falign-jumps=16 -falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15 -mdynamic-no-pic $CFLAGS"
		else
			if [ "$os" = "MORPHOS" ]; then
				CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS"
				LDFLAGS="$LDFLAGS -noixemul"
			fi

			CFLAGS="-O2 -fomit-frame-pointer $CFLAGS"
		fi
	else
		OBJS_SUBDIR="debug"

		# Each debug level reduces the optimalization by a bit
		if [ $enable_debug -ge 1 ]; then
			CFLAGS="$CFLAGS -g -D_DEBUG"
			if [ "$os" = "PSP" ]; then
				CFLAGS="$CFLAGS -G0"
			fi
		fi
		if [ $enable_debug -ge 2 ]; then
			CFLAGS="$CFLAGS -fno-inline"
		fi
		if [ $enable_debug -ge 3 ]; then
			CFLAGS="$CFLAGS -O0"
		else
			CFLAGS="$CFLAGS -O2"
		fi
	fi

	if [ "$enable_profiling" != "0" ]; then
		CFLAGS="$CFLAGS -p"
		LDFLAGS="$LDFLAGS -pg"
	fi

	if [ "$with_threads" = "0" ]; then
		CFLAGS="$CFLAGS -DNO_THREADS"
	fi

	# Enable some things only for certain GCC versions
	cc_version=`$cc_host -dumpversion | cut -c 1,3`

	if [ $cc_version -ge 29 ]; then
		CFLAGS="$CFLAGS -Wall -Wno-multichar -Wsign-compare -Wundef"
		CFLAGS="$CFLAGS -Wwrite-strings -Wpointer-arith"

		CC_CFLAGS="$CC_CFLAGS -Wstrict-prototypes"
	fi

	gcc295=""
	if [ "$cc_version" = 29 ]; then
		# Make sure we mark GCC 2.95 flag for Makefile.src.in, as we
		#  need a lovely hack there to make it compile correctly.
		gcc295="1"
	fi

	if [ $cc_version -ge 30 ]; then
		CFLAGS="$CFLAGS -W -Wno-unused-parameter"
	fi

	if [ $cc_version -ge 34 ]; then
		CC_CFLAGS="$CC_CFLAGS -Wdeclaration-after-statement -Wold-style-definition"
	fi

	if [ "$os" = "CYGWIN" ]; then
		CFLAGS="$CFLAGS -mwin32"
		LDFLAGS="$LDFLAGS -mwin32"
	fi
	if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
		CFLAGS="$CFLAGS -mno-cygwin"
		LDFLAGS="$LDFLAGS -mno-cygwin"
	fi

	if [ "$os" = "CYGWIN" ] || [ "$os" = "MINGW" ]; then
		LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
		LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32"
	fi

	# GCC 4.0+ complains about that we break strict-aliasing.
	#  On most places we don't see how to fix it, and it doesn't
	#  break anything. So disable strict-aliasing to make the
	#  compiler all happy.
	if [ $cc_version -ge 40 ]; then
		CFLAGS="$CFLAGS -fno-strict-aliasing"
	fi

	# GCC 4.2+ automatically assumes that signed overflows do
	# not occur in signed arithmetics, whereas we are not
	# sure that they will not happen. It furthermore complains
	# about it's own optimized code in some places.
	if [ $cc_version -ge 42 ]; then
		CFLAGS="$CFLAGS -fno-strict-overflow"
	fi

	if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
		LIBS="$LIBS -lpthread"
		LIBS="$LIBS -lrt"
	fi

	if [ "$os" != "CYGWIN" ] && [ "$os" != "MINGW" ] && [ "$os" != "WINCE" ]; then
		LIBS="$LIBS -lc"
	fi
	if [ "$os" = "WINCE" ]; then
		LIBS="$LIBS -lcoredll -lcorelibc -laygshell -lws2 -e WinMainCRTStartup"
	fi
	if [ "$os" = "PSP" ]; then
		CFLAGS="$CFLAGS -I`$psp_config -p`/include"
		LDFLAGS="$LDFLAGS -L`$psp_config -p`/lib"

		CFLAGS="$CFLAGS -fno-exceptions -fno-rtti -D_PSP_FW_VERSION=150"
		LIBS="$LIBS -D_PSP_FW_VERSION=150 -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -lm"
	fi

	if [ "$os" = "MORPHOS" ]; then
		# -Wstrict-prototypes generates much noise because of system headers
		CFLAGS="$CFLAGS -Wno-strict-prototypes"
	fi

	if [ "$os" = "OPENBSD" ]; then
		LIBS="$LIBS -pthread"
	fi

	if [ "$os" = "OSX" ]; then
		LDFLAGS="$LDFLAGS -framework Cocoa"
		if [ "$enable_dedicated" = "0" ]; then
			LIBS="$LIBS -framework QuickTime"
		fi
	fi

	if [ "$os" = "BEOS" ]; then
		LIBS="$LIBS -lmidi -lbe"
	fi

	# Most targets act like UNIX, just with some additions
	if [ "$os" = "BEOS" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then
		CFLAGS="$CFLAGS -DUNIX"
	fi
	# And others like Windows
	if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
		CFLAGS="$CFLAGS -DWIN"
	fi

	if [ -n "$sdl_config" ]; then
		CFLAGS="$CFLAGS -DWITH_SDL"
		CFLAGS="$CFLAGS `$sdl_config --cflags`"
		if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
			if [ "$enable_static" != "0" ]; then
				LIBS="$LIBS `$sdl_config --static-libs`"
			else
				LIBS="$LIBS `$sdl_config --libs`"
			fi
		fi
	fi

	if [ "$with_cocoa" != "0" ]; then
		CFLAGS="$CFLAGS -DWITH_COCOA"
		LIBS="$LIBS -F/System/Library/Frameworks -framework Cocoa -framework Carbon -framework AudioUnit"
	fi

	if [ "$with_zlib" != "0" ]; then
		if [ "$enable_static" != "0" ] && [ "$os" != "OSX" ]; then
			LIBS="$LIBS $zlib"
		else
			LIBS="$LIBS -lz"
		fi
		CFLAGS="$CFLAGS -DWITH_ZLIB"
	fi

	if [ -n "$png_config" ]; then
		CFLAGS="$CFLAGS -DWITH_PNG"
		CFLAGS="$CFLAGS `$png_config --cppflags --I_opts | tr '\n\r' '  '`"

		# The extra flags are unneeded for latest libpng-config, but some versions are so broken...
		if [ "$enable_static" != "0" ]; then
			if [ "$os" = "OSX" ]; then
				LIBS="$LIBS `$png_config --prefix`/lib/libpng.a"
			else
				LIBS="$LIBS `$png_config --static --ldflags | tr '\n\r' '  '`"
			fi
		else
			LIBS="$LIBS `$png_config --ldflags | tr '\n\r' '  '`"
		fi
	fi

	if [ -n "$fontconfig_config" ]; then
		CFLAGS="$CFLAGS -DWITH_FONTCONFIG"
		CFLAGS="$CFLAGS `$fontconfig_config --cflags | tr '\n\r' '  '`"

		if [ "$enable_static" != "0" ]; then
			if [ "$os" = "OSX" ]; then
				# fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
				# Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
				LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s/-lfontconfig//`"
			else
				LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' '  '`"
			fi
		else
			LIBS="$LIBS `$fontconfig_config --libs | tr '\n\r' '  '`"
		fi
	fi

	if [ -n "$freetype_config" ]; then
		CFLAGS="$CFLAGS -DWITH_FREETYPE"
		CFLAGS="$CFLAGS `$freetype_config --cflags | tr '\n\r' '  '`"

		if [ "$enable_static" != "0" ]; then
			if [ "$os" = "OSX" ]; then
				LIBS="$LIBS `$freetype_config --prefix`/lib/libfreetype.a"
			else
				# Is it possible to do static with freetype, if so: how?
				LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
			fi
		else
			LIBS="$LIBS `$freetype_config --libs | tr '\n\r' '  '`"
		fi
	fi

	if [ "$with_direct_music" != "0" ]; then
		CFLAGS="$CFLAGS -DWIN32_ENABLE_DIRECTMUSIC_SUPPORT"
		# GCC 4.0+ doesn't like the DirectX includes (gives tons of
		#  warnings on it we won't be able to fix). For now just
		#  suppress those warnings.
		if [ $cc_version -ge 40 ]; then
			CFLAGS="$CFLAGS -Wno-non-virtual-dtor"
		fi
	fi

	if [ -n "$libtimidity" ]; then
		if [ "$enable_static" != "0" ]; then
			LIBS="$LIBS $libtimidity"
		else
			LIBS="$LIBS -ltimidity"
		fi
		CFLAGS="$CFLAGS -DLIBTIMIDITY"
	fi

	if [ "$with_iconv" != "0" ]; then
		CFLAGS="$CFLAGS -DWITH_ICONV"
		LIBS="$LIBS -liconv"
		if [ "$with_iconv" != "2" ]; then
			CFLAGS="$CFLAGS -I$with_iconv/include"
			LIBS="$LIBS -L$with_iconv/lib"
		fi
	fi

	if [ -n "$with_midi" ]; then
		CFLAGS="$CFLAGS -DEXTERNAL_PLAYER=\\\\\"$with_midi\\\\\""
	fi
	if [ -n "$with_midi_arg" ]; then
		CFLAGS="$CFLAGS -DMIDI_ARG=\\\\\"$with_midi_arg\\\\\""
	fi

	if [ "$enable_dedicated" != "0" ]; then
		CFLAGS="$CFLAGS -DDEDICATED"
	fi

	if [ "$enable_unicode" != "0" ]; then
		CFLAGS="$CFLAGS -DUNICODE -D_UNICODE"
	fi

	if [ "$enable_network" != "0" ]; then
		CFLAGS="$CFLAGS -DENABLE_NETWORK"

		if [ "$os" = "BEOS" ]; then
			LDFLAGS="$LDFLAGS -lbind -lsocket"
		fi

		if [ "$os" = "SUNOS" ]; then
			LDFLAGS="$LDFLAGS -lnsl -lsocket"
		fi
	fi

	if [ "$enable_static" != "0" ]; then
		# OSX can't handle -static in LDFLAGS
		if [ "$os" != "OSX" ]; then
			LDFLAGS="$LDFLAGS -static"
		fi
	fi

	if [ "$enable_assert" = "0" ]; then
		CFLAGS="$CFLAGS -DNDEBUG"
	fi

	if [ "$enable_osx_g5" != "0" ]; then
		CFLAGS="$CFLAGS -mtune=970 -mcpu=970 -mpowerpc-gpopt"
	fi

	if [ "$with_osx_sysroot" != "0" ] && [ "$with_osx_sysroot" != "3" ]; then
		CFLAGS="$CFLAGS -isysroot /Developer/SDKs/MacOSX$with_osx_sysroot.sdk"
		LDFLAGS="$LDFLAGS -Wl,-syslibroot,/Developer/SDKs/MacOSX$with_osx_sysroot.sdk"
	fi

	if [ -n "$personal_dir" ]; then
		CFLAGS="$CFLAGS -DWITH_PERSONAL_DIR -DPERSONAL_DIR=\\\\\"$personal_dir\\\\\""
	fi

	CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""

	log 1 "using CFLAGS... $CFLAGS $CC_CFLAGS"
	log 1 "using LDFLAGS... $LIBS $LDFLAGS"

	# Makedepend doesn't like something like: -isysroot /OSX/blabla
	#  so convert it to: -isysroot -OSX/blabla. makedepend just ignores
	#  any - command it doesn't know, so we are pretty save.
	# Lovely hackish, not?
	# Btw, this almost always comes from outside the configure, so it is
	#  not something we can control.
	if [ "$with_makedepend" != "0" ]; then
		cflags_makedep="` echo "$CFLAGS" | sed 's# /# -#g'`"
	else
		makedepend=""
	fi

	if [ "$with_distcc" != "0" ]; then
		cc_host="$distcc $cc_host"
		cxx_host="$distcc $cxx_host"
		log 1 ""
		log 1 " NOTICE: remind yourself to use 'make -jN' to make use of distcc"
		log 1 ""
	fi

	if [ "$with_ccache" != "0" ]; then
		cc_host="$ccache $cc_host"
		cxx_host="$ccache $cxx_host"
	fi
}

check_compiler() {
	# Params:
	# $1 - Type for message (build / host)
	# $2 - What to fill with the found compiler
	# $3 - System to try
	# $4 - Compiler to try
	# $5 - Env-setting to try
	# $6 - GCC alike to try
	# $7 - CC alike to try
	# $8 - "0" gcc, "1" g++, "2" windres, "3" strip, "4" lipo
	# $9 - What the command is to check for

	if [ -n "$3" ]; then
		# Check for system
		if [ -z "$6" ]; then
			compiler="$3"
		else
			compiler="$3-$6"
		fi
		machine=`eval $compiler $9 2>/dev/null`
		ret=$?
		eval "$2=$compiler"

		log 2 "executing $compiler $9"
		log 2 "  returned $machine"
		log 2 "  exit code $ret"

		if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
			log 1 "checking $1... $compiler not found"
			log 1 "I couldn't detect any $6 binary for $3"
			exit 1
		fi

		if [ "$machine" != "$3" ] && ( [ "$8" = "0" ] || [ "$8" = "1" ] ); then
			log 1 "checking $1... expected $3, found $machine"
			log 1 "the compiler suggests it doesn't build code for the machine you specified"
			exit 1
		fi
	elif [ -n "$4" ]; then
		# Check for manual compiler
		machine=`$4 $9 2>/dev/null`
		ret=$?
		eval "$2=$4"

		log 2 "executing $4 $9"
		log 2 "  returned $machine"
		log 2 "  exit code $ret"

		if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
			log 1 "checking $1... $4 not found"
			log 1 "the selected binary doesn't seem to be a $6 binary"
			exit 1
		fi
	else
		# Nothing given, autodetect

		if [ -n "$5" ]; then
			machine=`$5 $9 2>/dev/null`
			ret=$?
			eval "$2=$5"

			log 2 "executing $5 $9"
			log 2 "  returned $machine"
			log 2 "  exit code $ret"

			# The user defined a GCC that doesn't reply to $9.. abort
			if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
				log 1 "checking $1... $5 unusable"
				log 1 "the CC environment variable is set, but it doesn't seem to be a $6 binary"
				log 1 "please redefine the CC/CXX environment to a $6 binary"
				exit 1
			fi
		else
			log 2 "checking $1... CC/CXX not set (skipping)"

			# No $5, so try '$6'
			machine=`$6 $9 2>/dev/null`
			ret=$?
			eval "$2=$6"

			log 2 "executing $6 $9"
			log 2 "  returned $machine"
			log 2 "  exit code $ret"

			if ( [ -z "$machine" ] && [ "$8" != "3" ] ) || [ "$ret" != "0" ]; then
				# Maybe '$7'?
				machine=`$7 $9 2>/dev/null`
				ret=$?
				eval "$2=$7"

				log 2 "executing $7 $9"
				log 2 "  returned $machine"
				log 2 "  exit code $ret"

				# All failed, abort
				if [ -z "$machine" ]; then
					log 1 "checking $1... $6 not found"
					log 1 "I couldn't detect any $6 binary on your system"
					log 1 "please define the CC/CXX environment to where it is located"

					exit 1
				fi
			fi
		fi
	fi

	if [ "$8" != "0" ]; then
		eval "res=\$$2"
		log 1 "checking $1... $res"
	else
		log 1 "checking $1... $machine"
	fi
}

check_build() {
	check_compiler "build system type" "cc_build" "$build" "$cc_build" "$CC" "gcc" "cc" "0" "-dumpmachine"
}

check_host() {
	# By default the host is the build
	if [ -z "$host" ]; then host="$build"; fi
	check_compiler "host system type" "cc_host" "$host" "$cc_host" "$CC" "gcc" "cc" "0" "-dumpmachine"
}

check_cxx_build() {
	check_compiler "build c++" "cxx_build" "$build" "$cxx_build" "$CXX" "g++" "c++" 1 "-dumpmachine"
}

check_cxx_host() {
	# By default the host is the build
	if [ -z "$host" ]; then host="$build"; fi
	check_compiler "host c++" "cxx_host" "$host" "$cxx_host" "$CXX" "g++" "c++" 1 "-dumpmachine"
}

check_windres() {
	if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
		check_compiler "host windres" "windres" "$host" "$windres" "$WINDRES" "windres" "windres" "2" "-V"
	fi
}

check_strip() {
	if [ "$os" = "OS2" ]; then
		# OS2 via gcc is a bit weird.. stripping HAS to be done via emxbind, which is via gcc directly
		echo "checking host strip... using gcc -s option"
	elif [ "$os" = "OSX" ]; then
		# Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
		echo "int main(int argc, char *argv[]) { }" > strip.test.c
		$cc_host strip.test.c -o strip.test
		check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
		rm -f strip.test.c strip.test
	else
		check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "-V"
	fi
}

check_lipo() {
	if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
		echo "int main(int argc, char *argv[]) { }" > lipo.test.c
		$cc_host lipo.test.c -o lipo.test
		check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
		rm -f lipo.test.c lipo.test
	fi
}

check_direct_music() {
	echo "
		#include <windows.h>
		#include <dmksctrl.h>
		#include <dmusici.h>
		#include <dmusicc.h>
		#include <dmusicf.h>
		int main(int argc, char *argv[]) { }" > direct_music.test.c
	$cxx_host $CFLAGS direct_music.test.c -o direct_music.test 2> /dev/null
	res=$?
	rm -f direct_music.test.c direct_music.test

	if [ "$res" != "0" ]; then
		if [ "$with_direct_music" = "2" ]; then
			log 1 "configure: error: direct-music is not available on this system"
			exit 1
		fi
		with_direct_music="0"

		log 1 "checking direct-music... not found"
	else
		log 1 "checking direct-music... found"
	fi
}

check_makedepend() {
	if [ "$with_makedepend" = "0" ]; then
		log 1 "checking makedepend... disabled"
		return
	fi

	if [ "$with_makedepend" = "1" ] || [ "$with_makedepend" = "2" ]; then
		makedepend="makedepend"
	else
		makedepend="$with_makedepend"
	fi

	rm -f makedepend.tmp
	touch makedepend.tmp
	res=`$makedepend -fmakedepend.tmp 2>/dev/null`
	res=$?
	log 2 "executing $makedepend -f makedepend.tmp"
	log 2 "  returned `cat makedepend.tmp`"
	log 2 "  exit code $ret"

	if [ ! -s makedepend.tmp ]; then
		rm -f makedepend.tmp makedepend.tmp.bak

		if [ "$with_makedepend" = "2" ]; then
			log 1 "checking makedepend... not found"

			log 1 "I couldn't detect any makedepend on your system"
			log 1 "please locate it via --makedepend=[binary]"

			exit 1
		elif [ "$with_makedepend" != "1" ]; then
			log 1 "checking makedepend... $makedepend not found"

			log 1 "the selected file doesn't seem to be a valid makedepend binary"

			exit 1
		else
			log 1 "checking makedepend... not found"

			with_makedepend="0"
			return
		fi
	fi

	rm -f makedepend.tmp makedepend.tmp.bak

	log 1 "checking makedepend... $makedepend"
}

detect_awk() {
	# Not all awks allow gsub(), so we test for that here! It is in fact all we need...

	# These awks are known to work. Test for them explicit
	awks="gawk mawk nawk"

	awk_prefix="echo \"a.c b.c c.c\" | tr ' ' \\\\n | "
	awk_param="' { ORS = \" \" } /\.c$/   { gsub(\".c$\",   \".o\", \$0); print \$0; }' 2>/dev/null"
	awk_result="a.o b.o c.o "
	log 2 "Detecing awk..."

	log 2 "Trying: $awk_prefix $awk $awk_param"
	res=`eval $awk_prefix $awk $awk_param`
	log 2 "Result: '$res'"
	if [ "$res" != "$awk_result" ] && [ "$awk" = "awk" ]; then
		# User didn't supply his own awk, so try to detect some other known working names for an awk
		for awk in $awks; do
			log 2 "Trying: $awk_prefix $awk $awk_param"
			res=`eval $awk_prefix $awk $awk_param`
			log 2 "Result: '$res'"
			if [ "$res" = "$awk_result" ]; then break; fi
		done

		if [ "$res" != "$awk_result" ]; then
			log 1 "checking awk... not found"
			log 1 "configure: error: no awk found"
			log 1 "configure: error: please install one of the following: $awks"
			exit 1
		fi
	fi
	if [ "$res" != "$awk_result" ]; then
		log 1 "checking awk... not found"
		log 1 "configure: error: you supplied '$awk' but it doesn't seem a valid gawk or mawk"
		exit 1
	fi

	log 1 "checking awk... $awk"
}

detect_os() {
	if [ "$os" = "DETECT" ]; then
		# Detect UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP

		# Try first via dumpmachine, then via uname
		os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk '
					/linux/        { print "UNIX";    exit}
					/darwin/       { print "OSX";     exit}
					/freebsd/      { print "FREEBSD"; exit}
					/openbsd/      { print "OPENBSD"; exit}
					/morphos/      { print "MORPHOS"; exit}
					/beos/         { print "BEOS";    exit}
					/sunos/        { print "SUNOS";   exit}
					/solaris/      { print "SUNOS";   exit}
					/cygwin/       { print "CYGWIN";  exit}
					/mingw/        { print "MINGW";   exit}
					/os2/          { print "OS2";     exit}
					/wince/        { print "WINCE";   exit}
					/psp/          { print "PSP";     exit}
		'`

		if [ -z "$os" ]; then
			os=`LC_ALL=C uname | tr '[A-Z]' '[a-z]' | $awk '
					/linux/        { print "UNIX";    exit}
					/darwin/       { print "OSX";     exit}
					/freebsd/      { print "FREEBSD"; exit}
					/openbsd/      { print "OPENBSD"; exit}
					/morphos/      { print "MORPHOS"; exit}
					/beos/         { print "BEOS";    exit}
					/sunos/        { print "SUNOS";   exit}
					/cygwin/       { print "CYGWIN";  exit}
					/mingw/        { print "MINGW";   exit}
					/os\/2/        { print "OS2";     exit}
			'`
		fi

		if [ -z "$os" ]; then
			log 1 "detecting OS... none detected"
			log 1 "I couldn't detect your OS. Please use --os=OS to force one"
			log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP"
			exit 1
		fi

		log 1 "detecting OS... $os"
	else
		log 1 "forcing OS... $os"
	fi
}

detect_sdl() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_sdl" = "0" ]; then
		log 1 "checking SDL... disabled"

		sdl_config=""
		return 0
	fi

	if [ "$with_sdl" = "2" ] && [ "$with_cocoa" = "2" ]; then
		log 1 "configure: error: it is impossible to compile both SDL and COCOA"
		log 1 "configure: error: please deselect one of them and try again"
		exit 1
	fi

	if [ "$with_sdl" = "2" ] && [ "$enable_dedicated" != "0" ]; then
		log 1 "configure: error: it is impossible to compile a dedicated with SDL"
		log 1 "configure: error: please deselect one of them and try again"
		exit 1
	fi

	if [ "$enable_dedicated" != "0" ]; then
		log 1 "checking SDL... skipping"

		sdl_config=""
		return 0
	fi

	# By default on OSX we don't use SDL. The rest is auto-detect
	if [ "$with_sdl" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then
		log 1 "checking SDL... OSX, skipping"

		sdl_config=""
		return 0
	fi

	if [ "$with_sdl" = "1" ] || [ "$with_sdl" = "" ] || [ "$with_sdl" = "2" ]; then
		sdl_config="sdl-config"
	else
		sdl_config="$with_sdl"
	fi

	version=`$sdl_config --version 2>/dev/null`
	ret=$?
	log 2 "executing $sdl_config --version"
	log 2 "  returned $version"
	log 2 "  exit code $ret"

	if [ -z "$version" ] || [ "$ret" != "0" ]; then
		log 1 "checking SDL... not found"

		# It was forced, so it should be found.
		if [ "$with_sdl" != "1" ]; then
			log 1 "configure: error: sdl-config couldn't be found"
			log 1 "configure: error: you supplied '$with_sdl', but it seems invalid"
			exit 1
		fi

		sdl_config=""
		return 0
	fi

	log 1 "checking SDL... found"
}

detect_cocoa() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_cocoa" = "0" ]; then
		log 1 "checking COCOA... disabled"

		return 0
	fi

	if [ "$with_cocoa" = "2" ] && [ "$enable_dedicated" != "0" ]; then
		log 1 "configure: error: it is impossible to compile a dedicated with COCOA"
		log 1 "configure: error: please deselect one of them and try again"
		exit 1
	fi

	if [ "$enable_dedicated" != "0" ]; then
		log 1 "checking COCOA... skipping"

		with_cocoa="0"
		return 0
	fi

	# By default on OSX we use COCOA. The rest doesn't support it
	if [ "$with_cocoa" = "1" ] && [ "$os" != "OSX" ]; then
		log 1 "checking COCOA... not OSX, skipping"

		with_cocoa="0"
		return 0
	fi

	if [ "$os" != "OSX" ]; then
		log 1 "checking COCOA... not OSX"

		log 1 "configure: error: COCOA video driver is only supported for OSX"
		exit 1
	fi

	log 1 "checking COCOA... found"
}

detect_library() {
	# $1 - config-param ($with_zlib value)
	# $2 - library name ('zlib', sets $zlib)
	# $3 - static library name (libz.a)
	# $4 - header name (zlib.h)
	# $5 - force static (if non-empty)

	if [ -n "$5" ]; then force_static="1"; fi

	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$1" = "0" ]; then
		log 1 "checking $2... disabled"

		eval "$2=\"\""
		return 0
	fi

	log 2 "detecting $2"

	if [ "$1" = "1" ] || [ "$1" = "" ] || [ "$1" = "2" ]; then
		eval "$2=`ls -1 /usr/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
		eval "res=\$$2"
		if [ -z "$res" ]; then
			log 2 "  trying /usr/include/$4... no"
			eval "$2=`ls -1 /usr/local/include/*.h 2>/dev/null | egrep \"\/$4\$\"`"
		fi
		eval "res=\$$2"
		if [ -z "$res" ]; then
			log 2 "  trying /usr/local/include/$4... no"
		fi

		eval "res=\$$2"
		if [ -n "$res" ] && ( [ -n "$force_static" ] || ( [ "$enable_static" != "0" ] && [ "$os" != "OSX" ] ) ); then
			eval "res=\$$2"
			log 2 "  trying $res... found"
			# Now find the static lib, if needed
			eval "$2=`ls /lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
			eval "res=\$$2"
			if [ -z "$res" ]; then
				log 2 "  trying /lib/$3... no"
				eval "$2=`ls /usr/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
			fi
			eval "res=\$$2"
			if [ -z "$res" ]; then
				log 2 "  trying /usr/lib/$3... no"
				eval "$2=`ls /usr/local/lib/*.a 2>/dev/null | egrep \"\/$3\$\"`"
			fi
			eval "res=\$$2"
			if [ -z "$res" ]; then
				log 2 "  trying /usr/local/lib/$3... no"
				log 1 "configure: error: $2 couldn't be found"
				log 1 "configure: error: you requested a static link, but I can't find $3"

				exit 1
			fi
		fi
	else
		# Make sure it exists
		if [ -f "$1" ]; then
			eval "$2=`ls $1 2>/dev/null`"
		else
			eval "$2=`ls $1/$3 2>/dev/null`"
		fi
	fi

	eval "res=\$$2"
	if [ -z "$res" ]; then
		log 1 "checking $2... not found"
		if [ "$1" = "2" ]; then
			log 1 "configure: error: $2 couldn't be found"

			exit 1
		elif [ "$1" != "1" ]; then
			log 1 "configure: error: $2 couldn't be found"
			log 1 "configure: error: you supplied '$1', but it seems invalid"

			exit 1
		fi

		return 0
	fi

	eval "res=\$$2"
	log 2 "  trying $res... found"

	log 1 "checking $2... found"
}

detect_zlib() {
	detect_library "$with_zlib" "zlib" "libz.a" "zlib.h"
}

detect_libtimidity() {
	detect_library "$with_libtimidity" "libtimidity" "libtimidity.a" "timidity.h"
}

detect_png() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_png" = "0" ]; then
		log 1 "checking libpng... disabled"

		png_config=""
		return 0
	fi

	if [ "$with_zlib" = "0" ] || [ "$zlib" = "" ]; then
		log 1 "configure: error: libpng depends on zlib, which couldn't be found / was disabled"
		log 1 "configure: error: please supply --with-zlib, with a valid zlib location"
		exit 1
	fi

	if [ "$with_png" = "1" ] || [ "$with_png" = "" ] || [ "$with_png" = "2" ]; then
		png_config="libpng-config"
	else
		png_config="$with_png"
	fi

	version=`$png_config --version 2>/dev/null`
	ret=$?
	log 2 "executing $png_config --version"
	log 2 "  returned $version"
	log 2 "  exit code $ret"

	if [ -z "$version" ] || [ "$ret" != "0" ]; then
		log 1 "checking libpng... not found"

		# It was forced, so it should be found.
		if [ "$with_png" != "1" ]; then
			log 1 "configure: error: libpng-config couldn't be found"
			log 1 "configure: error: you supplied '$with_png', but it seems invalid"
			exit 1
		fi

		png_config=""
		return 0
	fi

	log 1 "checking libpng... found"
}

detect_freetype() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_freetype" = "0" ]; then
		log 1 "checking libfreetype... disabled"

		freetype_config=""
		return 0
	fi

	if [ "$with_zlib" = "0" ] || [ "$zlib" = "" ]; then
		log 1 "configure: error: libfreetype depends on zlib, which couldn't be found / was disabled"
		log 1 "configure: error: please supply --with-zlib, with a valid zlib location"
		exit 1
	fi

	if [ "$with_freetype" = "1" ] || [ "$with_freetype" = "" ] || [ "$with_freetype" = "2" ]; then
		freetype_config="freetype-config"
	else
		freetype_config="$with_freetype"
	fi

	version=`$freetype_config --version 2>/dev/null`
	ret=$?
	log 2 "executing freetype_config --version"
	log 2 "  returned $version"
	log 2 "  exit code $ret"

	if [ -z "$version" ] || [ "$ret" != "0" ]; then
		log 1 "checking libfreetype... not found"

		# It was forced, so it should be found.
		if [ "$with_freetype" != "1" ]; then
			log 1 "configure: error: freetype-config couldn't be found"
			log 1 "configure: error: you supplied '$with_freetype', but it seems invalid"
			exit 1
		fi

		freetype_config=""
		return 0
	fi

	log 1 "checking libfreetype... found"
}

detect_fontconfig() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_fontconfig" = "0" ]; then
		log 1 "checking libfontconfig... disabled"

		fontconfig_config=""
		return 0
	fi

	if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then
		log 1 "checking libfontconfig... WIN32, skipping"
		fontconfig_config=""
		return 0
	fi

	if [ "$with_fontconfig" = "1" ] || [ "$with_fontconfig" = "" ] || [ "$with_fontconfig" = "2" ]; then
		fontconfig_config="pkg-config fontconfig"
	else
		fontconfig_config="$with_fontconfig"
	fi

	version=`$fontconfig_config --modversion 2>/dev/null`
	ret=$?
	shortversion=`echo $version | cut -c 1,3`
	log 2 "executing $fontconfig_config --modversion"
	log 2 "  returned $version"
	log 2 "  exit code $ret"

	if [ -z "$version" ] || [ "$ret" != "0" ] || [ "$shortversion" -le "22" ]; then
		if [ -n "$shortversion" ] && [ "$shortversion" -le "22" ]; then
			log 1 "checking libfontconfig... needs at least version 2.3.0, fontconfig NOT enabled"
		else
			log 1 "checking libfontconfig... not found"
		fi

		# It was forced, so it should be found.
		if [ "$with_fontconfig" != "1" ]; then
			log 1 "configure: error: fontconfig-config couldn't be found"
			log 1 "configure: error: you supplied '$with_fontconfig', but it seems invalid"
			exit 1
		fi

		fontconfig_config=""
		return 0
	fi

	log 1 "checking libfontconfig... found"
}

detect_pspconfig() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_psp_config" = "0" ]; then
		log 1 "checking psp-config... disabled"

		psp_config=""
		return 0
	fi

	if [ "$with_psp_config" = "1" ] && [ "$os" != "PSP" ]; then
		log 1 "checking psp-config... not PSP, skipping"

		psp_config="";
		return 0
	fi

	if [ "$os" != "PSP" ]; then
		log 1 "checking psp-config... not PSP"

		log 1 "configure: error: psp-config is only supported for PSP"
		exit 1
	fi

	if [ "$with_psp_config" = "1" ] || [ "$with_psp_config" = "" ] || [ "$with_psp_config" = "2" ]; then
		psp_config="psp-config"
	else
		psp_config="$with_psp_config"
	fi

	version=`$psp_config -p 2>/dev/null`
	ret=$?
	log 2 "executing $psp_config -p"
	log 2 "  returned $version"
	log 2 "  exit code $ret"

	if [ -z "$version" ] || [ "$ret" != "0" ]; then
		log 1 "checking psp-config... not found"
		log 1 "configure: error: psp-config couldn't be found"

		# It was forced, so it should be found.
		if [ "$with_psp_config" != "1" ]; then
			log 1 "configure: error: you supplied '$with_psp_config', but it seems invalid"
		fi
		exit 1
	fi

	log 1 "checking psp-config... found"
}

detect_iconv() {
	# 0 means no, 1 is auto-detect, 2 is force
	if [ "$with_iconv" = "0" ]; then
		log 1 "checking iconv... disabled"

		return 0
	fi

	if [ "$with_iconv" = "1" ] && [ "$os" != "OSX" ]; then
		log 1 "checking iconv... not OSX, skipping"
		with_iconv="0"

		return 0
	fi

	# Try to find iconv.h, seems to only thing to detect iconv with

	if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then
		iconv=`ls -1 /usr/include 2>/dev/null | grep "iconv.h"`
		if [ -z "$iconv" ]; then
			iconv=`ls -1 /usr/local/include 2>/dev/null | grep "iconv.h"`
		fi
	else
		# Make sure it exists
		iconv=`ls $with_iconv/include/iconv.h 2>/dev/null`
	fi

	if [ -z "$iconv" ]; then
		log 1 "checking iconv... not found"
		if [ "$with_iconv" = "2" ]; then
			log 1 "configure: error: iconv couldn't be found"

			exit 1
		elif [ "$with_iconv" != "1" ]; then
			log 1 "configure: error: iconv couldn't be found"
			log 1 "configure: error: you supplied '$with_iconv', but I couldn't detect iconv in it"

			exit 1
		fi

		return 0
	fi

	if [ "$with_iconv" = "1" ]; then
		with_iconv="2"
	fi

	log 2 "found iconv in $iconv"

	log 1 "checking iconv... found"
}

_detect_sort() {
	sort_test_in="d
a
c
b"

	sort_test_out="a
b
c
d"

	log 2 "running echo <array> | $1"

	if [ "`echo \"$sort_test_in\" | $1 2>/dev/null`" = "$sort_test_out" ]; then
		sort="$1"
		log 2 "  result was valid"
	else
		log 2 "  result was invalid"
	fi
}

detect_sort() {
	if [ "$with_sort" = "0" ]; then
		log 1 "checking sort... disabled"

		return
	fi

	if [ "$with_sort" = "1" ] || [ "$with_sort" = "2" ]; then
		_detect_sort "sort"
		if [ -z "$sort" ]; then _detect_sort "/sbin/sort"; fi
		if [ -z "$sort" ]; then _detect_sort "/usr/sbin/sort"; fi
		if [ -z "$sort" ]; then _detect_sort "/usr/local/sbin/sort"; fi
		if [ -z "$sort" ]; then _detect_sort "/bin/sort"; fi
		if [ -z "$sort" ]; then _detect_sort "/usr/bin/sort"; fi
		if [ -z "$sort" ]; then _detect_sort "/usr/local/bin/sort"; fi
	else
		_detect_sort "$with_sort"
	fi

	if [ -z "$sort" ]; then
		if [ "$with_sort" = "2" ]; then
			log 1 "checking sort... not found"

			log 1 "configure: error: couldn't detect sort on your system"
			exit 1
		elif [ "$with_sort" != "1" ]; then
			log 1 "checking sort... $with_sort not found"

			log 1 "configure: error: '$with_sort' doesn't look like a sort to me"
			log 1 "configure: error: please verify its location and function and try again"

			exit 1
		else
			log 1 "checking sort... not found"
		fi
	else
		log 1 "checking sort... $sort"
	fi
}

detect_cputype() {
	if [ -n "$cpu_type" ] && [ "$cpu_type" != "DETECT" ]; then
		log 1 "forcing cpu-type... $cpu_type bits"
		return;
	fi
	echo "#include \"src/stdafx.h\"" > tmp.64bit.cpp
	echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
	echo "int main() { return 0; }" >> tmp.64bit.cpp
	execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
	cpu_type="`eval $execute 2>/dev/null`"
	ret=$?
	log 2 "executing $execute"
	log 2 "  returned $cpu_type"
	log 2 "  exit code $ret"
	if [ "$ret" = "0" ]; then cpu_type="64"; else cpu_type="32"; fi
	log 1 "detecting cpu-type... $cpu_type bits"
	rm -f tmp.64bit tmp.64bit.cpp
}

make_sed() {
	# We check here if we are PPC, because then we need to enable FOUR_BYTE_BOOL
	#  We do this here, and not sooner, so universal builds also have this
	#  automatically correct
	# FOUR_BYTE_BOOL is needed, because C++ uses 4byte for a bool on PPC, where
	#  we use 1 byte per bool normally in C part. So convert that last one to 4
	#  bytes too, but only for PPC.
	ppc=`$cc_host -dumpmachine | egrep "powerpc|ppc"`
	if [ -n "$ppc" ]; then
		T_CFLAGS="$CFLAGS -DFOUR_BYTE_BOOL"
		osx_sysroot_version=10.3.9
	else
		T_CFLAGS="$CFLAGS"
		osx_sysroot_version=10.4u
	fi

	T_LDFLAGS="$LDFLAGS"
	if [ "$with_osx_sysroot" = "3" ]; then
		T_CFLAGS="$T_CFLAGS -isysroot /Developer/SDKs/MacOSX$osx_sysroot_version.sdk"
		T_LDFLAGS="$T_LDFLAGS -Wl,-syslibroot,/Developer/SDKs/MacOSX$osx_sysroot_version.sdk"
	fi

	SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"

	# All the data needed to compile a single target
	#  Make sure if you compile multiple targets to
	#  use multiple OBJS_DIR, because all in-between
	#  binaries are stored in there, and nowhere else.
	SRC_REPLACE="
		s#!!CC_HOST!!#$cc_host#g;
		s#!!CXX_HOST!!#$cxx_host#g;
		s#!!CC_BUILD!!#$cc_build#g;
		s#!!CXX_BUILD!!#$cxx_build#g;
		s#!!WINDRES!!#$windres#g;
		s#!!STRIP!!#$strip $strip_arg#g;
		s#!!LIPO!!#$lipo#g;
		s#!!CC_CFLAGS!!#$CC_CFLAGS#g;
		s#!!CFLAGS!!#$T_CFLAGS#g;
		s#!!CFLAGS_BUILD!!#$CFLAGS_BUILD#g;
		s#!!STRGEN_FLAGS!!#$strgen_flags#g;
		s#!!LIBS!!#$LIBS#g;
		s#!!LDFLAGS!!#$T_LDFLAGS#g;
		s#!!BIN_DIR!!#$BIN_DIR#g;
		s#!!ROOT_DIR!!#$ROOT_DIR#g;
		s#!!MEDIA_DIR!!#$MEDIA_DIR#g;
		s#!!SOURCE_LIST!!#$SOURCE_LIST#g;
		s#!!SRC_OBJS_DIR!!#$SRC_OBJS_DIR#g;
		s#!!LANG_OBJS_DIR!!#$LANG_OBJS_DIR#g;
		s#!!SRC_DIR!!#$SRC_DIR#g;
		s#!!OSXAPP!!#$OSXAPP#g;
		s#!!LANG_DIR!!#$LANG_DIR#g;
		s#!!TTD!!#$TTD#g;
		s#!!BINARY_DIR!!#$prefix_dir/$binary_dir#g;
		s#!!DATA_DIR!!#$prefix_dir/$data_dir#g;
		s#!!ICON_DIR!!#$prefix_dir/$icon_dir#g;
		s#!!PERSONAL_DIR!!#$personal_dir#g;
		s#!!INSTALL_DIR!!#$install_dir#g;
		s#!!STRGEN!!#$STRGEN#g;
		s#!!ENDIAN_CHECK!!#$ENDIAN_CHECK#g;
		s#!!ENDIAN_FORCE!!#$endian#g;
		s#!!STAGE!!#$STAGE#g;
		s#!!MAKEDEPEND!!#$makedepend#g;
		s#!!CFLAGS_MAKEDEP!!#$cflags_makedep#g;
		s#!!SORT!!#$sort#g;
		s#!!CONFIG_CACHE_COMPILER!!#config.cache.compiler#g;
		s#!!CONFIG_CACHE_LINKER!!#config.cache.linker#g;
		s#!!CONFIG_CACHE_ENDIAN!!#config.cache.endian#g;
		s#!!CONFIG_CACHE_SOURCE!!#config.cache.source#g;
		s#!!CONFIG_CACHE_VERSION!!#config.cache.version#g;
		s#!!CONFIG_CACHE_SOURCE_LIST!!#config.cache.source.list#g;
		s#!!LANG_SUPPRESS!!#$lang_suppress#g;
		s#!!OBJS_C!!#$OBJS_C#g;
		s#!!OBJS_CPP!!#$OBJS_CPP#g;
		s#!!OBJS_MM!!#$OBJS_MM#g;
		s#!!OBJS_RC!!#$OBJS_RC#g;
		s#!!SRCS!!#$SRCS#g;
		s#!!OS!!#$os#g;
		s#!!CONFIGURE_FILES!!#$CONFIGURE_FILES#g;
		s#!!REVISION!!#$revision#g;
		s#!!AWK!!#$awk#g;
		s#!!GCC295!!#$gcc295#g;
		s#!!DISTCC!!#$distcc#g;
	"
}

generate_main() {
	STAGE="[MAIN]"

	make_sed

	# Create the main Makefile
	echo "Generating Makefile..."
	< $ROOT_DIR/Makefile.in sed "$SRC_REPLACE" > Makefile
	echo "# Auto-generated file -- DO NOT EDIT" > Makefile.am
	echo >> Makefile.am
	# Make the copy of the source-list, so we don't trigger an unwanted recompile
	cp $SOURCE_LIST config.cache.source.list
	# Make sure config.cache is OLDER then config.cache.source.list
	touch config.cache
}

generate_lang() {
	STAGE="[LANG]"

	make_sed

	# Create the language file
	mkdir -p $LANG_OBJS_DIR

	echo "Generating lang/Makefile..."
	< $ROOT_DIR/Makefile.lang.in sed "$SRC_REPLACE" > $LANG_OBJS_DIR/Makefile
	echo "DIRS += $LANG_OBJS_DIR" >> Makefile.am
	echo "LANG_DIRS += $LANG_OBJS_DIR" >> Makefile.am
}

generate_src_normal() {
	STAGE=$1

	make_sed

	# Create the source file
	mkdir -p $SRC_OBJS_DIR

	echo "Generating $2/Makefile..."
	< $ROOT_DIR/Makefile.src.in sed "$SRC_REPLACE" > $SRC_OBJS_DIR/Makefile
	echo "DIRS += $SRC_OBJS_DIR" >> Makefile.am
	echo "SRC_DIRS += $SRC_OBJS_DIR" >> Makefile.am
}

generate_src_osx() {
	cc_host_orig="$cc_host"
	cxx_host_orig="$cxx_host"

	BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc"
	cc_host="$cc_host_orig -arch ppc"
	cxx_host="$cxx_host_orig -arch ppc"
	generate_src_normal "[PowerPC]" "objs/ppc"

	BASE_SRC_OBJS_DIR="$OBJS_DIR/intel"
	cc_host="$cc_host_orig -arch i386"
	cxx_host="$cxx_host_orig -arch i386"
	generate_src_normal "[Intel]" "objs/intel"

	BASE_SRC_OBJS_DIR="$OBJS_DIR/ppc970"
	cc_host="$cc_host_orig -arch ppc970"
	cxx_host="$cxx_host_orig -arch ppc970"
	CFLAGS="$CFLAGS -mtune=970 -mcpu=970 -mpowerpc-gpopt"
	generate_src_normal "[PowerPC G5]" "objs/ppc970"
}

generate_src() {
	if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
		generate_src_osx
	else
		generate_src_normal "[SRC]" "objs"
	fi
}

showhelp() {
	echo "'configure' configures OpenTTD."
	echo ""
	echo "Usage: $0 [OPTION]... [VAR=VALUE]..."
	echo ""
	echo "To assign environment variables (e.g., CC, CFLAGS...), specify them as"
	echo "VAR=VALUE.  See below for descriptions of some of the useful variables."
	echo ""
	echo "Defaults for the options are specified in brackets."
	echo ""
	echo "Configuration:"
	echo "  -h, --help                     display this help and exit"
	echo ""
	echo "System types:"
	echo "  --build=BUILD                  configure for building on BUILD [guessed]"
	echo "  --host=HOST                    cross-compile to build programs to run"
	echo "                                 on HOST [BUILD]"
	echo "  --windres=WINDRES              the windres to use [HOST-windres]"
	echo "  --strip=STRIP                  the strip to use [HOST-strip]"
	echo "  --awk=AWK                      the awk to use in configure [awk]"
	echo "  --lipo=LIPO                    the lipo to use (OSX ONLY) [HOST-lipo]"
	echo "  --os=OS                        the OS we are compiling for [DETECT]"
	echo "                                 DETECT/UNIX/OSX/FREEBSD/OPENBSD/MORPHOS/"
	echo "                                 BEOS/SUNOS/CYGWIN/MINGW/OS2/WINCE/PSP"
	echo "  --endian=ENDIAN                set the endian of the HOST (AUTO/LE/BE)"
	echo "  --revision=rXXXX               overwrite the revision detection."
	echo "                                 Use with care!"
	echo ""
	echo "Paths:"
	echo "  --prefix-dir=dir               specifies the prefix for all installed"
	echo "                                 files [/usr/local]"
	echo "  --binary-dir=dir               location of the binary. Will be prefixed"
	echo "                                 with the prefix-dir [games]"
	echo "  --data-dir=dir                 location of data files (lang, data, gm)."
	echo "                                 Will be prefixed with the prefix-dir"
	echo "                                 [share/games/openttd]"
	echo "  --icon-dir=dir                 location of icons. Will be prefixed"
	echo "                                 with the prefix-dir [share/pixmaps]"
	echo "  --personal-dir=dir             location of the personal directory [.openttd]"
	echo "  --install-dir=dir              specifies the root to install to."
	echo "                                 Useful to install into jails [/]"
	echo ""
	echo "Features and packages:"
	echo "  --enable-debug[=LVL]           enable debug-mode (LVL=[0123], 0 is release)"
	echo "  --enable-profiling             enables profiling"
	echo "  --enable-dedicated             compile a dedicated server (without video)"
	echo "  --enable-static                enable static compile (doesn't work for"
	echo "                                 all HOSTs)"
	echo "  --enable-translator            enable extra output for translators"
	echo "  --enable-universal             enable universal builds (OSX ONLY)"
	echo "  --enable-osx-g5                enables optimalizations for G5 (OSX ONLY)"
	echo "  --disable-network              disable network support"
	echo "  --disable-assert               disable asserts (continue on errors)"
	echo "  --disable-strip                disable any possible stripping"
	echo "  --without-osx-sysroot          disable the automatic adding of sysroot "
	echo "                                 (OSX ONLY)"
	echo "  --without-application-bundle   disable generation of application bundle"
	echo "                                 (OSX ONLY)"
	echo "  --with-direct-music            enable direct music support (Win32 ONLY)"
	echo "  --with-sort=sort               define a non-default location for sort"
	echo "  --with-midi=midi               define which midi-player to use"
	echo "  --with-midi-arg=arg            define which args to use for the"
	echo "                                 midi-player"
	echo "  --with-cocoa                   enables COCOA video driver (OSX ONLY)"
	echo "  --with-sdl[=sdl-config]        enables SDL video driver support"
	echo "  --with-zlib[=zlib.a]           enables zlib support"
	echo "  --with-png[=libpng-config]     enables libpng support"
	echo "  --with-freetype[=freetype-config]"
	echo "                                 enables libfreetype support"
	echo "  --with-fontconfig[=pkg-config fontconfig]"
	echo "                                 enables fontconfig support"
	echo "  --with-iconv[=iconv-path]      enables iconv support"
	echo "  --with-psp-config[=psp-config] enables psp-config support (PSP ONLY)"
	echo "  --with-makedepend[=makedepend] enables makedepend support"
	echo ""
	echo "Some influential environment variables:"
	echo "  CC                             C compiler command"
	echo "  CXX                            C++ compiler command"
	echo "  CFLAGS                         C compiler flags"
	echo "  WINDRES                        windres command"
	echo "  LDFLAGS                        linker flags, e.g. -L<lib dir> if you"
	echo "                                 have libraries in a nonstandard"
	echo "                                 directory <lib dir>"
	echo ""
	echo "Use these variables to override the choices made by 'configure' or to help"
	echo "it to find libraries and programs with nonstandard names/locations."
}