#!/usr/bin/env bash
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.

topdir=$(readlink -nf $(dirname $0)/.. 2>/dev/null || (cd $(dirname $0)/..; pwd -P))
systems=$(grep -h config target/*/systems/*|cut -d " " -f 2)

printf "# autogenerated via scripts/create-menu\n" > target/config/Config.in.arch
printf "source target/config/Config.in.arch.default\n" >> target/config/Config.in.arch
printf "source target/config/Config.in.arch.choice\n" >> target/config/Config.in.arch
printf "# autogenerated via scripts/create-menu\n" > target/config/Config.in.system
printf "source target/config/Config.in.system.default\n" >> target/config/Config.in.system
printf "source target/config/Config.in.system.choice\n" >> target/config/Config.in.system

# update appliances
if [ -d "$topdir/target/appliances" ];then
	printf "# autogenerated via scripts/create-menu\n" > $topdir/target/config/Config.in.appliances
	printf "choice\n" >> $topdir/target/config/Config.in.appliances
	printf "prompt \"Appliance\"\n\n" >> $topdir/target/config/Config.in.appliances
	printf "config ADK_CHOOSE_APPLIANCE\n" >> $topdir/target/config/Config.in.appliances
	printf "\tprompt \"choose an appliance\"\n" >> $topdir/target/config/Config.in.appliances
	printf "\tboolean\n\n" >> $topdir/target/config/Config.in.appliances
	cat $topdir/target/appliances/*.appliance >> $topdir/target/config/Config.in.appliances 2>/dev/null
	printf "\nendchoice\n\n" >> $topdir/target/config/Config.in.appliances
	printf "menu \"Appliance Options\"\n" >> $topdir/target/config/Config.in.appliances
	printf "\tvisible if !ADK_CHOOSE_APPLIANCE\n" >> $topdir/target/config/Config.in.appliances
	cat $topdir/target/appliances/*.options >> $topdir/target/config/Config.in.appliances 2>/dev/null
	printf "endmenu\n" >> $topdir/target/config/Config.in.appliances
fi

# create system default
printf "# autogenerated via scripts/create-menu\n" > $topdir/target/config/Config.in.system.default
for j in $systems;do
	system=${j#ADK_TARGET_SYSTEM_}
	systemu=$(echo $system|tr '[:upper:]' '[:lower:]')
	printf "config ADK_$systemu\n" >> $topdir/target/config/Config.in.system.default
	printf "\tboolean\n\n" >> $topdir/target/config/Config.in.system.default
done

cat >> $topdir/target/config/Config.in.system.default << EOD
config ADK_TARGET_SYSTEM
	string
EOD
for i in $systems;do
	system=${i#ADK_TARGET_SYSTEM_}
	systemu=$(echo $system|tr '[:upper:]' '[:lower:]')
	system=$(echo $system|tr '[:upper:]_' '[:lower:]-')
	system=$(echo $system|sed 's#x86-64#x86_64#')
	printf "\tdefault \"${system}\" if ADK_$systemu\n" >> $topdir/target/config/Config.in.system.default
done

# create or update systems
for i in $(ls $topdir/target/);do
	if [ -d "$topdir/target/$i/systems" ];then
		cat $topdir/target/$i/systems/* > $topdir/target/$i/Config.in.systems 2>/dev/null
	fi
done

# create target/$arch/Config.in.arch and target/config/Config.in.system.choice
printf "# autogenerated via scripts/create-menu\n" > target/config/Config.in.system.choice
printf "# autogenerated via scripts/create-menu\n" > target/config/Config.in.arch.default
for arch in $(cat $topdir/target/arch.lst);do
	ARCH=$(echo $arch | tr '[:lower:]' '[:upper:]')
	printf "choice\n" > $topdir/target/$arch/Config.in.arch
	printf "prompt \"Embedded system\"\n" >> $topdir/target/$arch/Config.in.arch
	printf "depends on ADK_TARGET_ARCH_$ARCH\n" >> $topdir/target/$arch/Config.in.arch
	printf "source target/$arch/Config.in.systems\n" >> $topdir/target/$arch/Config.in.arch
	printf "endchoice\n" >> $topdir/target/$arch/Config.in.arch
	printf "source target/$arch/Config.in.arch\n" >> target/config/Config.in.system.choice
	printf "config ADK_$arch\n" >> target/config/Config.in.arch.default
	printf "\tboolean\n\n" >> target/config/Config.in.arch.default
done

cat >> $topdir/target/config/Config.in.arch.default << EOD
config ADK_TARGET_ARCH
	string
EOD

for arch in $(cat $topdir/target/arch.lst);do
	printf "\tdefault \"$arch\" if ADK_$arch\n" >> target/config/Config.in.arch.default
done

cat > $topdir/target/config/Config.in.arch.choice << EOD
# autogenerated via scripts/create-menu
choice
prompt "Architecture"

EOD

for arch in $(cat $topdir/target/arch.lst);do
	ARCH=$(echo $arch | tr '[:lower:]' '[:upper:]')
	printf "config ADK_TARGET_ARCH_$ARCH\n" >> $topdir/target/config/Config.in.arch.choice
	printf "\tprompt \"$arch system\"\n" >> $topdir/target/config/Config.in.arch.choice
	printf "\tboolean\n" >> $topdir/target/config/Config.in.arch.choice
	printf "\tselect ADK_$arch\n" >> $topdir/target/config/Config.in.arch.choice
	printf "\thelp\n" >> $topdir/target/config/Config.in.arch.choice
	printf "\t  Support for $ARCH systems.\n\n" >> $topdir/target/config/Config.in.arch.choice
done

printf "endchoice\n" >> $topdir/target/config/Config.in.arch.choice
exit 0
