#!/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" # 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 ## This 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: Include new network menues. # Compile commands CC=gcc RM="rm -f" MAKE=make #------------------------------------------------------------------------------ # 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 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 "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 # libz LIBCHECK="-lz"; check_for_libs if test "$?" = 0 ; then HAVE_LIBZ=1; fi # 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 && test "$HAVE_LIBBZ2" = 1) ; then DEF4=" (default)"; COMPDEF="O" elif test "$HAVE_LIBBZ2" = 1 ; then DEF3=" (default)"; COMPDEF="B" elif test "$HAVE_LIBZ" = 1 ; 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_LIBBZ2" = 1 ; then echo " B-Bzip2"$DEF3 fi if (test "$HAVE_LIBZ" = 1 && 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 distributions for libpng and libz! # extra linker flags and include directory # -L/usr/lib if [ "$DARWIN" != 1 ] ; then echo "XLDFLAGS = -L/usr/X11R6/lib -L/usr/local/lib \\" >> $RULESFILE echo " -L\$(TOPDIR)/libpng-1.0.5 -L\$(TOPDIR)/zlib-1.1.3" >> $RULESFILE echo "XIFLAGS = -I/usr/X11R6/include -I/usr/local/include \\" >> $RULESFILE echo " -I\$(TOPDIR)/libpng-1.0.5 -I\$(TOPDIR)/zlib-1.1.3" >> $RULESFILE else echo "XLDFLAGS = -L/usr/X11R6/lib -L/usr/local/lib" >> $RULESFILE echo "XIFLAGS = -I/usr/X11R6/include -I/usr/local/include \\" >> $RULESFILE echo " -I/usr/include -I/usr/include/machine" >> $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 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