#!/bin/sh
#
# Sets up the Allegro package for building with the specified compiler,
# and if possible converting text files to the desired target format.

proc_help()
{
   echo
   echo "Usage: ./fix.sh <platform> [--quick|--dtou|--utod|--utom|--mtou]"
   echo
   echo "Where platform is one of: bcc32, beos, djgpp, mingw32, msvc, qnx, unix"
   echo "mac and watcom."
   echo "The --quick parameter turns of text file conversion, --dtou converts from"
   echo "DOS/Win32 format to Unix, --utod converts from Unix to DOS/Win32 format,"
   echo "--utom converts from Unix to Macintosh format and --mtou converts from"
   echo "Macintosh to Unix format. If no parameter is specified --dtou is assumed."
   echo

   AL_NOCONV="1"
}

proc_fix()
{
   echo "Configuring Allegro for $1..."

   if [ "$2" != "none" ]; then
      echo "# generated by fix.sh" > makefile
      echo "MAKEFILE_INC = $2" >> makefile
      echo "include makefile.all" >> makefile
   fi

   echo "/* generated by fix.sh */" > include/allegro/platform/alplatf.h
   echo "#define $3" >> include/allegro/platform/alplatf.h
}

proc_filelist()
{
   # common files.
   AL_FILELIST=`find . -type f "(" \
      -name "*.c" -o -name "*.cfg" -o -name "*.cpp" -o -name "*.def" -o \
      -name "*.h" -o -name "*.hin" -o -name "*.in" -o -name "*.inc" -o \
      -name "*.m4" -o -name "*.mft" -o -name "*.s" -o -name "*.rc" -o \
      -name "*.spec" -o -name "*.pl" -o -name "*.txt" -o -name "*._tx" -o \
      -name "makefile*" -o -name "*.inl" -o -name "configure" -o \
      -name "CHANGES" -o -name "AUTHORS" -o -name "THANKS" \
   ")"`

   # touch unix shell scripts?
   if [ "$1" != "omit_sh" ]; then
      AL_FILELIST="$AL_FILELIST `find . -type f -name '*.sh'`"
   fi

   # touch DOS batch files?
   if [ "$1" != "omit_bat" ]; then
      AL_FILELIST="$AL_FILELIST `find . -type f -name '*.bat'`"
   fi
}

proc_utod()
{
   echo "Converting files from Unix to DOS/Win32..."
   proc_filelist "omit_sh"
   for file in $AL_FILELIST; do
      echo "$file"
      cp $file _tmpfile
      perl -p -i -e "s/([^\r]|^)\n/\1\r\n/" _tmpfile
      touch -r $file _tmpfile
      mv _tmpfile $file
   done
}

proc_dtou()
{
   echo "Converting files from DOS/Win32 to Unix..."
   proc_filelist "omit_bat"
   for file in $AL_FILELIST; do
      echo "$file"
      mv $file _tmpfile
      tr -d '\015' < _tmpfile > $file
      touch -r _tmpfile $file
      rm _tmpfile
   done
   chmod +x *.sh misc/*.sh misc/*.pl
   if [ -e configure ]; then
      chmod +x configure
   fi
}

proc_utom()
{
   echo "Converting files from Unix to Macintosh..."
   proc_filelist "omit_sh"
   for file in $AL_FILELIST; do
      echo "$file"
      mv $file _tmpfile
      tr '\012' '\015' < _tmpfile > $file
      touch -r _tmpfile $file
      rm _tmpfile
   done
}

proc_mtou()
{
   echo "Converting files from Macintosh to Unix..."
   proc_filelist
   for file in $AL_FILELIST; do
      echo "$file"
      mv $file _tmpfile
      tr '\015' '\012' < _tmpfile > $file
      touch -r _tmpfile $file
      rm _tmpfile
   done
}

# prepare allegro for the given platform.

case "$1" in
   "bcc32"   ) proc_fix "Windows (BCC32)"   "makefile.bcc" "ALLEGRO_BCC32";;
   "beos"    ) proc_fix "BeOS"              "makefile.be"  "ALLEGRO_BEOS";;
   "djgpp"   ) proc_fix "DOS (djgpp)"       "makefile.dj"  "ALLEGRO_DJGPP";;
   "mingw32" ) proc_fix "Windows (Mingw32)" "makefile.mgw" "ALLEGRO_MINGW32";;
   "msvc"    ) proc_fix "Windows (MSVC)"    "makefile.vc"  "ALLEGRO_MSVC";;
   "qnx"     ) proc_fix "QNX"               "makefile.qnx" "ALLEGRO_QNX";;
   "unix"    ) proc_fix "Unix"              "none"         "ALLEGRO_UNIX";;
   "mac"     ) proc_fix "Mac"               "none"         "ALLEGRO_MPW";;
   "watcom"  ) proc_fix "DOS (Watcom)"      "makefile.wat" "ALLEGRO_WATCOM";;
   "help"    ) proc_help;;
   *         ) proc_help;;
esac

# convert all text-file line endings.

if [ "$AL_NOCONV" != "1" ]; then
   case "$2" in
      "--utod"  ) proc_utod;;
      "--dtou"  ) proc_dtou;;
      "--utom"  ) proc_utom;;
      "--mtou"  ) proc_mtou;;
      "--quick" ) echo "No text file conversion...";;
      *         ) proc_dtou;;
   esac
fi

echo "Done!"
