lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
#!/bin/sh

if test $# -ne 0; then
    case $1 in
        develop)
	    echo Preparing to build developmental version of MudOS driver ...
	    OPTIMIZE="-Wall -Wundef -DPEDANTIC -pedantic -Wmissing-declarations"
	    DEBUG="-g -DDEBUG -DDEBUG_MACRO"
            ;;
        debug)
	    echo Preparing to build debugging version of MudOS driver ...
	    OPTIMIZE=
	    DEBUG="-g -DDEBUG"
            ;;
        *)
	    echo Unknown build type
	    exit 1
            ;;
    esac
else
    echo Preparing to build standard MudOS driver ...
fi

# If this is uncommented, the specified 'make' is used instead of looking for
# one 
#MAKE=make

# define this to be where you want the temporary compiled files to go
# (only used with GNU make)
OBJDIR=obj

# change this if you wish the driver binary to be named something else
DRIVER_BIN=driver

# uncomment PROOF if using CenterLine's TestCenter to debug the driver.
#PROOF=proof

# Set INSTALL_DIR to the directory where you want to install the executables.
INSTALL_DIR="../etc"

#Enable warnings from the compiler (gcc), if wanted.
#WARN=-Wall
 
#Use this with gcc if you have lots of RAM, speeds up compile
#PIPE=-pipe

# define profiling if you want it
# note: the gmon.out file will likely be written in the mudlib dir.
# PROFILE_ON controls whether or not monitoring is active at driver
# startup.  Comment PROFILE_ON to make profiling not active at startup.
# Use moncontrol(1) efun to enable profiling and moncontrol(0) to turn
# it off.
#PROFILE_ON="-DPROFILE_ON"
# Uncomment this if you want to enable profiling of the driver (gcc)
#PROFIL="-pg -DPROFILING $(PROFILE_ON)"
 
# Enable run time debugging
#DEBUG="-g"
# With extra driver debug code
#DEBUG="-g -DDEBUG" 
# For DEC Alpha: to have optimization and debugging
#DEBUG="-g3 -DDEBUG"
# Prevent -DDEBUG from aborting the driver (when in -DDEBUG mode)
#DEBUG_NON_FATAL="-DDEBUG_NON_FATAL"
# Compile in debug() macro code
#DEBUG_MACRO="-DDEBUG_MACRO"
 
# define this if you want to specify (compiler) optimization.
# 
# if nothing is defined here, and DEBUG is not defined, something appropriate
# to the compiler in question is used.
#
# *WARNING* using high levels of optimization (e.g. -O3) can cause some
# compilers to produce incorrect code.  If the driver is behaving
# inexplicably, try using a lower level of optimization (or none).
#
# Uncomment one or none of the following optimization lines.
#
# -O is usually a safe level of optimization for most compilers
#OPTIMIZE="-O"
# high optimization for gcc:
#OPTIMIZE="-O2 -fstrength-reduce"
# uncomment below for RS/6000(AIX) xlc compiler only.
# remove the -Q if xlc complains.
#OPTIMIZE="-O -Q"
# might need this one with newer versions of AIX (ie 3.2.4)
#OPTIMIZE="-O -Q -qMAXMEM=16000"
# high optimization for HP-UX 7.x/8.x's cc (don't use with 9.x)
#OPTIMIZE="+O3 +Obb3000"
# MIPS R3000 running EP/IX Version 1.4.3. Compiler is RISCompiler C 2.11 (cc).
#OPTIMIZE="-Olimit 1802"
# DEC Alpha's cc's highest optimization: -O5
#OPTIMIZE="-O -Olimit 2000"
# DEC Ultrix's cc's highest optimization:
#OPTIMIZE="-O2 -Olimit 5000"
# high optimization for cc on SGI
#OPTIMIZE="-O2 -Olimit 2500"
 
# System V Release 4 (386/486 or if using Sun's cc under Solaris 2.x)
# ARCH: need a way to detect this
#OSFLAGS=-DSVR4

# MIPS R3000 running EP/IX Version 1.4.3. Compiler is RISCompiler C 2.11 (cc).
# ARCH: this one too
#OSFLAGS=-I/usr/include/bsd

# Solaris (SunOS 5): for BSD compatible ioctl()
# If using CC=cc, you can also add:
#      -w     to turn off warnings, in order to get a cleaner compile
# For 5.4, also add the following:
#      -I/usr/bsdinclude
# ARCH: anyone figured a good hack to detect this one yet?
#OSFLAGS="-DBSD_COMP -DSunOS_5"

# SCO 3.2v4.2
# ARCH: *sigh* and this one ...
#OSFLAGS=-DSCO

# try uncommenting this if you are using gcc and at runtime you see socket
# errors saying that the "set socket nonblocking" operation is not supported.
# That error is caused by old-style macros (that gcc doesn't normally grok)
# used by ioctl on some systems.
#NEED_OLD_CPP=-traditional-cpp

# Location of libmsgql.a, if you are using PACKAGE_DB
#EXTRALIBS=-L/usr/local/lib -lmsql

####### END OF USER CONFIGURABLE OPTIONS

echo "Trying out some stuff to see what works; ignore errors ..."

# Mac OS X needs this in order to build properly
if test "`uname`" = "Darwin"; then
    NEED_OLD_CPP=-traditional-cpp
fi

#
# Determine if running under Cygwin-32 and use a.exe instead
# of a.out if so
#
if test "`uname|cut -c-6`" = "CYGWIN"; then
  A_OUT=a.exe
  echo Using a.exe for Cygwin GNU compiler default executable
else
  A_OUT=a.out 
  echo Using standard a.out for compiler default executable
fi
 

# 
# Figure out what make is, and how to invoke it
# 
if test "${MAKE-x}" = "x"; then
    gmake nothing
    if test $? -eq 0; then
        MAKE=gmake
        MAKEFILE=GNUmakefile
    else
        make nothing
        if test $? -eq 0; then
            MAKE=make
            tmp=`make which_makefile 2>/dev/null | grep -v echo`
            if test "x$tmp" = "xMakeIsGNU"; then
                MAKEFILE=GNUmakefile
            else
                MAKEFILE=Makefile
		OBJDIR=
            fi
        else
            echo 'FATAL ERROR: Cannot find make or gmake'
            exit
        fi
    fi
else
    tmp=`make which_makefile 2>/dev/null | grep -v echo`
    if test "x$tmp" = "xMakeIsGNU"; then
        MAKEFILE=GNUmakefile
    else
        MAKEFILE=Makefile
	OBJDIR=
    fi
fi

echo MAKE=$MAKE >Makefile.tmp

#
# Figure out what to use for CC
#
cat >comptest.c <<END
int main() {
}
END
xlc comptest.c
if test $? -eq 0; then
    CC=xlc
    if test "${DEBUG-x}" = "x"; then
        OPTIMIZE=${OPTIMIZE-"-O3 -Q -qMAXMEM=16000"}
    fi
else
    gcc comptest.c
    if test $? -eq 0; then
        CC=gcc
        if test "${DEBUG-x}" = "x"; then
            OPTIMIZE=${OPTIMIZE-"-O2 -fstrength-reduce"}
        fi
	GNUC=1
	CCFLAGS=-D__USE_FIXED_PROTOTYPES__
    else
        clcc comptest.c
        if test $? -eq 0; then
            CC=clcc
            if test "${DEBUG-x}" = "x"; then
                OPTIMIZE=${OPTIMIZE-"-O"}
            fi
        else
            cc comptest.c
            if test $? -eq 0; then
                CC=cc
                if test "${DEBUG-x}" = "x"; then
                    OPTIMIZE=${OPTIMIZE-"-O"}
		    cat >comptest.c <<END
#ifndef __GNUC__
Oh darn it's not gcc
#endif
END
		    cc comptest.c
		    if test $? -eq 0; then
			OPTIMIZE=${OPTIMIZE-"-O2 -fstrength-reduce"}
			GNUC=1
		    fi
                fi
            else
                echo "FATAL ERROR: Cannot find a C compiler"
                exit
            fi
        fi
    fi
fi

#
# are we using gcc on a 486?
#
if test $GNUC; then
    tmp=`uname -m`
    if test "x$tmp" = "xi486" -o "x$tmp" = "xi586"; then
        OPTIMIZE="$OPTIMIZE -m486"
    fi
fi

#
# Figure out how to run CPP
#

cat >comptest.c <<END
#define foo
Make this fail if we actually get compiled
END
$CC -E comptest.c >/dev/null
if test $? -eq 0; then
    CPP="$CC -E $NEED_OLD_CPP"
else
    cpp comptest.c >/dev/null
    if test $? -eq 0; then
        CPP="cpp"
    else
        $CC -E -traditional-cpp comptest.c >/dev/null
	if test $? -eq 0; then
	    CPP="$CC -E -traditional-cpp"
	else
	    echo "FATAL ERROR: Can't figure out how to run the C preprocessor"
            exit
	fi
    fi
fi

#
# Figure out what to use for install
#
mkdir tmp
cat >insttest <<END
whatever
END
rm tmp/insttest
install -f insttest tmp
if test $? -eq 0 && test -f tmp/insttest; then
    INSTALL="install -f"
else
    rm tmp/insttest
    install -c insttest tmp
    if test $? -eq 0 && test -f tmp/insttest; then
       INSTALL="install -c"
    else
       INSTALL="cp"
    fi
fi

cat >comptest.c <<END
void foo() { }
END
$CC -c comptest.c -o comptest.o

#
# Check if ranlib exists/is needed.  Also check ar.
#
cat >comptest.c <<END
int if_you_are_reading_this_you_must_be_bored() { return 1; }
END
$CC -c comptest.c

ar rcu comptest.a comptest.o
if test $? -ne 0; then
    echo "FATAL ERROR: Could not find ar."
    exit
fi
ranlib comptest.a
if test $? -eq 0; then
    RANLIB=ranlib    
else
    RANLIB=/bin/true
fi

#
# Find yacc/bison/byacc
#
cat >comptest.y <<END
%token FOO
%%
all: FOO
END
bison comptest.y
if test $? -eq 0 && test $CC != "xlc"; then
    YACC="bison -d -y"
else
    byacc comptest.y
    if test $? -eq 0; then
        YACC="byacc -d"
    else
        yacc comptest.y
        if test $? -eq 0; then
            YACC="yacc -d"
        else
            echo "FATAL ERROR: Could not find bison or yacc."
            exit
        fi
    fi
fi

# Some of these are probably unnecessary
CFLAGS="$CCFLAGS $OSFLAGS $WARN $PROFIL $DEBUG $DEBUG_MACRO $DEBUG_NON_FATAL $STR $PIPE $NEED_OLD_CPP $EXPORT_DYNAMIC"

#
# Determine system type
#
cat >comptest.c <<END
#include <stdio.h>
#include "arch.h"
int main() {
    printf("%s\n", ARCH);
}
END
$CC $CFLAGS comptest.c
ARCH=`./$A_OUT`

cat >comptest.c <<END
int main(int argc, char **argv) { return 0; }
END

case $ARCH in
    AIX)
        OSFLAGS="$OSFLAGS -D_BSD -D_ALL_SOURCE"
	CFLAGS="$CFLAGS -D_BSD -D_ALL_SOURCE"
        ;;    
    Solaris)
	OSFLAGS="$OSFLAGS -DSunOS_5"
	CFLAGS="$CFLAGS -DSunOS_5"
	;;
    Linux*)
        EXPORT_DYNAMIC=-rdynamic
	;;
    FreeBSD)
	cc -export-dynamic comptest.c
	if test $? -eq 0; then
	    EXPORT_DYNAMIC=-export-dynamic
	else
	    cc -rdynamic comptest.c
	    if test $? -eq 0; then
		EXPORT_DYNAMIC=-rdynamic
	    fi
	fi
	;;
esac

#
# check for some missing functions
#
rm $A_OUT
cat >comptest.c <<END
int main() {
strchr(0,0); strrchr(0,0);
}
END
$CC $CFLAGS comptest.c
if test ! -f $A_OUT; then
    STR="-Dstrchr=index -Dstrrchr=rindex"
fi

rm $A_OUT
cat >comptest.c <<END
int main() {
memcpy(0,0,0);memset(0,0,0);strtol(0,0,0);strcspn(0,0);
}
END
$CC $CFLAGS comptest.c
if test ! -f $A_OUT; then
    STRFUNCS=strfuncs.o
fi

CFLAGS="$CCFLAGS $OSFLAGS $WARN $PROFIL $DEBUG $DEBUG_MACRO $DEBUG_NON_FATAL $STR $PIPE $NEED_OLD_CPP $INCLUDE $EXPORT_DYNAMIC"
if test ! "$OBJDIR" = ""; then
    mkdir $OBJDIR
fi

echo SHELL=/bin/sh >>Makefile.tmp
echo OBJDIR=$OBJDIR >>Makefile.tmp
echo DRIVER_BIN=$DRIVER_BIN >>Makefile.tmp
echo PROOF=$PROOF >>Makefile.tmp
echo STRFUNCS=$STRFUNCS >>Makefile.tmp
echo INSTALL=$INSTALL >>Makefile.tmp
echo INSTALL_DIR=$INSTALL_DIR >>Makefile.tmp
echo OPTIMIZE=$OPTIMIZE >>Makefile.tmp
echo CPP=$CPP >>Makefile.tmp
echo CFLAGS=$CFLAGS >>Makefile.tmp
echo CC=$CC >>Makefile.tmp
echo YACC=$YACC >>Makefile.tmp
echo RANLIB=$RANLIB >>Makefile.tmp
echo A=a >>Makefile.tmp
echo O=o >>Makefile.tmp

echo "***************** Configuration completed **************"
echo "Installing MudOS on $ARCH"
echo
echo "Using $INSTALL to install binaries in $INSTALL_DIR."
echo "Using $CPP for preprocessing."
echo "Using $CC $CFLAGS $OPTIMIZE to compile."
echo "Using $YACC $YFLAGS to make the compiler."
echo "Edit $MAKEFILE if this is not what you want"
echo
echo "Otherwise, type '$MAKE' to build MudOS, then '$MAKE install'."

cat Makefile.tmp ${MAKEFILE}.in >$MAKEFILE
rm Makefile.tmp

if test $MAKEFILE = Makefile; then
cat >GNUmakefile <<END
all:
	@echo MudOS is currently configured to use 'Makefile'.  Edit 'build.MudOS'
	@echo if this is not what you want.

.DEFAULT:
	@echo MudOS is currently configured to use 'Makefile'.  Edit 'build.MudOS'
	@echo if this is not what you want.

nothing:

which_makefile:
	echo MakeIsGNU
END
else
cat >Makefile <<END
all:
	@echo MudOS is currently configured to use 'GNUmakefile'.  Edit 'build.MudOS'
	@echo if this is not what you want.

.DEFAULT:
	@echo MudOS is currently configured to use 'GNUmakefile'.  Edit 'build.MudOS'
	@echo if this is not what you want.

nothing:

which_makefile:
	echo MakeIsMake
END
fi