# SCCS Id: @(#)Makefile.GCC 3.3 1999/11/06 # Copyright (c) NetHack PC Development Team 1996. # PC NetHack 3.3 Makefile for djgpp V2 # # Gnu gcc compiler for msdos (djgpp) # Requires Gnu Make utility (V3.73 or greater) supplied with djgpp V2 # # For questions or comments: devteam@nethack.org # # In addition to your C compiler, # # if you want to change you will need a # files with suffix workalike for # .y yacc # .l lex # # Note that flex (lex) and bison (yacc) are included with the # djgpp distribution and work quite well. This makefile assumes # you have them installed correctly. # Game Installation Variables # NOTE: Make sure GAMEDIR exists before make is started. GAME = nethack # The GNU Make has a problem if you include a drive spec below (unfortunately). GAMEDIR = \nethack\compiled # # Directories, gcc likes unix style directory specs # DDAT = ../dat DUTIL = ../util DSRC = ../src DINCL = ../include # But we must use dos directory specs to find src files, so.... DAT = ..\dat DOC = ..\doc INCL = ..\include MSYS = ..\sys\msdos SRC = ..\src SSHR = ..\sys\share UTIL = ..\util WIN = ..\win WSHR = ..\win\share # # Executables. CC = /djgpp/bin/gcc LINK = /djgpp/bin/gcc MAKEBIN = /djgpp/bin/make # if you have a uudecode program, add its name here # otherwise leave blank UUDECODE = # # Special libraries and how to link them in. LIBS = -lpc # If TERMLIB is defined in pcconf.h, comment out the upper line and # uncomment the lower. Note that you must build the termc library # and place it in djgpp's lib directory. See termcap.zip for details TERMLIB = #TERMLIB = -ltermc LIBRARIES = $(LIBS) $(TERMLIB) # # Yacc/Lex ... if you got 'em. # # If you have yacc/lex or a work-alike set YACC_LEX to Y # YACC_LEX = N # If YACC_LEX is Y above, set the following to values appropriate for # your tools. # YACC = bison -y LEX = flex YTABC = y_tab.c YTABH = y_tab.h LEXYYC = lexyy.c # # Uncomment the line below if you want to store all the level files, # help files, etc. in a single library file. USE_DLB = Y # djgpp ships with an ls.exe command so changing this should # not be necessary #LS = ls -1 # ls.exe from djgpp distribution LS = dir /l/b # DOS command # To build a binary without any graphics # suitable for blind players, # set SUPPRESS_GRAPHICS to Y # (Note: binary will require ANSI.SYS driver or equivalent loaded) # SUPPRESS_GRAPHICS = Y SUPPRESS_GRAPHICS = ############################################################################# # # nothing below this line should have to be changed # GAMEFILE = $(GAMEDIR)\$(GAME).exe # Changing this conditional block is not recommended ifeq ($(USE_DLB),Y) DLBFLG = -DDLB else DLBFLG = endif # # Flags. # ifeq ($(SUPPRESS_GRAPHICS),Y) TERMLIB = # Build NetHack suitable for blind players # Debugging #CFLAGS = -pg -c -I../include $(DLBFLG) -DSUPPRESS_GRAPHICS #LFLAGS = -pg CFLAGS = -c -O -I../include $(DLBFLG) -DSUPPRESS_GRAPHICS LFLAGS = else # Debugging #CFLAGS = -pg -c -I../include $(DLBFLG) -DUSE_TILES #LFLAGS = -pg # Normal CFLAGS = -c -O -I../include $(DLBFLG) -DUSE_TILES LFLAGS = endif # # Utility Objects. # VGAOBJ = vidvga.o MAKESRC = makedefs.c SPLEVSRC = lev_yacc.c lev_$(LEX).c lev_main.c panic.c DGNCOMPSRC = dgn_yacc.c dgn_$(LEX).c dgn_main.c MAKEOBJS = makedefs.o monst.o objects.o SPLEVOBJS = lev_yacc.o lev_$(LEX).o lev_main.o alloc.o \ monst.o objects.o panic.o \ drawing.o decl.o stubvid.o DGNCOMPOBJS = dgn_yacc.o dgn_$(LEX).o dgn_main.o alloc.o \ panic.o RECOVOBJS = recover.o # Tile related object files. ifeq ($(SUPPRESS_GRAPHICS),Y) TILOBJ = TEXTIO = TEXTIO2 = PLANAR_TIB = OVERVIEW_TIB = TILEUTIL = TILEFILES = TILEFILES2 = GIFREADERS = GIFREAD2 = PPMWRITERS = PPMWRIT2 = else TILOBJ = tile.o pctiles.o $(VGAOBJ) TEXTIO = tiletext.o tiletxt.o drawing.o decl.o monst.o objects.o stubvid.o TEXTIO2 = tiletex2.o tiletxt2.o drawing.o decl.o monst.o objects.o stubvid.o PLANAR_TIB = NetHack1.tib OVERVIEW_TIB = NetHacko.tib TILEUTIL = $(TILOBJ) tile2bin.exe til2bin2.exe $(PLANAR_TIB) $(OVERVIEW_TIB) TILEFILES = $(WSHR)\monsters.txt $(WSHR)\objects.txt $(WSHR)\other.txt TILEFILES2 = $(WSHR)\monthin.txt $(WSHR)\objthin.txt $(WSHR)\oththin.txt GIFREADERS = gifread.o alloc.o panic.o GIFREAD2 = gifread2.o alloc.o panic.o PPMWRITERS = ppmwrite.o alloc.o panic.o PPMWRIT2 = ppmwrit2.o alloc.o panic.o endif DLBOBJ = dlb.o # Object files for the game itself. VOBJ01 = allmain.o alloc.o apply.o artifact.o attrib.o VOBJ02 = ball.o bones.o botl.o cmd.o dbridge.o VOBJ03 = decl.o detect.o display.o do.o do_name.o VOBJ04 = do_wear.o dog.o dogmove.o dokick.o dothrow.o VOBJ05 = drawing.o dungeon.o eat.o end.o engrave.o VOBJ06 = exper.o explode.o extralev.o files.o fountain.o VOBJ07 = getline.o hack.o hacklib.o invent.o lock.o VOBJ08 = mail.o main.o makemon.o mcastu.o mhitm.o VOBJ09 = mhitu.o minion.o mkmap.o mklev.o mkmaze.o VOBJ10 = mkobj.o mkroom.o mon.o mondata.o monmove.o VOBJ11 = monst.o monstr.o mplayer.o mthrowu.o muse.o VOBJ12 = music.o o_init.o objects.o objnam.o options.o VOBJ13 = pickup.o pline.o polyself.o potion.o quest.o VOBJ14 = questpgr.o pager.o pray.o priest.o read.o VOBJ15 = rect.o restore.o rip.o rnd.o role.o VOBJ16 = rumors.o save.o shk.o shknam.o sit.o VOBJ17 = sounds.o sp_lev.o spell.o steal.o steed.o VOBJ18 = termcap.o timeout.o topl.o topten.o track.o VOBJ19 = trap.o u_init.o uhitm.o vault.o vision.o VOBJ20 = vis_tab.o weapon.o were.o wield.o windows.o VOBJ21 = wintty.o wizard.o worm.o worn.o write.o VOBJ22 = zap.o light.o dlb.o dig.o teleport.o VOBJ23 = region.o VOBJ24 = winjtp.o jtp_win.o jtp_def.o jtp_gen.o jtp_gfl.o jtp_gra.o VOBJ25 = jtp_mou.o jtp_txt.o jtp_dos.o SOBJ = msdos.o sound.o sys.o tty.o unix.o video.o \ vidtxt.o pckeys.o VVOBJ = version.o VOBJ = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \ $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \ $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \ $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \ $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) ALLOBJ = $(VOBJ) $(SOBJ) $(TILOBJ) $(VVOBJ) # # Header Objects. # DGN_FILE_H = $(INCL)\align.h $(INCL)\dgn_file.h DUNGEON_H = $(INCL)\align.h $(INCL)\dungeon.h EMIN_H = $(DUNGEON_H) $(INCL)\emin.h EPRI_H = $(DUNGEON_H) $(INCL)\align.h $(INCL)\epri.h ESHK_H = $(DUNGEON_H) $(INCL)\eshk.h MONDATA_H = $(INCL)\align.h $(INCL)\mondata.h MONST_H = $(INCL)\align.h $(INCL)\monst.h PERMONST_H = $(INCL)\monattk.h $(INCL)\monflag.h $(INCL)\align.h \ $(INCL)\permonst.h REGION_H = $(INCL)\region.h RM_H = $(INCL)\align.h $(INCL)\rm.h SKILLS_H = $(INCL)\skills.h SP_LEV_H = $(INCL)\align.h $(INCL)\sp_lev.h VAULT_H = $(DUNGEON_H) $(INCL)\vault.h YOUPROP_H = $(PERMONST_H) $(MONDATA_H) $(INCL)\prop.h \ $(INCL)\pm.h $(INCL)\youprop.h YOU_H = $(MONST_H) $(YOUPROP_H) $(INCL)\align.h \ $(INCL)\attrib.h $(INCL)\you.h DISPLAY_H = $(MONDATA_H) $(INCL)\vision.h $(INCL)\display.h PCCONF_H = $(INCL)\micro.h $(INCL)\system.h $(INCL)\pcconf.h \ $(INCL)\pcvideo.h CONFIG_H = $(GLOBAL_H) $(INCL)\tradstdc.h $(INCL)\config1.h \ $(INCL)\config.h DECL_H = $(YOU_H) $(INCL)\spell.h $(INCL)\color.h \ $(INCL)\obj.h $(INCL)\onames.h $(INCL)\pm.h \ $(INCL)\decl.h GLOBAL_H = $(PCCONF_H) $(INCL)\coord.h $(INCL)\global.h HACK_H = $(CONFIG_H) $(DUNGEON_H) $(DECL_H) \ $(DISPLAY_H) $(INCL)\monsym.h $(INCL)\mkroom.h \ $(INCL)\objclass.h $(INCL)\trap.h $(INCL)\flag.h \ $(RM_H) $(INCL)\vision.h $(INCL)\wintype.h \ $(INCL)\engrave.h $(INCL)\rect.h \ $(INCL)\trampoli.h $(INCL)\hack.h $(REGION_H) DLB_H = $(INCL)\dlb.h ifeq ($(SUPPRESS_GRAPHICS),Y) TILE_H = else TILE_H = $(INCL)\tile.h $(INCL)\pctiles.h endif ifeq ($(USE_DLB),Y) DLB = dlb DLBOBJS = dlb_main.o dlb.o alloc.o panic.o else DLB = DLBOBJS = endif ifdef DJGPP DJ1 = $(dir $(DJGPP)) CWSDPMI = $(subst /,\,$(DJ1))bin\CWSDPMI.* endif # # Make Rules. # .SUFFIXES: .exe .o .c .y .l .c.o: $(CC) $(CFLAGS) -o$@ $< #.phony: dlb # # Primary Targets. # # The default target. default: $(GAMEFILE) all: install.tag util: utility.tag install: install.tag utility.tag: $(INCL)\date.h $(INCL)\trap.h $(INCL)\onames.h \ $(INCL)\pm.h monstr.c vis_tab.c \ lev_comp.exe dgn_comp.exe recover.exe $(TILEUTIL) echo utilities made > utility.tag tileutil: gif2txt.exe txt2ppm.exe @echo Optional tile development utilities are up to date. install.tag: dat.tag $(GAMEFILE) ifeq ($(USE_DLB),Y) copy $(DAT)\nhdat $(GAMEDIR) copy $(DAT)\license $(GAMEDIR) else copy $(DAT)\*. $(GAMEDIR) copy $(DAT)\*.dat $(GAMEDIR) copy $(DAT)\*.lev $(GAMEDIR) copy $(MSYS)\msdoshlp.txt $(GAMEDIR) if exist $(GAMEDIR)\makefile. del $(GAMEDIR)\makefile. endif ifdef TERMLIB copy $(SSHR)\termcap $(GAMEDIR) endif if exist *.tib copy *.tib $(GAMEDIR) copy $(SSHR)\NetHack.cnf $(GAMEDIR)\defaults.nh copy $(MSYS)\NHAccess.nh $(GAMEDIR) copy recover.exe $(GAMEDIR) copy $(DOC)\guidebo*.txt $(GAMEDIR) if exist $(DOC)\recover.txt copy $(DOC)\recover.txt $(GAMEDIR) if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt $(GAMEDIR) ifdef CWSDPMI if exist $(CWSDPMI) copy $(CWSDPMI) $(GAMEDIR) else echo Could not find a copy of CWSDPMI.EXE to put into $(GAMEDIR) endif copy $(WIN)\jtp\gamedata\*.* $(GAMEDIR) mkdir $(GAMEDIR)\config copy $(WIN)\jtp\gamedata\config\*.* $(GAMEDIR)\config mkdir $(GAMEDIR)\graphics copy $(WIN)\jtp\gamedata\graphics\*.* $(GAMEDIR)\graphics mkdir $(GAMEDIR)\manual copy $(WIN)\jtp\gamedata\manual\*.* $(GAMEDIR)\manual mkdir $(GAMEDIR)\sound copy $(WIN)\jtp\gamedata\sound\*.* $(GAMEDIR)\sound echo install done > install.tag # The main target. $(GAMEFILE): utility.tag $(GAME).lnk $(LINK) $(LFLAGS) -o$(GAME).exe @$(GAME).lnk $(LIBRARIES) stubedit $(GAME).exe minstack=2048K copy $(GAME).exe $(GAMEFILE) del $(GAME).exe $(GAME).lnk: $(ALLOBJ) @echo $(VOBJ01) > $@ @echo $(VOBJ02) >> $@ @echo $(VOBJ03) >> $@ @echo $(VOBJ04) >> $@ @echo $(VOBJ05) >> $@ @echo $(VOBJ06) >> $@ @echo $(VOBJ07) >> $@ @echo $(VOBJ08) >> $@ @echo $(VOBJ09) >> $@ @echo $(VOBJ10) >> $@ @echo $(VOBJ11) >> $@ @echo $(VOBJ12) >> $@ @echo $(VOBJ13) >> $@ @echo $(VOBJ14) >> $@ @echo $(VOBJ15) >> $@ @echo $(VOBJ16) >> $@ @echo $(VOBJ17) >> $@ @echo $(VOBJ18) >> $@ @echo $(VOBJ19) >> $@ @echo $(VOBJ20) >> $@ @echo $(VOBJ21) >> $@ @echo $(VOBJ22) >> $@ @echo $(VOBJ23) >> $@ @echo $(VOBJ24) >> $@ @echo $(VOBJ25) >> $@ @echo $(SOBJ) >> $@ @echo $(TILOBJ) >> $@ @echo $(VVOBJ) >> $@ # # Housekeeping. # clean: del *.o del *.map del dlb_main.exe spotless: clean if exist utility.tag del utility.tag if exist install.tag del install.tag if exist dat.tag del dat.tag if exist $(GAME).lnk del $(GAME).lnk if exist makedefs.exe del makedefs.exe if exist lev_comp.exe del lev_comp.exe if exist dgn_comp.exe del dgn_comp.exe if exist $(SRC)\lev_lex.c del $(SRC)\lev_lex.c if exist $(SRC)\lev_flex.c del $(SRC)\lev_flex.c if exist $(SRC)\lev_yacc.c del $(SRC)\lev_yacc.c if exist $(SRC)\dgn_lex.c del $(SRC)\dgn_lex.c if exist $(SRC)\dgn_flex.c del $(SRC)\dgn_flex.c if exist $(SRC)\dgn_yacc.c del $(SRC)\dgn_yacc.c if exist recover.exe del recover.exe if exist $(INCL)\onames.h del $(INCL)\onames.h if exist $(INCL)\pm.h del $(INCL)\pm.h if exist $(INCL)\vis_tab.h del $(INCL)\vis_tab.h if exist $(INCL)\pcvideo.h del $(INCL)\pcvideo.h if exist $(INCL)\pctiles.h del $(INCL)\pctiles.h if exist $(INCL)\portio.h del $(INCL)\portio.h if exist $(INCL)\tile.h del $(INCL)\tile.h if exist monstr.c del monstr.c if exist vis_tab.c del vis_tab.c if exist $(SRC)\panic.c del $(SRC)\panic.c if exist $(SRC)\makedefs.c del $(SRC)\makedefs.c if exist $(SRC)\recover.c del $(SRC)\recover.c if exist $(SRC)\lev_main.c del $(SRC)\lev_main.c if exist $(SRC)\dlb_main.c del $(SRC)\dlb_main.c if exist $(SRC)\dgn_main.c del $(SRC)\dgn_main.c if exist $(SRC)\winjtp.c del $(SRC)\winjtp.c if exist $(SRC)\jtp_def.c del $(SRC)\jtp_def.c if exist $(SRC)\jtp_gen.c del $(SRC)\jtp_gen.c if exist $(SRC)\jtp_gfl.c del $(SRC)\jtp_gfl.c if exist $(SRC)\jtp_gra.c del $(SRC)\jtp_gra.c if exist $(SRC)\jtp_txt.c del $(SRC)\jtp_txt.c if exist $(SRC)\jtp_mou.c del $(SRC)\jtp_mou.c if exist $(SRC)\jtp_win.c del $(SRC)\jtp_win.c if exist $(SRC)\jtp_dos.c del $(SRC)\jtp_dos.c if exist $(SRC)\wintty.c del $(SRC)\wintty.c if exist $(SRC)\topl.c del $(SRC)\topl.c if exist $(SRC)\getline.c del $(SRC)\getline.c if exist $(SRC)\termcap.c del $(SRC)\termcap.c if exist $(SRC)\tile2bin.c del $(SRC)\tile2bin.c if exist $(SRC)\msdos.c del $(SRC)\msdos.c if exist $(SRC)\pckeys.c del $(SRC)\pckeys.c if exist $(SRC)\video.c del $(SRC)\video.c if exist $(SRC)\vidtxt.c del $(SRC)\vidtxt.c if exist $(SRC)\vidvga.c del $(SRC)\vidvga.c if exist $(SRC)\sound.c del $(SRC)\sound.c if exist $(SRC)\tilemap.c del $(SRC)\tilemap.c if exist $(SRC)\gifread.c del $(SRC)\gifread.c if exist $(SRC)\ppmwrite.c del $(SRC)\ppmwrite.c if exist $(SRC)\pcmain.c del $(SRC)\pcmain.c if exist $(SRC)\pcunix.c del $(SRC)\pcunix.c if exist $(SRC)\pcsys.c del $(SRC)\pcsys.c if exist $(SRC)\pctty.c del $(SRC)\pctty.c if exist $(SRC)\tile.c del $(SRC)\tile.c if exist $(SRC)\tiletext.c del $(SRC)\tiletext.c if exist $(SRC)\pctiles.c del $(SRC)\pctiles.c if exist $(SRC)\thintile.c del $(SRC)\thintile.c if exist $(SRC)\thintile.exe del $(SRC)\thintile.exe if exist $(SRC)\thintile.tag del $(SRC)\thintile.tag if exist $(SRC)\til2bin2.exe del $(SRC)\til2bin2.exe if exist $(INCL)\date.h del $(INCL)\date.h if exist $(INCL)\onames.h del $(INCL)\onames.h if exist $(INCL)\pm.h del $(INCL)\pm.h if exist $(INCL)\vis_tab.h del $(INCL)\vis_tab.h if exist vis_tab.c del vis_tab.c if exist *.lnk del *.lnk if exist *.def del *.def if exist *.map del *.map if exist a.out del a.out if exist tilemap.exe del tilemap.exe if exist tile2bin.exe del tile2bin.exe if exist $(DAT)\data del $(DAT)\data if exist $(DAT)\*.lev del $(DAT)\*.lev if exist $(DAT)\dungeon del $(DAT)\dungeon if exist $(DAT)\options del $(DAT)\options if exist $(DAT)\oracles del $(DAT)\oracles if exist $(DAT)\rumors del $(DAT)\rumors if exist $(DAT)\quest.dat del $(DAT)\quest.dat if exist $(DAT)\nhdat del $(DAT)\nhdat if exist $(DAT)\dlb.lst del $(DAT)\dlb.lst if exist $(DAT)\msdoshlp.txt del $(DAT)\msdoshlp.txt if exist $(DAT)\dlb_main.exe del $(DAT)\dlb_main.exe if exist $(DAT)\lev_comp.exe del $(DAT)\lev_comp.exe if exist $(DAT)\dgn_comp.exe del $(DAT)\dgn_comp.exe if exist sp_lev.tag del sp_lev.tag if exist $(PLANAR_TIB) del $(PLANAR_TIB) if exist $(OVERVIEW_TIB) del $(OVERVIEW_TIB) if exist thintile.tag del thintile.tag if exist thintile.exe del thintile.exe if exist til2bin2.exe del til2bin2.exe if exist $(INCL)\dgn_comp.h del $(INCL)\dgn_comp.h if exist $(INCL)\lev_comp.h del $(INCL)\lev_comp.h if exist $(DAT)\dungeon.pdf del $(DAT)\dungeon.pdf if exist $(WSHR)\monthin.txt del $(WSHR)\monthin.txt if exist $(WSHR)\objthin.txt del $(WSHR)\objthin.txt if exist $(WSHR)\oththin.txt del $(WSHR)\oththin.txt # # Secondary Targets. # # The following include files depend on makedefs to be created. # # date.h should be remade every time any of the source or include # files is modified. $(INCL)\date.h : makedefs.exe -makedefs -v $(INCL)\onames.h: makedefs.exe -makedefs -o $(INCL)\pm.h: makedefs.exe -makedefs -p monstr.c: makedefs.exe -makedefs -m $(INCL)\vis_tab.h: makedefs.exe -makedefs -z vis_tab.c: makedefs.exe -makedefs -z # # Makedefs Stuff # makedefs.exe: $(MAKEOBJS) $(LINK) $(LFLAGS) -omakedefs.exe $(MAKEOBJS) makedefs.c: $(UTIL)\makedefs.c copy $(UTIL)\makedefs.c . makedefs.o: $(CONFIG_H) $(PERMONST_H) $(INCL)\objclass.h \ $(INCL)\monsym.h $(INCL)\qtext.h makedefs.c # # Level Compiler Dependencies # lev_comp.exe: $(SPLEVOBJS) $(LINK) $(LFLAGS) -olev_comp.exe $(SPLEVOBJS) ifeq ($(YACC_LEX),Y) lev_yacc.o: $(HACK_H) $(SP_LEV_H) lev_yacc.c $(CC) $(CFLAGS) -o$@ lev_yacc.c else lev_yacc.o: $(HACK_H) $(SP_LEV_H) $(INCL)\lev_comp.h lev_yacc.c $(CC) $(CFLAGS) -o$@ lev_yacc.c endif lev_$(LEX).o: $(HACK_H) $(SP_LEV_H) $(INCL)\lev_comp.h \ lev_$(LEX).c $(CC) $(CFLAGS) -o$@ lev_$(LEX).c lev_main.c: $(UTIL)\lev_main.c copy $(UTIL)\lev_main.c . lev_main.o: $(HACK_H) $(INCL)\sp_lev.h $(INCL)\date.h lev_main.c $(INCL)\lev_comp.h: lev_yacc.c ifeq ($(YACC_LEX),Y) lev_yacc.c: $(UTIL)\lev_comp.y $(YACC) -d $(DUTIL)/lev_comp.y copy $(YTABC) $@ copy $(YTABH) $(INCL)\lev_comp.h del $(YTABC) del $(YTABH) lev_$(LEX).c: $(UTIL)\lev_comp.l $(LEX) $(DUTIL)/lev_comp.l copy $(LEXYYC) $@ del $(LEXYYC) else lev_yacc.c: $(SSHR)\lev_yacc.c copy $(SSHR)\lev_yacc.c $@ $(INCL)\lev_comp.h: $(SSHR)\lev_comp.h copy $(SSHR)\lev_comp.h $@ touch $(DINCL)/lev_comp.h lev_$(LEX).c: $(SSHR)\lev_lex.c copy $(SSHR)\lev_lex.c $@ endif # # Dungeon Dependencies # dgn_comp.exe: $(DGNCOMPOBJS) $(LINK) $(LFLAGS) -odgn_comp.exe $(DGNCOMPOBJS) ifeq ($(YACC_LEX),Y) dgn_yacc.o: $(HACK_H) $(DGN_FILE_H) dgn_yacc.c $(CC) $(CFLAGS) -o$@ dgn_yacc.c else dgn_yacc.o: $(HACK_H) $(DGN_FILE_H) $(INCL)\dgn_comp.h dgn_yacc.c $(CC) $(CFLAGS) -o$@ dgn_yacc.c endif dgn_$(LEX).o: $(HACK_H) $(DGN_FILE_H) $(INCL)\dgn_comp.h \ dgn_$(LEX).c $(CC) $(CFLAGS) -o$@ dgn_$(LEX).c dgn_main.c: $(UTIL)\dgn_main.c copy $(UTIL)\dgn_main.c . dgn_main.o: $(HACK_H) $(INCL)\dgn_comp.h: dgn_yacc.c ifeq ($(YACC_LEX),Y) dgn_yacc.c: $(UTIL)\dgn_comp.y $(YACC) -d $(DUTIL)/dgn_comp.y copy $(YTABC) $@ copy $(YTABH) $(INCL)\dgn_comp.h del $(YTABC) del $(YTABH) dgn_$(LEX).c: $(UTIL)\dgn_comp.l $(LEX) $(DUTIL)/dgn_comp.l copy $(LEXYYC) $@ del $(LEXYYC) else dgn_yacc.c: $(SSHR)\dgn_yacc.c copy $(SSHR)\dgn_yacc.c $@ $(INCL)\dgn_comp.h: $(SSHR)\dgn_comp.h copy $(SSHR)\dgn_comp.h $@ touch $(DINCL)/dgn_comp.h dgn_$(LEX).c: $(SSHR)\dgn_lex.c copy $(SSHR)\dgn_lex.c $@ endif # # Recover Utility # recover.exe: $(RECOVOBJS) $(LINK) $(LFLAGS) -orecover.exe recover.o recover.c: $(UTIL)\recover.c copy $(UTIL)\recover.c . recover.o: $(CONFIG_H) recover.c $(CC) $(CFLAGS) -o$@ recover.c # # Header file moves required for tile support # ifeq ($(SUPPRESS_GRAPHICS),Y) else $(INCL)\tile.h: $(WSHR)\tile.h copy $(WSHR)\tile.h $@ $(INCL)\pctiles.h: $(MSYS)\pctiles.h copy $(MSYS)\pctiles.h $@ $(INCL)\pcvideo.h: $(MSYS)\pcvideo.h copy $(MSYS)\pcvideo.h $@ $(INCL)\portio.h: $(MSYS)\portio.h copy $(MSYS)\portio.h $@ # # Tile Mapping # tile.c: tilemap.exe @tilemap @echo A new $@ has been created tilemap.exe: tilemap.o $(LINK) $(LFLAGS) -otilemap.exe tilemap.o tilemap.c: $(WSHR)\tilemap.c copy $(WSHR)\tilemap.c . tilemap.o: tilemap.c $(HACK_H) $(TILE_H) # # Tile Utilities # # # Required for tile support # NetHack1.tib: $(TILEFILES) tile2bin.exe @echo Creating binary tile files (this may take some time) @tile2bin NetHacko.tib: thintile.tag $(TILEFILES2) til2bin2.exe @echo Creating overview binary tile files (this may take some time) @til2bin2 tile2bin.exe: tile2bin.o $(TEXTIO) $(LINK) $(LFLAGS) -otile2bin.exe tile2bin.o $(TEXTIO) til2bin2.exe: til2bin2.o $(TEXTIO2) $(LINK) $(LFLAGS) -otil2bin2.exe til2bin2.o $(TEXTIO2) thintile.exe: thintile.o $(LINK) $(LFLAGS) -othintile.exe thintile.o thintile.c: $(WSHR)\thintile.c copy $(WSHR)\thintile.c . thintile.o: $(HACK_H) $(INCL)\tile.h thintile.c $(CC) $(CFLAGS) -o$@ thintile.c thintile.tag: thintile.exe $(TILEFILES) thintile @echo thintiles created >thintile.tag tile2bin.c: $(MSYS)\tile2bin.c copy $(MSYS)\tile2bin.c . tile2bin.o: $(HACK_H) $(INCL)\tile.h $(INCL)\pctiles.h $(INCL)\pcvideo.h \ tile2bin.c til2bin2.o: $(HACK_H) $(INCL)\tile.h $(INCL)\pctiles.h $(INCL)\pcvideo.h \ tile2bin.c $(CC) $(CFLAGS) -DTILE_X=8 -DOVERVIEW_FILE -o$@ tile2bin.c tiletext.o: $(CONFIG_H) $(INCL)\tile.h $(WSHR)\tiletext.c copy $(WSHR)\tiletext.c . $(CC) $(CFLAGS) -o$@ tiletext.c tiletex2.o: $(CONFIG_H) $(INCL)\tile.h $(WSHR)\tiletext.c copy $(WSHR)\tiletext.c . $(CC) $(CFLAGS) -DTILE_X=8 -o$@ tiletext.c tiletxt.o: $(CONFIG_H) $(INCL)\tile.h tilemap.c $(CC) $(CFLAGS) -DTILETEXT -o$@ tilemap.c tiletxt2.o: $(CONFIG_H) $(INCL)\tile.h tilemap.c $(CC) $(CFLAGS) -DTILETEXT -DTILE_X=8 -o$@ tilemap.c # # Optional GIF Utilities (for development) # gif2txt.exe: $(GIFREADERS) $(TEXTIO) $(LINK) $(LFLAGS) -ogif2txt.exe $(GIFREADERS) $(TEXTIO) gif2txt2.exe: $(GIFREAD2) $(TEXTIO2) $(LINK) $(LFLAGS) -ogif2txt2.exe $(GIFREAD2) $(TEXTIO2) txt2ppm.exe: $(PPMWRITERS) $(TEXTIO) $(LINK) $(LFLAGS) -otxt2ppm.exe $(PPMWRITERS) $(TEXTIO) txt2ppm2.exe: $(PPMWRIT2) $(TEXTIO2) $(LINK) $(LFLAGS) -otxt2ppm2.exe $(PPMWRIT2) $(TEXTIO2) gifread.c: $(WSHR)\gifread.c copy $(WSHR)\gifread.c . gifread.o: $(CONFIG_H) $(INCL)\tile.h gifread2.o: $(CONFIG_H) $(INCL)\tile.h gifread.c $(CC) $(CFLAGS) -DTILE_X=8 -o$@ gifread.c ppmwrite.c: $(WSHR)\ppmwrite.c copy $(WSHR)\ppmwrite.c . ppmwrite.o: $(CONFIG_H) $(INCL)\tile.h ppmwrit2.o: $(CONFIG_H) $(INCL)\tile.h ppmwrite.c $(CC) $(CFLAGS) -DTILE_X=8 -o$@ ppmwrite.c # # Optional tile viewer (development sources only) # viewtib.exe: viewtib.o $(LINK) $(LFLAGS) -oviewtib.exe viewtib.o $(LIBRARIES) viewtib.c: $(MSYS)\viewtib.c copy $(MSYS)\viewtib.c . viewtib.o: viewtib.c endif # # Other Util Dependencies. # alloc.o: $(CONFIG_H) alloc.c $(CC) $(CFLAGS) -oalloc.o alloc.c drawing.o: $(CONFIG_H) drawing.c $(INCL)\pcvideo.h $(CC) $(CFLAGS) -odrawing.o drawing.c decl.o: $(CONFIG_H) decl.c $(CC) $(CFLAGS) -odecl.o decl.c monst.o: $(CONFIG_H) $(PERMONST_H) $(ESHK_H) \ $(EPRI_H) $(VAULT_H) $(INCL)\monsym.h \ $(INCL)\color.h monst.c $(CC) $(CFLAGS) -omonst.o monst.c objects.o: $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h \ $(INCL)\prop.h $(INCL)\color.h objects.c $(CC) $(CFLAGS) -oobjects.o objects.c panic.c: $(UTIL)\panic.c copy $(UTIL)\panic.c . panic.o: $(CONFIG_H) panic.c # # make data.base an 8.3 filename to prevent an nmake warning # DATABASE = $(DAT)\data.bas dat.tag: $(DAT)\nhdat @echo dat done >dat.tag $(DAT)\data: utility.tag $(DATABASE) makedefs -d $(DAT)\rumors: utility.tag $(DAT)\rumors.tru $(DAT)\rumors.fal makedefs -r $(DAT)\quest.dat: utility.tag $(DAT)\quest.txt makedefs -q $(DAT)\oracles: utility.tag $(DAT)\oracles.txt makedefs -h sp_lev.tag: utility.tag $(DAT)\bigroom.des $(DAT)\castle.des \ $(DAT)\endgame.des $(DAT)\gehennom.des $(DAT)\knox.des \ $(DAT)\medusa.des $(DAT)\oracle.des $(DAT)\tower.des \ $(DAT)\yendor.des $(DAT)\arch.des $(DAT)\barb.des \ $(DAT)\caveman.des $(DAT)\healer.des $(DAT)\knight.des \ $(DAT)\monk.des $(DAT)\priest.des $(DAT)\ranger.des \ $(DAT)\rogue.des $(DAT)\samurai.des $(DAT)\tourist.des \ $(DAT)\valkyrie.des $(DAT)\wizard.des copy $(SRC)\lev_comp.exe $(DAT)\lev_comp.exe cd $(DAT) lev_comp bigroom.des lev_comp castle.des lev_comp endgame.des lev_comp gehennom.des lev_comp knox.des lev_comp mines.des lev_comp medusa.des lev_comp oracle.des lev_comp sokoban.des lev_comp tower.des lev_comp yendor.des lev_comp arch.des lev_comp barb.des lev_comp caveman.des lev_comp healer.des lev_comp knight.des lev_comp monk.des lev_comp priest.des lev_comp ranger.des lev_comp rogue.des lev_comp samurai.des lev_comp tourist.des lev_comp valkyrie.des lev_comp wizard.des cd $(SRC) echo sp_levs done > sp_lev.tag $(DAT)\dungeon: utility.tag $(DAT)\dungeon.def @copy $(SRC)\dgn_comp.exe $(DAT)\dgn_comp.exe makedefs -e cd $(DAT) dgn_comp dungeon.pdf cd $(SRC) # # DLB stuff # #note that dir below assumes bin/dir.exe from djgpp distribution # $(DAT)\nhdat: dlb_main.exe $(DAT)\data $(DAT)\rumors $(DAT)\dungeon \ $(DAT)\oracles $(DAT)\quest.dat sp_lev.tag @echo dat done >dat.tag @cd $(DAT) @copy $(MSYS)\msdoshlp.txt . @echo data >dlb.lst @echo dungeon >>dlb.lst @echo oracles >>dlb.lst @echo options >>dlb.lst @echo quest.dat >>dlb.lst @echo rumors >>dlb.lst @echo help >>dlb.lst @echo hh >>dlb.lst @echo cmdhelp >>dlb.lst @echo history >>dlb.lst @echo opthelp >>dlb.lst @echo wizhelp >>dlb.lst @echo license >>dlb.lst @echo msdoshlp.txt >>dlb.lst $(LS) *.lev >>dlb.lst dlb_main cvIf dlb.lst nhdat @cd $(SRC) dlb_main.exe: $(DLBOBJS) $(LINK) $(LFLAGS) -odlb_main.exe $(DLBOBJS) @copy $@ $(DAT)\dlb_main.exe dlb_main.o: $(UTIL)\dlb_main.c $(INCL)\config.h $(DLB_H) copy $(UTIL)\dlb_main.c . $(CC) $(CFLAGS) -odlb_main.o dlb_main.c # Game Dependencies # Some files require movement as Gnu make doesn't like unix style '/' # directory specs and djgcc doesn't like dos style directory specs. # So we get to copy stuff where we might need it. Fun eh? # sys/share main.o: $(HACK_H) $(DLB_H) $(SSHR)\pcmain.c copy $(SSHR)\pcmain.c . $(CC) $(CFLAGS) -o$@ pcmain.c tty.o: $(HACK_H) $(INCL)\wintty.h $(SSHR)\pctty.c copy $(SSHR)\pctty.c . $(CC) $(CFLAGS) -o$@ pctty.c unix.o: $(HACK_H) $(SSHR)\pcunix.c copy $(SSHR)\pcunix.c . $(CC) $(CFLAGS) -o$@ pcunix.c sys.o : $(HACK_H) $(SSHR)\pcsys.c copy $(SSHR)\pcsys.c . $(CC) $(CFLAGS) -o$@ pcsys.c # sys/msdos msdos.o : $(HACK_H) $(MSYS)\msdos.c copy $(MSYS)\msdos.c . $(CC) $(CFLAGS) -o$@ msdos.c pckeys.o : $(HACK_H) $(MSYS)\pckeys.c copy $(MSYS)\pckeys.c . $(CC) $(CFLAGS) -o$@ pckeys.c pctiles.o : $(HACK_H) $(MSYS)\pctiles.c $(INCL)\portio.h copy $(MSYS)\pctiles.c . $(CC) $(CFLAGS) -o$@ pctiles.c sound.o : $(HACK_H) $(MSYS)\sound.c $(INCL)\portio.h copy $(MSYS)\sound.c . $(CC) $(CFLAGS) -o$@ sound.c video.o : $(HACK_H) $(INCL)\pcvideo.h $(INCL)\portio.h $(MSYS)\video.c copy $(MSYS)\video.c . $(CC) $(CFLAGS) -o$@ video.c vidvga.o : $(HACK_H) $(INCL)\pcvideo.h $(INCL)\portio.h $(TILE_H) \ $(MSYS)\vidvga.c copy $(MSYS)\vidvga.c . $(CC) $(CFLAGS) -o$@ vidvga.c vidtxt.o : $(HACK_H) $(INCL)\pcvideo.h $(INCL)\portio.h $(TILE_H) \ $(MSYS)\vidtxt.c copy $(MSYS)\vidtxt.c . $(CC) $(CFLAGS) -o$@ vidtxt.c stubvid.o : $(HACK_H) $(MSYS)\video.c copy $(MSYS)\video.c . $(CC) $(CFLAGS) -DSTUBVIDEO -o$@ video.c # win/tty getline.o : $(HACK_H) $(INCL)\wintty.h $(WIN)\tty\getline.c copy $(WIN)\tty\getline.c . $(CC) $(CFLAGS) -o$@ getline.c termcap.o : $(CONFIG_H) $(WIN)\tty\termcap.c copy $(WIN)\tty\termcap.c . $(CC) $(CFLAGS) -o$@ termcap.c topl.o : $(CONFIG_H) $(WIN)\tty\topl.c copy $(WIN)\tty\topl.c . $(CC) $(CFLAGS) -o$@ topl.c wintty.o : $(HACK_H) $(WIN)\tty\wintty.c copy $(WIN)\tty\wintty.c . $(CC) $(CFLAGS) -o$@ wintty.c # win/jtp jtp_def.o : $(INCL)\jtp_def.h $(WIN)\jtp\jtp_def.c copy $(WIN)\jtp\jtp_def.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_def.c jtp_gen.o : $(INCL)\jtp_def.h $(INCL)\jtp_gen.h $(WIN)\jtp\jtp_gen.c copy $(WIN)\jtp\jtp_gen.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_gen.c jtp_gfl.o : $(INCL)\jtp_def.h $(INCL)\jtp_gfl.h $(WIN)\jtp\jtp_gfl.c copy $(WIN)\jtp\jtp_gfl.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_gfl.c jtp_gra.o : $(INCL)\jtp_def.h $(INCL)\jtp_gra.h $(WIN)\jtp\jtp_gra.c copy $(WIN)\jtp\jtp_gra.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_gra.c jtp_dos.o : $(INCL)\jtp_def.h $(INCL)\jtp_dos.h $(WIN)\jtp\jtp_dos.c copy $(WIN)\jtp\jtp_dos.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_dos.c jtp_txt.o : $(INCL)\jtp_def.h $(INCL)\jtp_txt.h $(WIN)\jtp\jtp_txt.c copy $(WIN)\jtp\jtp_txt.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_txt.c jtp_mou.o : $(INCL)\jtp_def.h $(INCL)\jtp_mou.h $(WIN)\jtp\jtp_mou.c copy $(WIN)\jtp\jtp_mou.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_mou.c jtp_win.o : $(INCL)\jtp_def.h $(INCL)\jtp_gen.h $(INCL)\jtp_gfl.h $(INCL)\jtp_gra.h $(INCL)\jtp_txt.h $(INCL)\jtp_mou.h $(INCL)\jtp_win.h $(WIN)\jtp\jtp_win.c copy $(WIN)\jtp\jtp_win.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ jtp_win.c winjtp.o : $(INCL)\jtp_def.h $(INCL)\jtp_win.h $(INCL)\winjtp.h $(WIN)\jtp\winjtp.c copy $(WIN)\jtp\winjtp.c . $(CC) $(CFLAGS) -DUSE_DOS_SYSCALLS -o$@ winjtp.c # src dependencies allmain.o: $(HACK_H) alloc.o: $(CONFIG_H) apply.o: $(HACK_H) $(INCL)\edog.h artifact.o: $(HACK_H) $(INCL)\artifact.h $(INCL)\artilist.h attrib.o: $(HACK_H) $(INCL)\artifact.h ball.o: $(HACK_H) bones.o: $(HACK_H) $(INCL)\lev.h botl.o: $(HACK_H) cmd.o: $(HACK_H) $(INCL)\func_tab.h dbridge.o: $(HACK_H) decl.o: $(HACK_H) $(INCL)\quest.h detect.o: $(HACK_H) $(INCL)\artifact.h dig.o: $(HACK_H) display.o: $(HACK_H) dlb.o: $(HACK_H) $(DLB_H) do.o: $(HACK_H) $(INCL)\lev.h do_name.o: $(HACK_H) do_wear.o: $(HACK_H) dog.o: $(HACK_H) $(INCL)\edog.h dogmove.o: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h dokick.o: $(HACK_H) $(ESHK_H) dothrow.o: $(HACK_H) drawing.o: $(HACK_H) $(INCL)\tcap.h dungeon.o: $(HACK_H) $(INCL)\dgn_file.h eat.o: $(HACK_H) end.o: $(HACK_H) $(ESHK_H) engrave.o: $(HACK_H) $(INCL)\lev.h exper.o: $(HACK_H) explode.o: $(HACK_H) extralev.o: $(HACK_H) files.o: $(HACK_H) fountain.o: $(HACK_H) hack.o: $(HACK_H) hacklib.o: $(HACK_H) invent.o: $(HACK_H) $(INCL)\artifact.h light.o: $(HACK_H) $(INCL)\lev.h lock.o: $(HACK_H) mail.o: $(HACK_H) $(INCL)\mail.h makemon.o: $(HACK_H) $(EPRI_H) $(EMIN_H) $(INCL)\edog.h mcastu.o: $(HACK_H) mhitm.o: $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h mhitu.o: $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h minion.o: $(HACK_H) $(EMIN_H) $(EPRI_H) mklev.o: $(HACK_H) mkmap.o: $(HACK_H) $(INCL)\sp_lev.h mkmaze.o: $(HACK_H) $(INCL)\sp_lev.h mkobj.o: $(HACK_H) $(INCL)\artifact.h $(INCL)\prop.h mkroom.o: $(HACK_H) mon.o: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h mondata.o: $(HACK_H) $(ESHK_H) $(EPRI_H) monmove.o: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h monst.o: $(CONFIG_H) $(PERM_H) $(ESHK_H) $(EPRI_H) \ $(INCL)\color.h $(INCL)\monsym.h $(INCL)\vault.h mplayer.o: $(HACK_H) mthrowu.o: $(HACK_H) muse.o: $(HACK_H) music.o: $(HACK_H) o_init.o: $(HACK_H) objects.o: $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h \ $(INCL)\prop.h $(SKILLS_H) $(INCL)\color.h objnam.o: $(HACK_H) options.o: $(CONFIG_H) $(HACK_H) $(INCL)\objclass.h $(INCL)\flag.h \ $(INCL)\tcap.h pager.o: $(HACK_H) pickup.o: $(HACK_H) pline.o: $(HACK_H) $(EPRI_H) polyself.o: $(HACK_H) potion.o: $(HACK_H) pray.o: $(HACK_H) $(EPRI_H) priest.o: $(HACK_H) $(INCL)\mfndpos.h $(ESHK_H) $(EPRI_H) $(EMIN_H) quest.o: $(HACK_H) $(INCL)\quest.h $(INCL)\qtext.h questpgr.o: $(HACK_H) $(INCL)\qtext.h read.o: $(HACK_H) rect.o: $(HACK_H) region.o: $(HACK_H) restore.o: $(HACK_H) $(INCL)\lev.h $(INCL)\tcap.h $(INCL)\quest.h rip.o: $(HACK_H) rnd.o: $(HACK_H) role.o: $(HACK_H) rumors.o: $(HACK_H) save.o: $(HACK_H) $(INCL)\lev.h $(INCL)\quest.h shk.o: $(HACK_H) $(ESHK_H) shknam.o: $(HACK_H) $(ESHK_H) sit.o: $(HACK_H) $(INCL)\artifact.h sounds.o: $(HACK_H) $(INCL)\edog.h sp_lev.o: $(HACK_H) $(INCL)\sp_lev.h $(INCL)\align.h $(INCL)\rect.h spell.o: $(HACK_H) steal.o: $(HACK_H) steed.o: $(HACK_H) teleport.o: $(HACK_H) tile.o: $(HACK_H) $(TILE_H) timeout.o: $(HACK_H) topten.o: $(HACK_H) track.o: $(HACK_H) trap.o: $(HACK_H) u_init.o: $(HACK_H) uhitm.o: $(HACK_H) vault.o: $(HACK_H) $(INCL)\vault.h version.o: $(HACK_H) $(INCL)\patchlev.h vision.o: $(HACK_H) $(INCL)\vis_tab.h weapon.o: $(HACK_H) were.o: $(HACK_H) wield.o: $(HACK_H) windows.o: $(HACK_H) $(INCL)\wintty.h $(INCL)\winjtp.h wizard.o: $(HACK_H) $(INCL)\qtext.h worm.o: $(HACK_H) $(INCL)\lev.h worn.o: $(HACK_H) write.o: $(HACK_H) zap.o: $(HACK_H) # end of file