Files
nethack/sys/msdos/Makefile.GCC
nethack.allison 742e1e8c90 3.3.2 to 3.4.0
2002-02-04 16:11:00 +00:00

1144 lines
29 KiB
Makefile

# SCCS Id: @(#)Makefile.GCC 3.4 1999/11/06
# Copyright (c) NetHack PC Development Team 1996.
# PC NetHack 3.4 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 = \games\nethackd
#
# 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\tty
WSHR = ..\win\share
#
# Executables.
CC = gcc
LINK = gcc
MAKEBIN = 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 mapglyph.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
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)
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
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 $(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)\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)\getline.c
copy $(WIN)\getline.c .
$(CC) $(CFLAGS) -o$@ getline.c
termcap.o : $(CONFIG_H) $(WIN)\termcap.c
copy $(WIN)\termcap.c .
$(CC) $(CFLAGS) -o$@ termcap.c
topl.o : $(CONFIG_H) $(WIN)\topl.c
copy $(WIN)\topl.c .
$(CC) $(CFLAGS) -o$@ topl.c
wintty.o : $(HACK_H) $(WIN)\wintty.c
copy $(WIN)\wintty.c .
$(CC) $(CFLAGS) -o$@ wintty.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)
mapglyph.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
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