#!/bin/sh
#
# configure [ --floppy <floppy location> ]

target=unknown

# usage
#
# Prints usage.
#
usage()
{
	cat << EOF

Usage: $0 <options>
options:
  --floppy <floppy location>  Specifies the location of the floppy
                              (device or image).
  --bochs-debug               Activates bochs serial debug emulation.
  --target=TARGET             Select build target platform. [default=${target}]
                              valid targets=r5,bone,dano,haiku
  --include-gpl-addons        Include GPL licensed add-ons.
  --help                      Prints out this help.
EOF
}

# assertparam
#
# Checks whether at least one parameter is left.
#
assertparam()
{
	if [ $2 \< 2 ]; then
		echo $0: \`$1\': Parameter expected.
		exit 1
	fi
}

# standard_gcc_settings
#
# Sets the variables for a GCC platform.
#
standard_gcc_settings()
{
	# PLATFORM_LINKLIBS
	gcclib=`gcc -print-libgcc-file-name`
	gccdir=`dirname ${gcclib}`
	gcc_version=`gcc -dumpversion`
	if [ "x${PLATFORM_LINKLIBS}" == "x" ] ; then
		PLATFORM_LINKLIBS="-L ${gccdir} -lgcc"
	fi
	if [ "x${PLATFORM_HEADERS}" == "x" ] ; then
		PLATFORM_HEADERS="${gccdir}/include"
	fi
	if [ "${LIBGCC_DIR}" == "" ] ; then
		LIBGCC_DIR="${gccdir}"
	fi
	if [ "${LIBGCC_OBJECTS}" == "" ] ; then
		LIBGCC_OBJECTS=`ar t ${gccdir}/libgcc.a`
	fi
}

# default parameter values
#
platform=`uname`
gcc_version=
floppy=
bochs_debug=0
include_gpl_addons=0
revision=`uname -r`
case "$revision" in
  5.1)   target=dano ;;
  5.0.4) target=bone ;;
  5.0*)  target=r5 ;;
  *)     target="$platform" ;;
esac

# parse parameters
#
while [ $# \> 0 ] ; do
	case "$1" in
		--include-gpl-addons)	include_gpl_addons=1; shift 1;;
		--floppy)		assertparam "$1" $#; floppy=$2; shift 2;;
		--bochs-debug)	bochs_debug=1; shift 1;;
		--target=*)     target=`echo $1 | cut -d'=' -f2-`; shift 1;;
		--help | -h)	usage; exit 0;;
		*)				echo Invalid argument: \`$1\'; exit 1;;
	esac
done

# check parameters
#
if [ -n "$floppy" ]; then
	case "$floppy" in
		/*)	;;
		*)	echo "Warning: non-absolute floppy path. Parameter ignored.";
			floppy=;;
	esac
fi

# BeOS
if [ "${platform}" = "BeOS" ] ; then
	standard_gcc_settings

# Linux
else if [ "${platform}" = "Linux" ] ; then
	standard_gcc_settings

# Unknown platform
else
	echo Unsupported platform: ${platform}
	exit 1
fi; fi

# Generate BuildConfig
cat << EOF > build/BuildConfig
# BuildConfig
# Note: This file has been automatically generated by configure.

FLOPPY_PATH			?= "${floppy}" ;
PLATFORM_LINKLIBS	?= ${PLATFORM_LINKLIBS} ;
PLATFORM_HEADERS	?= ${PLATFORM_HEADERS} ;
GCC_RAW_VERSION		?= ${gcc_version} ;
LIBGCC_DIR			?= ${LIBGCC_DIR} ;
LIBGCC_OBJECTS		?= ${LIBGCC_OBJECTS} ;
BOCHS_DEBUG_HACK	?= ${bochs_debug} ;
INCLUDE_GPL_ADDONS	?= ${include_gpl_addons} ;
TARGET_PLATFORM 	?= ${target} ;
EOF

# Generate Timezones binaries bindings

timezones=`echo src/data/etc/timezones/* | sed -e s@src/data/etc/timezones/CVS@@`
for f in ${timezones}; 
do 

TZOBJECTS=`gawk '/^Zone/ { print $2 } /^Link/ { print $3 } ' $f `

cat << EOF >> build/BuildConfig
TZ_OBJECTS on <src!data!etc!timezones>${f##src/data/etc/timezones/} ?= $TZOBJECTS ;
EOF
done