#!/bin/sh RULESFILE=Rules.make BEOS_CONFIGFILE=/boot/home/config/settings/FreeCraft/FreeCraft.cfg cat << .. > $RULESFILE ## ___________ _________ _____ __ ## \_ _____/______ ____ ____ \_ ___ \____________ _/ ____\/ |_ ## | __) \_ __ \_/ __ \_/ __ \/ \ \/\_ __ \__ \\ __\\ __\ ## | \ | | \/\ ___/\ ___/\ \____| | \// __ \| | | | ## \___ / |__| \___ >\___ >\______ /|__| (____ /__| |__| ## \/ \/ \/ \/ \/ ## ______________________ ______________________ ## T H E W A R B E G I N S ## FreeCraft - A free fantasy real time strategy game engine ## .. ## setup - Configure Rules.make (GNU MAKE rules). ## ## (c) Copyright 2000,2001 by Dan Hensley ## ## $Id$ ## #------------------------------------------------------------------------------ # HERE ARE SOME USER-CONFIGURABLE VARIABLES EXTRA_CFLAGS="-DSLOW_INPUT -DUNIT_ON_MAP -DNEW_SHIPS -DNEW_NETMENUS" # This could be used for experimental versions ## There are some still not well tested code parts or branches. ## UNITS_ON_MAP: Faster lookup of units ## NEW_MAPDRAW: Stephans new map draw code ## These aren't working yet: ## NEW_NAMES: New unit names without copyleft problems ## NEW_FOW: New fog of war code, should work correct ## NEW_AI: New better improved AI code ## NEW_SHIPS: New correct ship movement. ## NEW_NETMENUS: Menu driven network set-up. # Compile commands CC=gcc RM="rm -f" MAKE=make # if your system/distribution lacks libpng, you may install the source # in the freecraft directory and name that directory here! # Default (tested) version is 1.0.5, anything above should also be ok. # Adjust as required - ignored if the directory does not exist. LOCAL_PNG="libpng-1.0.5" # 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 freecraft directory and name that directory here! # Default (tested) version is 1.1.3, anything above should also be ok. # Adjust as required - ONLY USED IF SYSTEM HAS NO ZLIB INSTALLED BY DEFAULT! LOCAL_ZLIB="zlib-1.1.3" #------------------------------------------------------------------------------ # DON'T CHANGE ANYTHING FROM HERE DOWN UNLESS YOU KNOW WHAT YOU ARE DOING VERSION="-DVERSION=\"1.17pre1-build12\"" UNIX=0 BEOS=0 WIN32=0 DARWIN=0 # Choose optimization level #DEBUG_CFLAGS="-g -O0 \$(PROFILE) -pipe -Wall -Werror \$(IFLAGS) \$(DFLAGS)" DEBUG_CFLAGS="-g -O1 -Wall -Werror \$(IFLAGS) \$(DFLAGS)" #-- Production (default) CFLAGS="-O2 -pipe -fomit-frame-pointer -fconserve-space -fexpensive-optimizations -ffast-math \$(IFLAGS) \$(DFLAGS)" #------------------------------------------------------------------------------ # Function declarations function check_for_libs() { TEMPFILE=temp$$ cat << " EOF" > $TEMPFILE.c int main(){ int i; } EOF if test "`cc -o $TEMPFILE.a -w $TEMPFILE.c $LIBCHECK 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 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 that Freecraft needs to compile." echo "Supported command-line arguments (you may use more than one at a time):" echo " static : Compile Freecraft 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; 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" ] ; 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 CFLAGS="-O2 -pipe -fomit-frame-pointer -fconserve-space -fexpensive-optimizations -ffast-math \$(IFLAGS) \$(DFLAGS) -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="" 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 echo " NOT FOUND!"; echo echo "...You do not appear to have a working PNG library installed!" echo echo "libpng is required for freecraft 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 freecraft." 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 #------------------------------------------------------------------------------ # Compile commands #------------------------------------------------------------------------------ echo "# Compile commands" >> $RULESFILE echo "CC=$CC" >> $RULESFILE echo "RM=$RM" >> $RULESFILE echo "MAKE=$MAKE" >> $RULESFILE echo >> $RULESFILE #------------------------------------------------------------------------------ # 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 test "$(sdl-config --version 2>/dev/null)" = "1.*" ; then echo "...You do not appear to have SDL installed" else HAVESDL=1 fi if [ "$BEOS" != "1" ] ; then if [ "$DARWIN" != "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 echo echo "VIDEO DRIVER OPTIONS" echo if test "$WIN32" = "0" ; then echo " X-X11 Support (default)" fi 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: " read VIDSEL else if [ "$HAVESDL" = 1 ] ; then VIDSEL="S" else echo "FreeCraft 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 [sS]) 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="$SDLLIB -lesd" fi echo "SDLLIB = $SDLLIB" >> $RULESFILE echo >> $RULESFILE echo "VIDEO = \$(SDL)" >> $RULESFILE if [ "$BEOS" != "1" ] ; then echo "VIDEOLIB = \$(SDLLIB) -ldl" >> $RULESFILE else echo "VIDEOLIB = \$(SDLLIB)" >> $RULESFILE fi echo ;; [vV]) echo "Using SVGALIB" echo "VIDEO = -DUSE_SVGALIB" >> $RULESFILE echo "VIDEOLIB = -lvga" >> $RULESFILE ;; [bB]) echo -n "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 if test "$STATIC x" != " x" ; then SDLLIB="$SDLLIB -lesd" fi echo "SDLLIB = $SDLLIB" >> $RULESFILE echo >> $RULESFILE echo "VIDEO = \$(SDL)" >> $RULESFILE echo "VIDEOLIB = \$(SDLLIB) -lvga -lvgagl -ldl" >> $RULESFILE echo ;; *) echo "Using X11" echo "VIDEO = -DUSE_X11" >> $RULESFILE echo "VIDEOLIB = -lXext -lX11 -ldl" >> $RULESFILE ;; esac echo "" >> $RULESFILE # # 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)" >> $RULESFILE else echo "VIDEOLIB = \$(SDLLIB) -lwsock32 -Wl,--stack,33554432" >> $RULESFILE fi fi #------------------------------------------------------------------------------ # Sound part #------------------------------------------------------------------------------ echo echo -n "Do you want to compile with sound? (y) " read ANSWER case $ANSWER in [nN]) echo "No sound support" ;; *) echo "Compiling with sound support" echo "# Sound support" >> $RULESFILE echo "DSOUND = -DWITH_SOUND" >> $RULESFILE if ! test "$USESDL" = 1 ; then # Check for libpthread LIBCHECK="-lpthread" check_for_libs if test "$?" = 0 ; then echo "Assuming you have a thread-safe X11 (libc6 or glibc)," echo -n "do you want to compile with threaded sound? (n) " read ANSWER2 case $ANSWER2 in [yY]) echo "THREAD = -D_REENTRANT -DUSE_THREAD" >> $RULESFILE echo "THREADLIB = -lpthread" >> $RULESFILE ;; esac fi fi 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 if test "$WIN32" = 1 ; then HAVE_LIBBZ2=0; fi # Bzip2 not supported by Cygwin # 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 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 echo echo -n "Please enter selection ($COMPDEF): " read COMPOPT 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 ;; *) echo "Using GZ compression" echo "ZDEFS = -DUSE_ZLIB" >> $RULESFILE echo "ZLIBS = -lz" >> $RULESFILE ;; esac echo "" >> $RULESFILE ############################################################################### # 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 echo "XLDFLAGS = -L/usr/X11R6/lib -L/usr/local/lib $LDF_PNG_PATH $LOCAL_LDF" >> $RULESFILE echo "XIFLAGS = -I/usr/X11R6/include -I/usr/local/include $IF_PNG_PATH $LOCAL_IF" >> $RULESFILE 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 if [ "$WIN32" = "0" ] ; then echo "VERSION= '$VERSION'" >> $RULESFILE fi 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 freecraft echo "CLONELIBS=\$(XLDFLAGS) -lpng -lz -lm \\" >> $RULESFILE echo " \$(THREADLIB) \$(CCLLIB) \$(VIDEOLIB) \$(ZLIBS)" >> $RULESFILE else # Libraries needed to build tools echo "TOOLLIBS=\$(XLDFLAGS) -lpng -lz \$(THREADLIB)" >> $RULESFILE # Libraries needed to build freecraft echo "CLONELIBS=\$(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 freecraft echo "CLONELIBS=\$(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)/freecraft\$(EXE)" >> $RULESFILE echo "ARCH=win32" >> $RULESFILE echo "OE=o" >> $RULESFILE else # LINUX echo "# Linux" >> $RULESFILE echo "EXE=" >> $RULESFILE echo "OUTFILE=\$(TOPDIR)/freecraft" >> $RULESFILE echo "ARCH=linux" >> $RULESFILE echo "OE=o" >> $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)" >> $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 -n " \$(DEBUG)" >> $RULESFILE echo echo -n "Are you using the WarCraft 2 Expansion CD? (n): " read YESORNO if [ "$YESORNO" = "Y" -o "$YESORNO" = "y" ] ; then echo -n " -DHAVE_EXPANSION" >> $RULESFILE fi echo "" >> $RULESFILE echo "CFLAGS=$CFLAGS $STATIC $EXTRA_CFLAGS" >> $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 #------------------------------------------------------------------------------ echo "%.o: %.c" >> $RULESFILE echo " \$(CC) -c \$(CFLAGS) \$< -o \$@" >> $RULESFILE echo " @ar cru \$(TOPDIR)/src/libclone.a \$@" >> $RULESFILE if [ "$DARWIN" = "1" ] ; then echo " ranlib \$(TOPDIR)/src/libclone.a" >> $RULESFILE fi # # Source code documentation echo >> $RULESFILE 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 Rules.make." echo -n "Would you like to compile it now? (y) " read ANSWER case $ANSWER in [nN]) echo echo "Done generating Rules.make. Type 'make' to compile!" ;; *) make depend make ;; esac