#!/bin/sh
#             __________               __   ___.
#   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
#   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
#   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
#   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
#                     \/            \/     \/    \/            \/
# $Id$
#


#
# Begin Function Definitions
#
input() {
    read response
    echo $response
}

whichsim () {

if [ -z "$simver" ]; then

  ##################################################################
  # Figure out win32/x11 GUI
  #
  echo ""
  echo "Build (W)in32 or  (X)11 GUI version? (X)"

  option=`input`;

  case $option in
   [Ww])
     simver="win32"
     ;;
   *)
     simver="x11"
     ;;
   esac
fi
}


simul () {

 ##################################################################
 # Figure out where the firmware code is!
 #

 # a file to check for in the uisimulator root dir
 simfile="$simver/lcd-$simver.c" 

 for dir in uisimulator . .. ../uisimulator ../../uisimulator; do
   if [ -f "$dir/$simfile" ]; then
     simdir="$dir/$simver"
     break
   fi
 done

 if [ -z "$simdir" ]; then
   echo "This script couldn't find your uisimulator/$simver directory. Please enter the"
   echo "full path to your uisimulator/$simver directory here:"

   simdir=`input`
 fi

sed > Makefile \
 -e "s,@SIMDIR@,${simdir},g" \
 -e "s,@TARGET@,${target},g" \
 -e "s,@ARCHOS@,${archos},g" \
 -e "s,@DEBUG@,${debug},g" \
 -e "s,@DISPLAY@,${display},g" \
 -e "s,@KEYPAD@,${keypad},g" \
 -e "s,@PWD@,${pwd},g" \
 -e "s,@LANGUAGE@,${language},g" \
 -e "s,@SIMVER@,${simver},g" \
 -e "s,@EXTRA_DEFINES@,${extra_defines},g" \
<<EOF 
## Automaticly generated. http://rockbox.haxx.se

ARCHOS=@ARCHOS@
SIMDIR=@SIMDIR@
DEBUG=@DEBUG@
TARGET=@TARGET@
DISPLAY=@DISPLAY@
KEYPAD=@KEYPAD@
THISDIR="@PWD@"
SIMVER=@SIMVER@
LANGUAGE=@LANGUAGE@
VERSION=\$(shell date +%y%m%d-%H%M)
EXTRA_DEFINES=@EXTRA_DEFINES@

.PHONY: 

all: sim

sim:
	\$(MAKE) -C \$(SIMDIR) DISPLAY=\$(DISPLAY) KEYPAD=\$(KEYPAD) OBJDIR=\$(THISDIR) VERSION=\$(VERSION) LANGUAGE=\$(LANGUAGE) EXTRA_DEFINES="\$(EXTRA_DEFINES)"

clean:
	\$(MAKE) -C \$(SIMDIR) DISPLAY=\$(DISPLAY) KEYPAD=\$(KEYPAD) OBJDIR=\$(THISDIR) clean

tags:
	@rm -f TAGS
	make -C \$(SIMDIR) DISPLAY=\$(DISPLAY) KEYPAD=\$(KEYPAD) OBJDIR=\$(THISDIR) tags

EOF

  echo "Created Makefile"

  if [ -d "archos" ]; then
    echo "sub directory archos already present"
  else
    mkdir archos
    echo "created an archos subdirectory for simulating the hard disk"
  fi

}

picklang() {
    # figure out which languages that are around
    for file in $appsdir/lang/*.lang; do
        clean=`echo $file | sed -e 's:.*/::g' | cut "-d." -f1`
        langs="$langs $clean"
    done

    num=1
    for one in $langs; do
        echo "$num. $one"
        num=`expr $num + 1`
    done

    read pick
    return $pick;
}

whichlang() {
    num=1
    for one in $langs; do
        if [ "$num" = "$pick" ]; then
            echo $one
            return
        fi
        num=`expr $num + 1`
    done
}


#
# Beging Build Script
#

target=$1
debug=$2

if test "$1" = "--help"; then
  echo "Rockbox configure script."
  echo "Invoke this in a directory to generate a Makefile to build Rockbox"
  echo "Do *NOT* run this within the tools directory!"
  exit
fi

if test -r "configure"; then
 # this is a check for a configure script in the current directory, it there
 # is one, try to figure out if it is this one!

 if { grep "^#   Jukebox" configure >/dev/null 2>&1 ; } then
   echo "WEEEEEEEEP. Don't run this configure script within the tools directory."
   echo "It will only cause you pain and grief. Instead do this:"
   echo ""
   echo " cd .."
   echo " mkdir build-dir"
   echo " cd build-dir"
   echo " ../tools/configure"
   echo ""
   echo "Much happiness will arise from this. Enjoy"
   exit
 fi
fi

if [ "$target" = "--help" -o \
     "$target" = "-h" ]; then
  echo "Just invoke the script and answer the questions."
  echo "This script will write a Makefile for you"
  exit
fi

# get our current directory
pwd=`pwd`;

if [ "$target" = "update" ]; then
  target=""
  if [ -f Makefile ]; then
    if { grep "^## Auto" Makefile >/dev/null 2>&1 ; } then
      echo "Existing generated Makefile found. Getting defaults from it."
      archos=`grep "^ARCHOS=" Makefile | cut -d= -f2-`
      target=`grep "^TARGET=" Makefile | cut -d= -f2-`
      debug=`grep "^DEBUG=" Makefile | cut -d= -f2-`
      language=`grep "^LANGUAGE=" Makefile | cut -d= -f2-`
      extra_defines=`grep "^EXTRA_DEFINES=" Makefile | cut -d= -f2-`

      if [ "$debug" = "SIMULATOR=1" ]; then
        simulator="yes"
        display=`grep "^DISPLAY=" Makefile | cut -d= -f2-`
        keypad=`grep "^KEYPAD=" Makefile | cut -d= -f2-`
        simver=`grep "^SIMVER=" Makefile | cut -d= -f2-`
      fi
    fi
  fi
else

echo "Setup your Rockbox build environment."
echo "http://rockbox.haxx.se/"
echo ""

fi

if [ -z "$archos" ]; then

##################################################################
# Figure out target platform
#

  echo "Enter target platform: (defaults to Recorder)"

  echo "1 - Archos Player/Studio"
  echo "2 - Archos Recorder"
  echo "3 - Archos FM Recorder"

  getit=`input`;

  case $getit in

   1)
    archos="player"
    target="-DARCHOS_PLAYER"
    display="-DHAVE_LCD_CHARCELLS"
    keypad="-DHAVE_PLAYER_KEYPAD"
    ;;

   3)
    archos="fmrecorder"
    target="-DARCHOS_FMRECORDER"
    display="-DHAVE_LCD_BITMAP"
    keypad="-DHAVE_RECORDER_KEYPAD"
    ;;

   *)
    archos="recorder"
    target="-DARCHOS_RECORDER"
    display="-DHAVE_LCD_BITMAP"
    keypad="-DHAVE_RECORDER_KEYPAD"
    ;;

  esac
fi

if [ -z "$extra_defines" ]; then
    if [  "player" != "$archos" ] ; then
        disable_demos="-DDISABLE_NOTHING"
        disable_games=""

        echo "Do you want to use Demos? (Y)"
        getit=`input`;
        if [ "n" = "$getit" -o "N" = "$getit" ] ; then
            disable_demos="-DDISABLE_DEMOS"
        fi
 
        echo "Do you want to play Games? (Y)"
        getit=`input`;
        if [ "n" = "$getit" -o "N" = "$getit" ] ; then
            disable_games=" -DDISABLE_GAMES"
        fi

        extra_defines="$disable_demos$disable_games"
    fi
fi


if [ -z "$debug" ]; then
  ##################################################################
  # Figure out debug on/off
  #
  echo ""
  echo "Build (N)ormal, (D)ebug or (S)imulated version? (N)"

  option=`input`;

  case $option in
    [Ss])
      debug="SIMULATOR=1"
      simulator="yes"
      whichsim
      ;;
    [Dd])
      debug="DEBUG=1"
      ;;
    *)
      debug="NODEBUG=1"
      ;;

  esac
fi

##################################################################
# Figure out where the firmware code is!
#

firmfile="crt0.S" # a file to check for in the firmware root dir

for dir in firmware . .. ../firmware ../../firmware; do
  if [ -f $dir/$firmfile ]; then
    firmdir=$dir
    break
  fi
done

if [ -z "$firmdir" ]; then
  echo "This script couldn't find your firmware directory. Please enter the"
  echo "full path to the firmware directory here:"

  firmdir=`input`
fi

##################################################################
# Figure out where the apps code is!
#

appsfile="credits.c" # a file to check for in the apps root dir

for dir in apps . .. ../apps ../../apps $firmdir/apps $firmdir/../apps; do
    if [ -f $dir/$appsfile ]; then
        appsdir=$dir
        break
    fi
done

if [ -z "$appsdir" ]; then
    echo "This script couldn't find your apps directory. Please enter the"
    echo "full path to the apps directory here:"

    appsdir=`input`
fi

if [ -z "$language" ]; then

    echo "Select a number for the language to use (default is english)"

    picklang
    language=`whichlang`

    if [ -z "$language" ]; then
        # pick a default
        language="english"
    fi
fi

if [ "yes" = "$simulator" ]; then
    # we have already dealt with the simulator Makefile separately
    simul
    exit
fi

sed > Makefile \
 -e "s,@FIRMDIR@,${firmdir},g" \
 -e "s,@APPSDIR@,${appsdir},g" \
 -e "s,@DEBUG@,${debug},g" \
 -e "s,@TARGET@,${target},g" \
 -e "s,@ARCHOS@,${archos},g" \
 -e "s,@LANGUAGE@,${language},g" \
 -e "s,@EXTRA_DEFINES@,${extra_defines},g" \
 -e "s,@PWD@,${pwd},g" \
<<EOF 
## Automaticly generated. http://rockbox.haxx.se

FIRMDIR=@FIRMDIR@
APPSDIR=@APPSDIR@
DEBUG=@DEBUG@
ARCHOS=@ARCHOS@
TARGET=@TARGET@
THISDIR="@PWD@"
LANGUAGE=@LANGUAGE@
VERSION=\$(shell date +%y%m%d-%H%M)

EXTRA_DEFINES=@EXTRA_DEFINES@
.PHONY: firmware apps

all: firmware apps

firmware:
	\$(MAKE) -C \$(FIRMDIR) TARGET=\$(TARGET) \$(DEBUG) OBJDIR=\$(THISDIR) EXTRA_DEFINES="\$(EXTRA_DEFINES)"

apps:
	\$(MAKE) -C \$(APPSDIR) TARGET=\$(TARGET) \$(DEBUG) OBJDIR=\$(THISDIR) VERSION=\$(VERSION) LANGUAGE=\$(LANGUAGE) EXTRA_DEFINES="\$(EXTRA_DEFINES)"

clean-firmware:
	\$(MAKE) -C \$(FIRMDIR) TARGET=\$(TARGET) OBJDIR=\$(THISDIR) clean

clean-apps:
	\$(MAKE) -C \$(APPSDIR) TARGET=\$(TARGET) OBJDIR=\$(THISDIR) clean

clean:
	\$(MAKE) clean-firmware clean-apps

tags-firmware:
	\$(MAKE) -C \$(FIRMDIR) TARGET=\$(TARGET) OBJDIR=\$(THISDIR) tags

tags-apps:
	\$(MAKE) -C \$(APPSDIR) TARGET=\$(TARGET) OBJDIR=\$(THISDIR) tags

tags:
	@rm -f TAGS
	\$(MAKE) tags-firmware tags-apps
EOF

echo "Created Makefile"
