# SMUG (TinyMUD 2.4.0) makefile CC = gcc AR = ar # Uncomment these lines to use bison instead of yacc YACC = bison YFLAGS= -y -v #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 = OPTIM= -g -O2 -pipe -Wall -W -Wno-parentheses -Wno-unused -Wno-sign-compare DEFS= -DDEBUG -DNOISY_GC -DLOG_COMMANDS -DDUMP_CORE CFLAGS= $(OPTIM) $(DEFS) LFLAGS = -g # 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 LIBS = -lcrypt HDR = alist.h bytecode.h config.h db.h externs.h globals.h interface.h \ os.h set.h XTRA = language.pdf language.tex language.txt reserved.txt caveats.txt \ INSTALL_NOTES COPYING TODO load.sh load.cmd init.db loadup.txt tiny.m4 \ Makefile makefile.bor makefile.vc # Files needed to run the database DBSRC = db.c alist.c set.c utils.c vars.c predicates.c DBOBJ = $(DBSRC:.c=.o) # Files needed to run the interpreter INTERSRC = move.c tell.c create.c syscall.c encrypt.c bytecode.c \ compiler.y match.c delay.c INTEROBJ = move.o tell.o create.o syscall.o encrypt.o bytecode.o \ compiler.o match.o delay.o # Files needed to run the parser PARSESRC = command.c PARSEOBJ = $(PARSESRC:.c=.o) # Files needed to run the game (everything except the driver) GAMESRC = game.c GAMEOBJ = $(GAMESRC:.c=.o) # Files needed to run the network version NETSRC = netdriver.c os.c NETOBJ = $(NETSRC:.c=.o) # Files needed to run the tty version TTYSRC = ttydriver.c TTYOBJ = $(TTYSRC:.c=.o) # Files needed for the loader utility LDRSRC = loader.c LDROBJ = $(LDRSRC:.c=.o) # Files needed for the massager utility MSRC = massager.c MOBJ = $(MSRC:.c=.o) # Files needed for the runtest program RTSRC = runtest.c RTOBJ = $(RTSRC:.c=.o) # Files needed for the comptest program CTSRC = comptest.c CTOBJ = $(CTSRC:.c=.o) OUTFILES= y.tab.h test.db y.output compiler.c # Files in the standard distribution DISTFILES = $(HDR) $(XTRA) $(DBSRC) $(INTERSRC) $(PARSESRC) $(GAMESRC) \ $(NETSRC) $(TTYSRC) $(LDRSRC) $(MSRC) $(RTSRC) $(CTSRC) PDIST = $(patsubst %,smug/%,$(DISTFILES)) RELEASE = dist # Dependency information OBJDEPENDS = $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(GAMEOBJ) $(NETOBJ) \ $(TTYOBJ) $(LDROBJ) $(MOBJ) $(RTOBJ) $(CTOBJ) TARGETS = netmud$(EXE) ttymud$(EXE) loader$(EXE) test.db \ massager$(EXE) runtest$(EXE) comptest$(EXE) all: $(TARGETS) netmud$(EXE): $(NETOBJ) $(GAMEOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) ttymud$(EXE): $(TTYOBJ) $(GAMEOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) loader$(EXE): $(LDROBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) # builds the test database test.db: init.db loadup.txt tiny.m4 loader$(EXE) ./load.sh init.db test.db < loadup.txt # build parser compiler.c y.tab.h : compiler.y $(YACC) $(YFLAGS) compiler.y mv y.tab.c compiler.c # utilities and test programs massager$(EXE): $(MOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) runtest$(EXE): $(RTOBJ) $(DBOBJ) $(INTEROBJ) $(PARSEOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) comptest$(EXE): $(CTOBJ) compiler.o $(DBOBJ) $(CC) $(LFLAGS) -o $@ $^ $(LIBS) clean: @echo Cleaning... @-rm -f *.core gmon.out $(OUTFILES) $(TARGETS) $(OBJDEPENDS) $(OBJDEPENDS:.o=.d) @echo Done. dist : @echo Building distribution... @ln -s ./ smug @tar czf smug-$(RELEASE).tar.gz $(PDIST) --exclude=.svn @rm smug @echo Done. # 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) $*.c -o $*.o @$(CC) -MM $(CFLAGS) $*.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