#	SCCS Id: @(#)Makefile.GCC	      3.2     96/10/25
#	Copyright (c) NetHack PC Development Team 1996.
#	PC NetHack 3.2 Utilities 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: nethack-bugs@linc.cis.upenn.edu
#
#	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 = jnethack
# The GNU Make has a problem if you include a drive spec below (unfortunately).
GAMEDIR = \games\jnethack

#
# 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
JP   = ..\japanese
EXT   = ..\extension

#
#  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 -8
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

#
# OPTIONAL TILE SUPPORT.
#
#	This release of NetHack allows you to build a version of NetHack
#	that will draw 16x16 color tiles on the display to represent
#	NetHack maps, objects, monsters, etc. on machines with appropriate
#	display hardware.  Currently the only supported video hardware is
#	VGA.
#
#	Note:  You can build NetHack with tile support and then choose
#	whether to use it or not at runtime via the NetHack.cnf file option
#	"video".
#

TILESUPPORT = Y

#############################################################################
#
# 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

LS = ls -1		# ls.exe from djgpp distribution
#LS = dir /l/b		# DOS command

ifeq ($(TILESUPPORT),Y)
TILEFLG = -DUSE_TILES
else
TILEFLG =
endif

#
#  Flags.
#
# Debugging
#CFLAGS = -pg -c -I../include $(DLBFLG) $(TILEFLG)
#LFLAGS = -pg

#    Normal
CFLAGS = -c -O -I../include $(DLBFLG) $(TILEFLG)
LFLAGS =

#
#  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 ($(TILESUPPORT),Y)

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

else

TILOBJ      =
TEXTIO      =
TEXTIO2     =
PLANAR_TIB  =
OVERVIEW_TIB =
TILEUTIL    =
TILEFILES   =
TILEFILES2  =
GIFREADERS  =
GIFREAD2    =
PPMWRITERS  =
PPMWRIT2    =

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	     rumors.o
VOBJ16 = save.o	    shk.o      shknam.o	  sit.o	     sounds.o
VOBJ17 = sp_lev.o   spell.o    steal.o	  termcap.o  timeout.o
VOBJ18 = topl.o	    topten.o   track.o	  trap.o     u_init.o
VOBJ19 = uhitm.o    vault.o    vision.o	  vis_tab.o  weapon.o
VOBJ20 = were.o	    wield.o    windows.o  wintty.o   wizard.o
VOBJ21 = worm.o	    worn.o     write.o	  zap.o	     light.o
VOBJ22 = dlb.o      dig.o      teleport.o
VOBJ23 = jlib.o     jtrns.o    jconj.o
VOBJ24 = extension.o nhinet.o  nhbuf.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)

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
RM_H	   = $(INCL)\align.h	$(INCL)\rm.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)\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
DLB_H      = $(INCL)\dlb.h
TILE_H	   = $(INCL)\tile.h $(INCL)\pctiles.h

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
	copy *.tib                $(GAMEDIR)
	copy $(SSHR)\NetHack.cnf  $(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_yacc.c del $(SRC)\lev_yacc.c
	if exist $(SRC)\dgn_lex.c  del $(SRC)\dgn_lex.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)\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 $(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)\data	   del $(DAT)\data
	if exist $(DAT)\dungeon	   del $(DAT)\dungeon
	if exist $(DAT)\options	   del $(DAT)\options
	if exist $(DAT)\joracles   del $(DAT)\joracles
	if exist $(DAT)\jrumors	   del $(DAT)\jrumors
	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 $(SRC)\jlib.c	   del $(SRC)\jlib.c
	if exist $(SRC)\jtrns.c	   del $(SRC)\jtrns.c
	if exist $(SRC)\jconj.c	   del $(SRC)\jconj.c
	if exist $(INCL)\jdata.h   del $(INCL)\jdata.h


#
#  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

$(INCL)\jdata.h: makedefs.exe $(DAT)\jtrnsobj.dat $(DAT)\jtrnsmon.dat
	-makedefs -j

#
#  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) 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
#

$(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

#
#  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)\data	     $(DAT)\jrumors	 $(DAT)\dungeon \
	$(DAT)\joracles	    $(DAT)\quest.dat	sp_lev.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)\jrumors:	     utility.tag    $(DAT)\jrumors.tru	$(DAT)\jrumors.fal
	makedefs -r

$(DAT)\quest.dat: utility.tag  $(DAT)\quest.txt
	makedefs -q

$(DAT)\oracles:	     utility.tag    $(DAT)\oracles.txt
	makedefs -h

$(DAT)\joracles:	     utility.tag    $(DAT)\joracles.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)\elf.des	     $(DAT)\healer.des \
	$(DAT)\knight.des	 $(DAT)\priest.des   $(DAT)\rogue.des  \
	$(DAT)\samurai.des $(DAT)\tourist.des  $(DAT)\valkyrie.des \
	$(DAT)\wizard.des $(DAT)\fighter.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 tower.des
	lev_comp yendor.des
	lev_comp arch.des
	lev_comp barb.des
	lev_comp caveman.des
	lev_comp elf.des
	lev_comp healer.des
	lev_comp knight.des
	lev_comp priest.des
	lev_comp rogue.des
	lev_comp samurai.des
	lev_comp tourist.des
	lev_comp valkyrie.des
	lev_comp wizard.des
	lev_comp fighter.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
	@cd $(DAT)
	@copy $(MSYS)\msdoshlp.txt .
	@echo data >dlb.lst
	@echo dungeon >>dlb.lst
	@echo joracles >>dlb.lst
	@echo options >>dlb.lst
	@echo quest.dat >>dlb.lst
	@echo jrumors >>dlb.lst
	@echo jhelp >>dlb.lst
	@echo jhh >>dlb.lst
	@echo jcmdhelp >>dlb.lst
	@echo jhistory >>dlb.lst
	@echo jopthelp >>dlb.lst
	@echo jwizhelp >>dlb.lst
	@echo license >>dlb.lst
	@echo msdoshlp.txt >>dlb.lst
	@echo jjj >>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

random.o: $(HACK_H) $(SSHR)\random.c
	copy $(SSHR)\random.c .
	$(CC) $(CFLAGS) -D_POSIX_SOURCE -o$@ random.c

# sys/msdos
msdos.o : $(HACK_H)  $(MSYS)\msdos.c $(INCL)\portio.h
	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 \
	$(INCL)\pctiles.h
	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 : $(CONFIG_H) $(WIN)\wintty.c
	copy $(WIN)\wintty.c .
	$(CC) $(CFLAGS) -o$@ wintty.c

jlib.o: $(JP)\jlib.c $(HACK_H)
	copy $(JP)\jlib.c .
	$(CC) $(CFLAGS) -o$@ jlib.c

jconj.o: $(JP)\jconj.c $(HACK_H)
	copy $(JP)\jconj.c .
	$(CC) $(CFLAGS) -o$@ jconj.c

jtrns.o: $(JP)\jtrns.c $(HACK_H) $(INCL)\jdata.h
	copy $(JP)\jtrns.c .
	$(CC) $(CFLAGS) -o$@ jtrns.c

extension.o: $(EXT)\extension.c $(HACK_H)
	copy $(EXT)\extension.c .
	$(CC) $(CFLAGS) -o$@ jtrns.c

nhbuf.o: $(EXT)\nhbuf.c $(HACK_H)
	copy $(EXT)\nhbuf.c .
	$(CC) $(CFLAGS) -o$@ nhbuf.c

nhinet.o: $(EXT)\nhinet.c $(HACK_H)
	copy $(EXT)\nhinet.c .
	$(CC) $(CFLAGS) -o$@ nhinet.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)\termcap.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)
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 $(INCL)\color.h
objnam.o:    $(HACK_H)
options.o:   $(CONFIG_H) $(HACK_H) $(INCL)\objclass.h $(INCL)\flag.h \
	      $(INCL)\termcap.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)
restore.o:   $(HACK_H) $(INCL)\lev.h $(INCL)\termcap.h $(INCL)\quest.h
rip.o:	     $(HACK_H)
rnd.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)
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 $(JP)\jpatchle.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
