#!/bin/sh
##       _________ __                 __                               
##      /   _____//  |_____________ _/  |______     ____  __ __  ______
##      \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
##      /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ \ 
##     /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
##             \/                  \/          \//_____/            \/ 
##  ______________________                           ______________________
##			  T H E   W A R   B E G I N S
##	   Stratagus - A free fantasy real time strategy game engine
##
##	setup		-	Configure Rules.make (GNU MAKE rules).
##
##	(c) Copyright 2000-2003 by Dan Hensley, Nehal Mistry.
##	Optimization section by Patrick McFarland.
##
##	Stratagus is free software; you can redistribute it and/or modify
##	it under the terms of the GNU General Public License as published
##	by the Free Software Foundation; only version 2 of the License.
##
##	Stratagus is distributed in the hope that it will be useful,
##	but WITHOUT ANY WARRANTY; without even the implied warranty of
##	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##	GNU General Public License for more details.
##
##	$Id$
##
##-----------------------------------------------------------------------------
##	HERE ARE SOME USER-CONFIGURABLE VARIABLES

EXTRA_CFLAGS="$CFLAGS -DUNIT_ON_MAP -DNEW_AI -DUSE_LIBMODPLUG -DUSE_HP_FOR_XP"
EXTRA_LDFLAGS="$LDFLAGS"

## These could be used for experimental versions
## ---------------------------------------------
## SLOW_INPUT		If you have problems that events aren't fetched.
## BPP8_*               Only for X11 8bpp common palette:
##   BPP8_NORMAL          disables default, like other Xbpp (delivers errors)
##   BPP8_WINSAFE         Uses a windows safe palette instead.
##   BPP8_IRGB            Uses a palette based on 4x4x4 RGB in 4 intensities
## There are some still not well tested code parts or branches.
## UNIT_ON_MAP		Fast lookup of units
## UNITS_ON_MAP		Faster lookup of units
## NEW_AI		New better improved AI code
## USE_TILECACHE	Faster tile drawing, costs memory.
## USE_SMART_TILECACHE	Faster tile drawing, slow with hardware video memory.
## USE_HP_FOR_XP	Use hit-points for XP calculations.
## USE_LIBMODPLUG	Use modplug audio player support.
## USE_FLAC		Use flac audio player support (asked by setup).
## USE_OGG		Use ogg audio player support (asked by setup).
## USE_MAD		Use mad mp3 audio player support (asked by setup).
## These aren't working yet:
## NEW_MAPDRAW		Stephans new map draw code (value>1 shows update)
## USE_FFMPEG		Use ffmpeg video player support.
## NEW_FOW		New fog of war code, should work correct
## NEW_SHIPS		New correct ship movement.
## HIERARCHIC_PATHFINDER	Use hierarchic pathfinder
## USE_LUA		Lua scripting support

##-----------------------------------------------------------------------------

# if your system/distribution lacks libpng, you may install the source
# in the stratagus directory and name that directory here!
# Default (tested) version is 1.0.12, anything above should also be ok.
# Adjust as required - ignored if the directory does not exist.
LOCAL_PNG="libpng-1.0.12"

# Please note that on most systems libpng also requires libz, so
# you might additionally need to install the following:

# if your system/distribution lacks libz, you may install the source
# in the stratagus directory and name that directory here!
# Default (tested) version is 1.1.4, anything above should also be ok.
# Adjust as required - ONLY USED IF SYSTEM HAS NO ZLIB INSTALLED BY DEFAULT!
LOCAL_ZLIB="zlib-1.1.4"

BEOS_CONFIGFILE=/boot/home/config/settings/Stratagus/Stratagus.cfg

##-----------------------------------------------------------------------------
## Everything below this line should only be changed by Stratagus developers.

if [ "`echo $* | grep \"\-\-win32\"`" = "" ]; then
  RULESFILE=Rules.make
  DEPEND=depend
else
  RULESFILE=Rules.make.WIN32
  DEPEND=win32new
  CROSS=" win32"
fi

if [ "`read -n 1 -t 0 2>&1 | grep e`x" = "x" ]; then
    N="-n1 -s"
fi

cat << .. > $RULESFILE
##       _________ __                 __                               
##      /   _____//  |_____________ _/  |______     ____  __ __  ______
##      \_____  \\   __\_  __ \__  \\   __\__  \   / ___\|  |  \/  ___/
##      /        \|  |  |  | \// __ \|  |  / __ \_/ /_/  >  |  /\___ \ 
##     /_______  /|__|  |__|  (____  /__| (____  /\___  /|____//____  >
##             \/                  \/          \//_____/            \/ 
##  ______________________                           ______________________
##			  T H E   W A R   B E G I N S
##	   Stratagus - A free fantasy real time strategy game engine
##
..

# Compile commands
CC=gcc
CCLD=$CC
RM="rm -f"
if [ "`uname -a | grep -is bsd` x" != " x" ] ; then
  MAKE=gmake
  EXTRA_CFLAGS="$EXTRA_CFLAGS -DBSD"
else
  MAKE=make
fi
if [ "`uname -a | grep -is bsd` x" != " x" ] ; then
  DL=
else
  DL=-ldl
fi

#------------------------------------------------------------------------------
# DON'T CHANGE ANYTHING FROM HERE DOWN UNLESS YOU KNOW WHAT YOU ARE DOING

VERSION="-DVERSION=\"1.18\""
UNIX=0
BEOS=0
WIN32=0
DARWIN=0

# Choose optimization level
#DEBUG_CFLAGS="-g -O0 -fsigned-char \$(PROFILE) -pipe -Wall -Werror \$(IFLAGS) \$(DFLAGS)"
DEBUG_CFLAGS="-g -O1 -fsigned-char -Wall -Werror \$(IFLAGS) \$(DFLAGS)"
#-- Production (default)
CFLAGS="-O2 -pipe -fsigned-char -fomit-frame-pointer -fconserve-space -fexpensive-optimizations -ffast-math  \$(IFLAGS) \$(DFLAGS)"
#-- High Optimization
HIGHOPT="-O3 -pipe -fsigned-char -fomit-frame-pointer -foptimize-sibling-calls -ffast-math -fstrength-reduce -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fdelete-null-pointer-checks -fexpensive-optimizations -fschedule-insns2 -funroll-loops -frename-registers -fno-cprop-registers \$(IFLAGS) \$(DFLAGS)"

#------------------------------------------------------------------------------
# Function declarations

check_for_libs() {

  TEMPFILE=temp$$
  cat << "  EOF" > $TEMPFILE.c
  int main(){ int i; }
  EOF
  if test "`cc -o $TEMPFILE.a -w $TEMPFILE.c $LIBCHECK -L/usr/local/lib 2>&1` x" = " x" ; then
    rm -f $TEMPFILE.[coa] > /dev/null 2>&1
    return 0
  elif test "`gcc -o $TEMPFILE.a -w $TEMPFILE.c $LIBCHECK -L/usr/local/lib 2>&1` x" = " x" ; then
    rm -f $TEMPFILE.[coa] > /dev/null 2>&1
    return 0
  else
    rm -f $TEMPFILE.[coa] > /dev/null 2>&1
    return 1
  fi
}

#------------------------------------------------------------------------------
# Parse input arguments

while test $# != 0 ; do
  case $1 in
    "-?"|"--help")
      echo
      echo "usage: setup [--static] [--unix] [--beos] [--win32] [--darwin] [--debug] [--profile]"
      echo
      echo "Setup will create a Rules.make file (or Rules.make.WIN32"
      echo "if --win32 forced) that Stratagus needs to compile."
      echo "Supported command-line arguments (you may use more than one at a time):"
      echo "  static  : Compile Stratagus using static libraries (default dynamic)"
      echo "  unix    : Force Unix/Linux compile options (default auto check)"
      echo "  beos    : Force BeOS compile options (default auto check)"
      echo "  win32   : Force WIN32 compile options (default auto check)"
      echo "  darwin  : Force Darwin compile options (default auto check)"
      echo "  debug   : Compile with debug options (default no)"
      echo "  profile : Compile with profile support (default off)"
      echo
      exit
      ;;

    "--static")
      STATIC=-static
      ;;

    "--unix")
      UNIX=1
      BEOS=0
      WIN32=0
      DARWIN=0
      ;;

    "--beos")
      UNIX=0
      BEOS=1
      WIN32=0
      DARWIN=0
      ;;

    "--win32")
      UNIX=0
      BEOS=0
      WIN32=1
      DARWIN=0
      ;;

    "--darwin")
      UNIX=0
      BEOS=0
      WIN32=0
      DARWIN=1
      ;;

    "--profile")
      PROFILE=-pg
      ;;

    "--debug")
      CFLAGS=$DEBUG_CFLAGS
      DEBUG=1
      ;;

    *)
      echo "Unknown command-line option '$1'"
      exit

  esac

  shift
done

#
# Display banner

cat $RULESFILE
echo >> $RULESFILE
echo

#------------------------------------------------------------------------------
# Determine if this is for UNIX, BEOS, or WIN32

if [ "$UNIX" != "1" ] ; then
  if [ "$BEOS" != "1" ] ; then
    if [ "$WIN32" != "1" ] ; then
      if [ "$DARWIN" != "1" ] ; then

if [ "$WIN32" = "0" ] ; then
  if [ "`uname | grep -is cygwin` x" != " x" ] \
  || [ "`uname | grep -is MINGW` x" != " x" ] ; then
    UNIX=0
    BEOS=0
    WIN32=1
    DARWIN=0
    echo "It appears that you are in a Cygwin/win32 environment..."
    echo "Use --darwin, --unix or --beos to override"
  fi
fi

if [ "$BEOS" = "0" ] ; then
  if [ "`uname -a | grep -is beos` x" != " x" ] ; then
    UNIX=0
    BEOS=1
    WIN32=0
    DARWIN=0
    echo "It appears that you are in a BeOS environment..."
    echo "Use --darwin, --unix or --win32 to override"
  fi
fi

if [ "$DARWIN" = "0" ] ; then
  if [ "`uname -a | grep -is darwin` x" != " x" ] ; then
    DARWIN=1
    UNIX=0
    BEOS=0
    WIN32=0
    CC=cc
    CCLD=c++
   CFLAGS="-O2 -pipe -fomit-frame-pointer -fconserve-space -fexpensive-optimizations -ffast-math  \$(IFLAGS) \$(DFLAGS) -traditional-cpp"
   HIGHOPT="$HIGHOPT -traditional-cpp"
   DEBUG_CLAGS="$HIGHOPT -traditional-cpp"
    echo "It appears that you are in a Darwin environment..."
    echo "Use --beos, --win32 or --unix to override"
  fi
fi

if [ "$UNIX" = "0" ] ; then
  if [ "$BEOS" = "0" ] ; then
    if [ "$WIN32" = "0" ] ; then
      if [ "$DARWIN" = "0" ] ; then
        UNIX=1
	BEOS=0
        WIN32=0
	DARWIN=0
	echo "It appears that you are in a UNIX environment..."
	echo "Use --beos or --win32 or --darwin to override"
      fi
    fi
  fi
fi

fi
fi
fi
fi

echo

#------------------------------------------------------------------------------
#       libpng support part
#------------------------------------------------------------------------------

echo -n "Checking for PNG library..."

# libpng most likely requires libz.a, so check for it first..
LIBCHECK="-lz"; check_for_libs
if test "$?" = 0 ; then
  HAVE_LIBZ=1
  PNG_EXTRA="-lz"
else
  LIBCHECK="-lz -L./$LOCAL_ZLIB"; check_for_libs
  if test "$?" = 0 ; then
    HAVE_LIBZ=2
    PNG_EXTRA="$LIBCHECK"
  fi
fi

PNG_PATH="-L/usr/local/lib"
PNG_LOCAL=0
if test -d $LOCAL_PNG ; then
    PNG_PATH="-L./\$LOCAL_PNG"
    PNG_LOCAL=1
fi
LIBCHECK="$PNG_PATH -lpng $PNG_EXTRA"; check_for_libs
if test "$?" = 0 ; then
  if test "$PNG_LOCAL" = 1 ; then
    echo " OK (local: $LOCAL_PNG)";
  else
    echo " OK";
  fi
else
# Newer libpng (1.2.5 up) may need pow() from libm
  LIBCHECK="$PNG_PATH -lpng $PNG_EXTRA -lm"; check_for_libs
  if test "$?" = 0 ; then
    PNG_EXTRA="$PNG_EXTRA -lm"
    if test "$PNG_LOCAL" = 1 ; then
      echo " OK (local: $LOCAL_PNG)";
    else
      echo " OK";
    fi
  else
    echo " NOT FOUND!";
    echo
    echo "...You do not appear to have a working PNG library installed!"
    echo
    echo "libpng is required for stratagus to compile. Please "
    echo "refer to the LOCAL_PNG section in the setup script to "
    echo "find out how to install a local copy to compile stratagus."
    echo
    echo "Please also note that the PNG library most likely also"
    echo "requires the GZIP compression library. If you are sure"
    echo "to have libpng installed, but this test still fails,"
    echo "check out for libz. You may refer to the LOCAL_ZLIB"
    echo "section of this script to find out how to install a local"
    echo "local copy of the libz."
    echo

    exit 1
  fi
fi

#------------------------------------------------------------------------------
#       Compile commands
#------------------------------------------------------------------------------

echo "# Compile commands" >> $RULESFILE
echo "CC=$CC" >> $RULESFILE
echo "CCLD=$CCLD" >> $RULESFILE
echo "RM=$RM" >> $RULESFILE
echo "MAKE=$MAKE" >> $RULESFILE
echo >> $RULESFILE

#------------------------------------------------------------------------------
#	Install part
#------------------------------------------------------------------------------

if [ "$WIN32" = "0" ] ; then
  echo "# Prefix for 'make install'" >> $RULESFILE
  echo "PREFIX=${PREFIX-/usr/local}" >> $RULESFILE
  echo >> $RULESFILE
fi

#------------------------------------------------------------------------------
#       SIOD support part
#------------------------------------------------------------------------------

echo "# Use SIOD support" >> $RULESFILE
if [ "$BEOS" != "1" ] ; then
  if [ "$DARWIN" != "1" ] ; then
    echo "CCL		= -DUSE_CCL" >> $RULESFILE
    echo "CCLLIB		= -lm" >> $RULESFILE
  else
    echo "CCL             = -DUSE_CCL" >> $RULESFILE
    echo "CCLLIB		= -dl" >> $RULESFILE
  fi
else
  echo "CCL             = -DUSE_CCL -DUSE_BEOS" >> $RULESFILE
  echo "CCLLIB		=" >> $RULESFILE
fi
echo >> $RULESFILE

#------------------------------------------------------------------------------
#	Video driver part
#------------------------------------------------------------------------------

# Check for various libraries
echo
echo "Checking for various video libraries..."

# Check for SDL >= 1.x
if [ "`uname -a | grep -is freebsd` x" != " x" ] ; then
  SDL_CONFIG=sdl11-config
else
  SDL_CONFIG=sdl-config
fi
if test "$($SDL_CONFIG --version 2>/dev/null)x" = "x" ; then
  echo "...You do not appear to have SDL installed"
else
  HAVESDL=1
fi

if [ "$BEOS" != "1" ] ; then

if [ "$DARWIN" != "1" ] && [ "$WIN32" != "1" ] ; then
  # Check for SVGALIB
  LIBCHECK="-lvga -lvgagl"
  check_for_libs
  if test "$?" = 0 ; then
    HAVESVGA=1
  else
    echo "...You do not appear to have SVGALIB installed"
  fi
fi

if test "$WIN32" = 0 ; then
  echo
  echo "VIDEO DRIVER OPTIONS"
  echo "  X - X11 Support"

  if test "$HAVESDL" = 1 ; then
    echo "  S - SDL Support"
  fi
  if test "$HAVESVGA" = 1 ; then
    echo "  V - SVGALIB Support"
  fi
  if (test "$HAVESVGA" = 1 && test "$HAVESDL" = 1) ; then
    echo "  B - SDL/SVGALIB Support"
  fi
  echo
  echo -n "Please enter selection: (s) "
  read $N VIDSEL
  echo
fi

else

if [ "$HAVESDL" = 1 ] ; then
  VIDSEL="S"
else
  echo "Stratagus on BeOS currently only supports SDL for video"
  echo "Please install SDL and try again."
  exit -1
fi

fi

#

echo "# Video support" >> $RULESFILE
case $VIDSEL in
  [vV])
	echo "-> Using SVGALIB"
	echo "VIDEO		= -DUSE_SVGALIB" >> $RULESFILE
	echo "VIDEOLIB	= -lvga $DL" >> $RULESFILE
	;;

  [bB])
	echo "-> Using SDL/SVGALIB"
  	USESDL=1
	SDLLIB="\$(shell $SDL_CONFIG --libs)"
	echo "SDL		= -DUSE_SDL -DUSE_SDLA \$(SDL_CFLAGS)" >> $RULESFILE
	echo "SDL_CFLAGS	= \$(shell $SDL_CONFIG --cflags)" >> $RULESFILE
	echo "SDLLIB		= $SDLLIB" >> $RULESFILE
	echo >> $RULESFILE
	echo "VIDEO		= \$(SDL)" >> $RULESFILE
	echo "VIDEOLIB	= \$(SDLLIB) -lvga -lvgagl $DL" >> $RULESFILE
	echo
	;;

  [xX])
	echo "-> Using X11"
	echo "VIDEO           = -DUSE_X11" >> $RULESFILE
	echo "VIDEOLIB        = -lXext -lX11 $DL" >> $RULESFILE
	;;

  *)
	echo -n "-> Using SDL"
  	USESDL=1
	SDLLIB="\$(shell $SDL_CONFIG --libs)"
	echo "SDL		= -DUSE_SDL -DUSE_SDLA \$(SDL_CFLAGS)" >> $RULESFILE
	echo "SDL_CFLAGS	= \$(shell $SDL_CONFIG --cflags)" >> $RULESFILE

	if test "$STATIC x" != " x" ; then
	    SDLLIB="\$(shell $SDL_CONFIG --static-libs)"
	fi

	echo "SDLLIB		= $SDLLIB" >> $RULESFILE
	echo >> $RULESFILE
	if [ "$WIN32" = "0" ]; then
	    echo "VIDEO             = \$(SDL)" >> $RULESFILE
	    if [ "$BEOS" != "1" ] ; then
	        echo "VIDEOLIB	= \$(SDLLIB) $DL" >> $RULESFILE
	    else
		echo "VIDEOLIB	= \$(SDLLIB)" >> $RULESFILE
	    fi
	fi
	echo
	;;

esac

# Put in Cygwin/win32 stuff if necessary, and test for mingw32

if test "$WIN32" = "1" ; then
	echo "VIDEO		= -DUSE_WIN32 \$(SDL)" >> $RULESFILE
	if test "`gcc -v 2>&1 | grep -is mingw32` x" = " x" ; then
	  echo "VIDEOLIB	= \$(SDLLIB) -lwsock32 -lws2_32" >> $RULESFILE
	else
	  echo "VIDEOLIB	= \$(SDLLIB) -lwsock32 -lws2_32 -lmingwex -lgmon" >> $RULESFILE
	fi
fi

echo >> $RULESFILE

#------------------------------------------------------------------------------
#	Sound part
#------------------------------------------------------------------------------

echo
echo -n "Do you want to compile with sound? (y) "
read $N ANSWER
echo
case $ANSWER in
  [nN])
	echo "-> No sound support"
	;;

  *)
	echo "-> Compiling with sound support"
	echo "# Sound support" >> $RULESFILE
	echo "DSOUND		= -DWITH_SOUND" >> $RULESFILE

	# Check for arts client
	if [ "$WIN32" = "1" ]; then
	  test
	elif [ "`artsc-config --version 2>/dev/null` x" = " x" ] ; then
	  echo
	  echo "-> You do not appear to have the arts client installed"
	else
	  echo
	  echo -n "Do you want use arts daemon sound output? (n) "
	  read $N ANSWERA
	  echo
	  case $ANSWERA in
	    [yY])
		HAVEARTS=1
		echo "ARTSC		= -DWITH_ARTSC \$(shell artsc-config --cflags)" >> $RULESFILE
		echo "ARTSCLIB	= \$(shell artsc-config --libs)" >> $RULESFILE
		echo "-> Compiling with arts daemon support"
		;;
	    *)
		echo "-> No arts daemon support"
		;;
	  esac
	  echo
	fi

	if (test "$USESDL" != 1 -a "$HAVEARTS" != 1) ; then
	  # Check for libpthread
	  LIBCHECK="-lpthread"
	  check_for_libs
	  if test "$?" = 0 ; then
	    echo
	    echo "THREAD		= -D_REENTRANT -DUSE_THREAD" >> $RULESFILE
	    if [ "`uname -a | grep -is bsd x` " != " x" ] ; then
		echo "THREADLIB   = -pthread" >> $RULESFILE
	    else
		echo "THREADLIB   = -lpthread" >> $RULESFILE
	    fi
	  fi
	fi

	LIBCHECK="-lFLAC -lm"; check_for_libs
	if test "$?" = 0 ; then 
	echo -n "Would you like FLAC support? (n) "
	read $N ANSWER
	echo
	case $ANSWER in 
	    [yY])
		echo "FLAC		= -DUSE_FLAC" >> $RULESFILE
		echo "FLACLIB		= -lFLAC" >> $RULESFILE
		echo "-> Compiling with FLAC support"
		;;
	    *)
		echo "-> No FLAC support"
		;;
	esac
	else
	echo "-> libFLAC not found"
	fi
	echo
	
	LIBCHECK="-lvorbisfile -lvorbis -logg"; check_for_libs
	if test "$?" = 0 ; then 
	echo -n "Would you like OGG support? (n) "
	read $N ANSWER
	echo
	case $ANSWER in 
	    [yY])
		echo "OGG		= -DUSE_OGG" >> $RULESFILE
		echo "OGGLIB		= -lvorbisfile -lvorbis -logg" >> $RULESFILE
		echo "-> Compiling with OGG support"
		;;
	    *)
		echo "-> No OGG support"
		;;
	esac
	else
	LIBCHECK="-lvorbisfile"; check_for_libs
	echo -n "-> "
	if test "$?" != 0 ; then
	echo -n "libvorbisfile "
	fi
	LIBCHECK="-lvorbis"; check_for_libs
	if test "$?" != 0 ; then
	echo -n "libvorbis "
	fi
	LIBCHECK="-logg"; check_for_libs
	if test "$?" != 0 ; then
	echo -n "libogg "
	fi
	echo "not found"
	fi
	echo
	
	LIBCHECK="-lmad"; check_for_libs
	if test "$?" = 0 ; then 
	echo -n "Would you like MAD MP3 support? (n) "
	read $N ANSWER
	echo
	case $ANSWER in 
	    [yY])
		echo "MAD		= -DUSE_MAD" >> $RULESFILE
		echo "MP3LIB		= -lmad" >> $RULESFILE
		echo "-> Compiling with MAD MP3 support"
		;;
	    *)
		echo "-> No MAD MP3 support"
		;;
	esac
	else
	echo "-> libmad not found"
	fi
	echo

	echo "CD AUDIO OPTIONS"
	echo "  I - Internal/libcda driver (recommended)"
	if test "$HAVESDL" = "1" ; then
	echo "  S - SDL driver (known to have problems with some drives)"
	fi
	if test "$UNIX" = "1" ; then
	echo "  C - CDDA driver"
	fi
	echo "  N - None"
	echo
	echo -n "Please enter selection: (n) "
	read $N CDMode
	echo
	case $CDMode in
	    [sS])
		echo "-> Compiling with SDL cdrom support"
		echo "SDLCD           = -DUSE_SDLCD" >> $RULESFILE
		if [ "$USESDL" != "1" ]; then
		    echo "SDLCD	= $SDLCD \$(shell $SDL_CONFIG --cflags)" >> $RULESFILE
		    echo "STRATAGUS_LIBS	= \$(shell $SDL_CONFIG --libs)" >> $RULESFILE
		fi
		;;
	    [iI])
		echo "-> Compiling with internal (libcda) cdrom support"
		echo "LIBCDA          = -DUSE_LIBCDA" >> $RULESFILE
		;;
	    [cC])
		echo "-> Compiling with CDDA cdrom support"
		echo "CDDA	= -DUSE_CDDA" >> $RULESFILE
		;;
	    *)
		echo "-> No cdrom support"
		;;
	esac
	
  ;;
esac

echo >> $RULESFILE
echo

#------------------------------------------------------------------------------
#	Compression options part
#------------------------------------------------------------------------------

# Check for compression libraries
echo "Checking for compression libraries..."
echo

# libbz2
LIBCHECK="-lbz2"; check_for_libs
if test "$?" = 0 ; then HAVE_LIBBZ2=1; fi

# libzzip
LIBCHECK="-lzzip"; check_for_libs
if test "$?" = 0 ; then HAVE_LIBZZIP=1; fi

# Determine default compression option based on what's available

if (test "$HAVE_LIBZ" = 1 -o "$HAVE_LIBZ" = 2 && test "$HAVE_LIBBZ2" = 1) ; then
  DEF4=" (default)"; COMPDEF="O"
elif test "$HAVE_LIBBZ2" = 1 ; then
  DEF3=" (default)"; COMPDEF="B"
elif test "$HAVE_LIBZ" = 1 -o "$HAVE_LIBZ" = 2 ; then
  DEF2=" (default)"; COMPDEF="G"
else
  DEF1=" (default)"; COMPDEF="N"
fi

# Display menu

echo "COMPRESSION OPTIONS"
echo "  N - None"$DEF1
if test "$HAVE_LIBZ" = 1 ; then
  echo "  G - GZ"$DEF2
fi
if test "$HAVE_LIBZ" = 2 ; then
  echo "  G - GZ"$DEF2 " (local: $LOCAL_ZLIB)"
fi
if test "$HAVE_LIBBZ2" = 1 ; then
  echo "  B - Bzip2"$DEF3
fi
if (test "$HAVE_LIBZ" = 1 -o "$HAVE_LIBZ" = 2 && test "$HAVE_LIBBZ2" = 1) ; then
  echo "  O - Both GZ and Bzip2"$DEF4
fi
if (test "$HAVE_LIBZ" = 1 -o "$HAVE_LIBZ" = 2 && test "$HAVE_LIBBZ2" = 1 && test "$HAVE_LIBZZIP" = 1 ) ; then
  echo "  A- All ZZip and GZ and Bzip2"$DEF5
fi
echo
echo -n "Please enter selection ($COMPDEF): "
read $N COMPOPT
echo

if test "$COMPOPT x" = " x" ; then COMPOPT=$COMPDEF; fi

echo "# Compression support" >> $RULESFILE

case $COMPOPT in
  [nN])
	echo "-> Using no compression"
	echo "ZDEFS		=" >> $RULESFILE
	echo "ZLIBS		=" >> $RULESFILE
	;;

  [bB])
	echo "-> Using Bzip2 compression"
	echo "ZDEFS		= -DUSE_BZ2LIB" >> $RULESFILE
	echo "ZLIBS		= -lbz2" >> $RULESFILE
	;;

  [oO])
	echo "-> Using GZ and Bzip2 compression"
	echo "ZDEFS		= -DUSE_ZLIB -DUSE_BZ2LIB" >> $RULESFILE
	echo "ZLIBS		= -lz -lbz2" >> $RULESFILE
	;;
  [aA])
	echo "-> Using GZ, Bzip2, ZZip  compression"
	echo "ZDEFS		= -DUSE_ZZIPLIB -DUSE_ZLIB -DUSE_BZ2LIB" >> $RULESFILE
	echo "ZLIBS		= -lzzip -lz -lbz2" >> $RULESFILE
	;;

  *)
	echo "-> Using GZ compression"
	echo "ZDEFS		= -DUSE_ZLIB" >> $RULESFILE
	echo "ZLIBS		= -lz" >> $RULESFILE
	;;

esac
echo "" >> $RULESFILE

#------------------------------------------------------------------------------
#	Optimization Section
#------------------------------------------------------------------------------

if [ "$DEBUG" != 1 ] ; then
    echo
    echo "Debug Support allows you to debug Stratagus more easily, but disables a lot of"
    echo "optimization support, which may cause Stratagus to run much slower."
    echo
    echo -n "Would you like debug support? (n): "
    read $N DEBUGASK
    case $DEBUGASK in
	[yY])
	    echo
	    echo "-> Debug support enabled"
	    CFLAGS=$DEBUG_CFLAGS
	    DEBUG=1
	    ;;
	[nN])
	    echo
	    echo "-> Debug support disabled."
	    ;;
    esac
fi


CCVERS=`$CC -dumpversion`
CCMAJOR=`echo $CCVERS | cut -d. -f 1`
CCMINOR=`echo $CCVERS | cut -d. -f 2`
CCREALLYMINOR=`echo $CCVERS | cut -d. -f 3`

if [ $CCMAJOR -gt 3 -o $CCMAJOR -eq 3 -a $CCMINOR -ge 2 ] ; then
if [ "$DEBUG" != 1 ] && [ "$WIN32" != 1 ]; then
    echo
    echo "OPTIMIZATION OPTIONS"
    echo
    echo Compiler is $CC $CCMAJOR.$CCMINOR.$CCREALLYMINOR
    echo
    echo "This autoconfiguring program allows you to tell GCC to use different"
    echo "optimizations, based on how stable you want Stratagus. The higher the"
    echo "optimization, the more unstable Stratagus is. High Optimization also"
    echo "may cause Stratagus to fail to compile, but usually doesnt. High"
    echo "Optimization will also increase compile times."
    echo
    echo "Which Optimization Mode do you wish to use?"
    echo
    echo " N - Normal Optimization, used in Production Binaries."
    echo " H - High Optimization, not recommended."
    echo
    echo -n "Please enter selection (n): "
    read $N OPTASK
    case $OPTASK in
	[hH])
	    echo
	    echo "-> Using high optimization."
	    CFLAGS="$HIGHOPT"
	    ;;
	*)
	    echo
	    echo "-> Using normal optimization."
	    ;;
    esac
    case $OPTASK in
	[hH])
	    echo
	    echo "Specific Processor Optimization:"
	    echo
	    echo "You can additionally optimize Stratagus, depending on what architecture" 
	    echo "(target machine) you run. If you dont know, or your target"
	    echo "machine isnt listed, simply press enter."
	    echo
	    echo "  I - Pentium, Pentium MMX, Pentium Pro Pentium 2, Pentium 3, Pentium 4,"
	    echo "	Celeron"
	    echo "  A - AMD K6, K6-2, K6-3, Athlon, Ahtlon Thunderbird, Athlon 4,"
	    echo "	Athlon XP, Athlon MP, Duron"
	    echo
	    echo -n "Please enter selection: "
	    read $N TYPEASK
	    echo
	    case $TYPEASK in
		[iI])
		    CFLAGS="$CFLAGS -fno-branch-count-reg"
		    echo
		    echo "Choose one:"
		    echo
		    echo "  A - Pentium"
		    echo "  B - Pentium MMX"
		    echo "  C - Pentium Pro"
		    echo "  D - Pentium 2 or Celeron/Celeron A"
		    echo "  E - Pentium 3 or Celeron with Coppermine Core"
		    echo "  F - Pentium 4"
		    echo
		    echo -n "To choose none, press enter: "
		    read $N PROCASK
		    case $PROCASK in
			[aA])
			    CFLAGS="$CFLAGS -march=pentium -malign-double -mpreferred-stack-boundary=3"
			    ;;
			[bB])
			    CFLAGS="$CFLAGS -march=pentium-mmx -malign-double -mmmx -mpreferred-stack-boundary=3"
			    ;;
			[cC])
			    CFLAGS="$CFLAGS -march=pentiumpro -malign-double -mpreferred-stack-boundary=3"
			    ;;
			[dD])
			    CFLAGS="$CFLAGS -march=pentium2 -mmmx"
			    ;;
			[eE])
			    CFLAGS="$CFLAGS -march=pentium3 -mmmx -msse -mpreferred-stack-boundary=4 -mfpmath=sse,387"
			    ;;
			[fF])
			    CFLAGS="$CFLAGS -march=pentium4 -mmmx -msse -msse2 -mpreferred-stack-boundary=4 -mfpmath=sse,387"
			    ;;
		    esac
		    echo
		    ;;
		[aA])
		    CFLAGS="$CFLAGS -fno-branch-count-reg"
		    echo
		    echo "Choose one:"
		    echo
		    echo "  A - K6"
		    echo "  B - K6-2"
		    echo "  C - K6-3"
		    echo "  D - Athlon or Duron (Choose this one if you dont know)"
		    echo "  E - Athlon or Duron /w Thunderbird Core"
		    echo "  F - Athlon 4"
		    echo "  G - Athlon XP"
		    echo "  H - Athlon MP"
		    echo
		    echo "To choose none, just press enter."
		    echo -n "Please enter selection: "
		    read $N PROCASK
		    case $PROCASK in
			[aA])
			    CFLAGS="$CFLAGS -march=k6 -malign-double"
			    ;;
			[bB])
			    CFLAGS="$CFLAGS -march=k6-2 -m3dnow -mmmx -malign-double"
			    ;;
			[cC])
			    CFLAGS="$CFLAGS -march=k6-3 -m3dnow -mmmx -malign-double"
			    ;;
			[dD])
			    CFLAGS="$CFLAGS -march=athlon -m3dnow -mmmx -malign-double"
			    ;;
			[eE])
			    CFLAGS="$CFLAGS -march=athlon-tbird -m3dnow -mmmx -malign-double"
			    ;;
			[fF])
			    CFLAGS="$CFLAGS -march=athlon-4 -m3dnow -mmmx -msse -malign-double -mfpmath=sse,387 -mpreferred-stack-boundary=4"
			    ;;
			[gG])
			    CFLAGS="$CFLAGS -march=athlon-xp -m3dnow -mmmx -msse -malign-double -mfpmath=sse,387 -mpreferred-stack-boundary=4"
			    ;;
			[hH])
			    CFLAGS="$CFLAGS -march=athlon-mp -m3dnow -mmmx -msse -malign-double -mfpmath=sse,387 -mpreferred-stack-boundary=4"
			    ;;
		    esac
		    ;;
	    esac
	    ;;
    esac
fi
fi
if [ $CCMAJOR -ne 3 -o $CCMAJOR -eq 3 -a $CCMINOR -ne 2 ] ; then
    if [ "$DEBUG" != 1 ] && [ "$WIN32" != 1 ]; then
	echo
	echo Compiler is $CC $CCMAJOR.$CCMINOR.$CCREALLYMINOR
	echo
	echo "Optimization Menu Disabled: Not running GCC 3.2.x"
 	echo "-> Using Normal Optimization"
    fi
fi
#------------------------------------------------------------------------------
# End Optimization Setion
#------------------------------------------------------------------------------

###############################################################################
# Write required information to the file

# May be required on some (older) distributions for libpng and libz!
# extra linker flags and include directory
# -L/usr/lib

LOCAL_LDF=""
LOCAL_IF=""
if test "$HAVE_LIBZ" = 2 ; then
  LOCAL_LDF=" -L\$(TOPDIR)/$LOCAL_ZLIB"
  LOCAL_IF="-I\$(TOPDIR)/$LOCAL_ZLIB"
  if test "$DARWIN" = 1 ; then
    LOCAL_IF="-I\$(TOPDIR)/$LOCAL_ZLIB -I/usr/include -I/usr/include/machine"
  fi
else
  if test "$DARWIN" = 1 ; then
    LOCAL_IF="-I/usr/include -I/usr/include/machine " $LOCAL_IF
  fi
fi

LDF_PNG_PATH=""
IF_PNG_PATH=""
if test "$PNG_LOCAL" = 1 ; then
    LDF_PNG_PATH="-L\$(TOPDIR)/$LOCAL_PNG "
    IF_PNG_PATH="-I\$(TOPDIR)/$LOCAL_PNG "
fi

if [ "$WIN32" = "0" ] ; then
    echo "XLDFLAGS	= -L/usr/X11R6/lib -L/usr/local/lib $LDF_PNG_PATH $LOCAL_LDF" >> $RULESFILE
    echo "XIFLAGS		= -I/usr/X11R6/include $IF_PNG_PATH $LOCAL_IF" >> $RULESFILE
else
    echo "XLDFLAGS"	= >> $RULESFILE
    echo "XIFLAGS"	= >> $RULESFILE
fi

echo >> $RULESFILE

# Add the last bits
# below this, nothing should be changed!

echo "#####################################################################" >> $RULESFILE
echo "# Don't change anything below here unless you know what you're doing!" >> $RULESFILE
echo >> $RULESFILE

echo "VERSION=	'$VERSION'" >> $RULESFILE
echo "PROFILE=$PROFILE" >> $RULESFILE
echo >> $RULESFILE

if [ "$BEOS" != 1 ] ; then
  if [ "$DARWIN" != 1 ] ; then
    # Libraries needed to build tools
    echo "TOOLLIBS=\$(XLDFLAGS) -lpng -lz -lm \$(THREADLIB)" >> $RULESFILE

    # Libraries needed to build stratagus
    echo "STRATAGUS_LIBS=$STRATAGUS_LIBS \$(XLDFLAGS) -lpng -lz -lm \\" >> $RULESFILE
    echo "	\$(THREADLIB) \$(CCLLIB) \$(VIDEOLIB) \$(ZLIBS) \\" >> $RULESFILE
    echo "	\$(ARTSCLIB) \$(FLACLIB) \$(OGGLIB) \$(MP3LIB) \\" >> $RULESFILE
    echo "	$EXTRA_LDFLAGS -lz -lm" >> $RULESFILE
  else
    # Libraries needed to build tools
    echo "TOOLLIBS=\$(XLDFLAGS) -lpng -lz \$(THREADLIB)" >> $RULESFILE

    # Libraries needed to build stratagus
    echo "STRATAGUS_LIBS=\$(XLDFLAGS) -lpng -lz \\" >> $RULESFILE
    echo "	\$(THREADLIB) \$(CCLLIB) \$(VIDEOLIB) \$(ZLIBS)" >> $RULESFILE
  fi
else
  # Libraries needed to build tools
  echo "TOOLLIBS=\$(XLDFLAGS) -lpng -lz \$(THREADLIB)" >> $RULESFILE

  # Libraries needed to build stratagus
  echo "STRATAGUS_LIBS=\$(XLDFLAGS) -lpng -lz \\" >> $RULESFILE
  echo "	\$(THREADLIB) \$(CCLLIB) \$(VIDEOLIB) \$(ZLIBS)" >> $RULESFILE
fi


echo "DISTLIST=\$(TOPDIR)/distlist" >> $RULESFILE
echo "TAGS=\$(TOPDIR)/src/tags" >> $RULESFILE

echo >> $RULESFILE
# WIN32
if test "$WIN32" = 1 ; then
  echo "# Win32" >> $RULESFILE
  echo "EXE=.exe" >> $RULESFILE
  echo "OUTFILE=\$(TOPDIR)/stratagus\$(EXE)" >> $RULESFILE
  echo "ARCH=win32" >> $RULESFILE
  echo "OE=o" >> $RULESFILE
  echo "OBJDIR=winobj" >> $RULESFILE
else
# LINUX
  echo "# Linux" >> $RULESFILE
  echo "EXE=" >> $RULESFILE
  echo "OUTFILE=\$(TOPDIR)/stratagus" >> $RULESFILE
  echo "ARCH=linux" >> $RULESFILE
  echo "OE=o" >> $RULESFILE
  echo "OBJDIR=obj" >> $RULESFILE
fi

#------------------------------------------------------------------------------
# architecture-dependent objects

echo >> $RULESFILE
echo "#ARCHOBJS=stdmman.\$(OE) svgalib.\$(OE) unix_lib.\$(OE) bitm_lnx.\$(OE)" >> $RULESFILE

# include flags
echo "IFLAGS=	-I\$(TOPDIR)/src/include \$(XIFLAGS) -I\$(TOPDIR)/src/movie/vp31/include" >> $RULESFILE

# define flags
if test "$DEBUG" = 1 ; then
  echo "DEBUG=	-DDEBUG #-DFLAG_DEBUG" >> $RULESFILE
fi
echo "DFLAGS=	\$(THREAD) \$(CCL) \$(VERSION) \\" >> $RULESFILE
echo "	\$(VIDEO) \$(ZDEFS) \$(DSOUND) \\" >> $RULESFILE
echo "	\$(DEBUG) \$(SDLCD) \$(LIBCDA) \$(CDDA) \\" >> $RULESFILE
echo -n "	\$(ARTSC) \$(FLAC) \$(OGG) \$(MAD) " >> $RULESFILE

echo "" >> $RULESFILE

echo "CFLAGS=$CFLAGS $STATIC $EXTRA_CFLAGS $PROFILE" >> $RULESFILE

## JOHNS: my ctags didn't support
#CTAGSFLAGS=-i defmpstuvFS -a -f

echo "CTAGSFLAGS=-i defptvS -a -f " >> $RULESFILE
echo >> $RULESFILE

#
#	Locks versions with symbolic name

echo "# Locks versions with a symbolic name" >> $RULESFILE
echo "LOCKVER=	rcs -q -n\$(NAME)" >> $RULESFILE
echo >> $RULESFILE

if [ -f .depend ]; then rm .depend; fi

#------------------------------------------------------------------------------

#
# Source code documentation

echo "# Source code documentation" >> $RULESFILE

echo "DOXYGEN=	doxygen" >> $RULESFILE

echo "DOCIFY=		docify" >> $RULESFILE
echo "DOCPP=		doc++" >> $RULESFILE
# Still didn't work
#echo "DOCIFY=		/root/doc++-3.3.11/src/docify" >> $RULESFILE
#echo "DOCPP=		/root/doc++-3.3.11/src/doc++" >> $RULESFILE

echo >> $RULESFILE
echo "%.doc: %.c" >> $RULESFILE
echo "	@\$(TOPDIR)/tools/aledoc \$< | \$(DOCIFY) > \$*-c.doc 2>/dev/null" >> $RULESFILE

echo "%.doc: %.h" >> $RULESFILE
echo "	@\$(TOPDIR)/tools/aledoc \$< | \$(DOCIFY) > \$*-h.doc 2>/dev/null" >> $RULESFILE

#------------------------------------------------------------------------------
# Final comments

echo
echo "Done generating $RULESFILE."
echo
echo -n "Would you like to compile it now? (y) "
read $N ANSWER
echo

case $ANSWER in
 [nN])
 	echo
 	echo "Done generating $RULESFILE. Type '$MAKE $DEPEND && $MAKE$CROSS' to compile stratagus."
	echo
	;;
 *)
	echo
	$MAKE $DEPEND
	$MAKE$CROSS
	;;

esac