untermud/DOC/
untermud/DOC/U/
untermud/DOC/U/U-examples/
untermud/DOC/internals/
untermud/DOC/wizard/
untermud/MISC/
untermud/MISC/dbchk/
untermud/RWHO/
untermud/RWHO/rwhod/
# Untermud makefile 
CC = gcc 
AR = ar
YACC = yacc

# If you don't have or care to use lint/splint set this to nothing
LINT =
#LINT = splint

# The suffix appended to executables.  
# This should be set for Cygwin and Windows.
EXE = .exe
#EXE =

#the value of FLAGS is passed to CFLAGS (incl. in subdirs)
CFLAGS = -g -O2 -pipe -Wall -W -Wno-parentheses -Wno-unused 
LDFLAGS = -g 

# Include directories 
INCS = -I./ -I./U

# See LINT above - these flags for splint
LINTFLAGS = $(INCS) -weak -warnposixheaders +relaxtypes -retvalother

# LIBS may be defined to be any other system libraries you may require
# old dbm not in libc requires '-ldbm'. To use Berkely DBM require '-ldb'.
LIBS = -lgdbm -lgdbm_compat

#if building with combat, include this
#COMBAT=
COMBAT = combat.c

HDR = config.h mud.h comp.h vars.h look.h match.h cmd.h sbuf.h trans.h sym.h xact.h \
	combat.h os.h
SRC = mud.c $(COMBAT) cron.c net.c do_go.c do_look.c login.c trans.c version.c \
	run.c sym.c activ.c vars.c cmd.c xact.c xmit.c cache.c bool.c util.c \
	match.c obj.c sbuf.c list.c rot.c alloc.c errors.c misc2.c misc.c os.c
# .o versions of above
OBJ = $(SRC:.c=.o)
XTRA = README README_2.0a README_COMBAT CHANGES COPYRIGHT Makefile INSTALL_NOTES \
       untermud-2.4-orig.tar.gz makefile.bor makefile.vc \
       bootup buildh buildd buildg bootup.cmd buildh.cmd buildd.cmd buildg.cmd

CMDLIB = CMD/libcmd.a
CMDSRC = CMD/_dump.c CMD/_echo.c CMD/_wall.c CMD/_force.c CMD/_if.c CMD/_mark.c \
	CMD/_rand.c CMD/build.c CMD/destroy.c CMD/do.c CMD/drop.c CMD/examine.c \
	CMD/go.c CMD/inv.c CMD/kill.c CMD/look.c CMD/news.c CMD/page.c \
	CMD/passwd.c CMD/quit.c CMD/read.c CMD/say.c CMD/take.c CMD/use.c \
	CMD/which.c CMD/telep.c CMD/wear.c CMD/whisper.c CMD/wizard.c
CMDOBJ = $(CMDSRC:.c=.o)
CMDXTRA = CMD/README

DBLIB = DB/libdb.a
DBSRC = DB/oif.c DB/expr.c DB/dbmchunk.c DB/dbmconf.c DB/gdbmchunk.c \
	DB/gdbmconf.c DB/hashconf.c DB/hashdir.c
DBOBJ = $(DBSRC:.c=.o)
DBXTRA = DB/README DB/dumpdb.c DB/loaddb.c DB/comp.c DB/bigrams.c \
	DB/config DB/startup DB/minimal_db.oif
DBUTIL = misc.o alloc.o obj.o sbuf.o list.o


ULIB = U/libu.a
UHDR = U/u.h
USRC = U/bltin.c U/uinterp.y U/u_util.c U/b_cmd.c U/b_echo.c U/b_err.c \
	U/b_lst.c U/b_match.c U/b_misc.c U/b_int.c U/b_oid.c U/b_rnd.c \
	U/b_time.c U/b_str.c
UOBJ = U/bltin.o U/uinterp.o U/u_util.o U/b_cmd.o U/b_echo.o U/b_err.o \
	U/b_lst.o U/b_match.o U/b_misc.o U/b_int.o U/b_oid.o U/b_rnd.o \
	U/b_time.o U/b_str.o
UXTRA = U/README

MISCSRC = MISC/bonk.c MISC/oif2set.c
MISCOBJ = $(MISCSRC:.c=.o)
MISCXTRA = $(MISCSRC:.c=.doc)
MISCDBCHKSRC = MISC/dbchk/dbchk.c MISC/dbchk/dbchk_cache.c
MISCDBCHKOBJ = $(MISCDBCHKSRC:.c=.o)

#if building without RWHO support, change RWHOLIB to nothing:
#RWHOLIB =
RWHOLIB = RWHO/librwho.a
RWHOHDR = RWHO/rwho.h
RWHOSRC = RWHO/updat.c RWHO/clilib.c 
RWHOOBJ = $(RWHOSRC:.c=.o)
RWHOXTRA = RWHO/mudwho.c RWHO/mwhoforvm RWHO/HOW_TO RWHO/rwhodoc RWHO/README

# RWHO daemon
RWHOD = RWHO/rwhod
RWHODSRC = $(RWHOD)/mwhod.c
RWHODOBJ = $(RWHODSRC:.c=.o)
RWHODXTRA = $(RWHOD)/mwhod.doc $(RWHOD)/README

OTHER = DOC/* HELP/* MISC/oifextract/* 

# Files in the standard distribution
DISTFILES = $(SRC) $(HDR) $(XTRA) $(CMDSRC) $(CMDXTRA) $(DBSRC) $(DBXTRA) \
	$(UHDR) $(USRC) $(UXTRA) $(RWHOHDR) $(RWHOSRC) $(RWHOXTRA) $(RWHODSRC) \
	$(RWHODXTRA) $(OTHER) $(MISCSRC) $(MISCXTRA) $(MISCDBCHKSRC) 
PDIST = $(patsubst %,untermud/%,$(DISTFILES))
RELEASE = dist

# Dependency information
OBJDEPENDS = $(OBJ) $(CMDOBJ) $(DBOBJ) $(UOBJ) $(RWHOOBJ) \
	DB/dumpdb.o DB/loaddb.o DB/comp.o DB/bigrams.o \
	RWHO/mudwho.o $(MISCOBJ) $(MISCDBCHKOBJ) $(RWHODOBJ)

ALLLIBS = $(CMDLIB) $(DBLIB) $(ULIB) $(RWHOLIB)
TARGETS = mud$(EXE) mudwho$(EXE) dumpdb$(EXE) loaddb$(EXE) bigrams$(EXE) \
	comp$(EXE) bonk$(EXE) oif2set$(EXE) dbchk$(EXE) mwhod$(EXE)

all: $(TARGETS)

mud$(EXE) : $(OBJ) $(CMDLIB) $(DBLIB) $(ULIB) $(RWHOLIB)
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 

mudwho$(EXE) : RWHO/mudwho.o
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

dumpdb$(EXE) : DB/dumpdb.o $(DBUTIL) $(DBLIB)
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

loaddb$(EXE) : DB/loaddb.o $(DBUTIL) $(DBLIB)
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

comp$(EXE) : DB/comp.o
	$(CC) $(LDFLAGS) -o $@ $^

bigrams$(EXE) : DB/bigrams.o
	$(CC) $(LDFLAGS) -o $@ $^

$(CMDLIB) : $(CMDOBJ)
	$(AR) rsc $@ $^

$(DBLIB) : $(DBOBJ)
	$(AR) rsc $@ $^

$(ULIB) : $(UOBJ) y.tab.h 
	$(AR) rsc $@ $(UOBJ)

U/uinterp.c y.tab.h : U/uinterp.y 
	$(YACC) -d U/uinterp.y
	mv y.tab.c U/uinterp.c

$(RWHOLIB) : $(RWHOOBJ)
	$(AR) rsc $@ $^

mwhod$(EXE) : $(RWHODOBJ)
	$(CC) $(LDFLAGS) -o $@ $^

bonk$(EXE) : MISC/bonk.o
	$(CC) $(LDFLAGS) -o $@ $^

oif2set$(EXE) : MISC/oif2set.o
	$(CC) $(LDFLAGS) -o $@ $^

dbchk$(EXE) : $(MISCDBCHKOBJ) $(DBUTIL) $(DBLIB)
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

clean :
	@echo "Cleaning..."
	@-rm -f *.d $(TARGETS) $(ALLLIBS) \
		 DB/dumpdb.o DB/loaddb.o DB/comp.o DB/bigrams.o \
		 U/uinterp.c y.tab.h  RWHO/mudwho.o  $(OBJDEPENDS) \
		$(OBJDEPENDS:.o=.d)
	@echo "Done."

dist : 
	ln -s ./ untermud
	-tar czvf untermud-$(RELEASE).tar.gz $(PDIST) --exclude=.svn
	rm untermud

# pull in dependency info for *existing* .o files
-include $(OBJDEPENDS:.o=.d)
	
# compile and generate dependency info;
# more complicated dependency computation, so all prereqs listed
# will also become command-less, prereq-less targets
#   sed:    append directory to object target. (gcc bug?)
#   sed:    strip the target (everything before colon)
#   sed:    remove any continuation backslashes
#   fmt -1: list words one per line
#   sed:    strip leading spaces
#   sed:    add trailing colons
%.o: %.c
ifdef LINT
	-$(LINT) $(LINTFLAGS) $*.c
endif	
	$(CC) -c $(CFLAGS) $(INCS) $*.c -o $*.o 
	@$(CC) -MM $(CFLAGS) $(INCS) $*.c > $*.d
	@mv -f $*.d $*.d.tmp
	@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
	@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
	  sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
	@rm -f $*.d.tmp