#       SCCS Id: @(#)MakeGCC.src       3.1     93/04/07
#       Copyright (c) NetHack PC Development Team 1992, 1993.
#       PC NetHack 3.1 src Makefile for djgpp 1.10 and ndmake 4.5
#
#       For questions read the Install.dos file included with
#       the distribution.
#
#       Kevin D Smolkowski, Kevins@ori.objrg

CC       = wcc386
LINK     = wlink 

#       Set the gamedir according to your preference.  It must be present prior
#       to compilation.

GAME    = nethack                 # Game Name
GAMEDIR = c:\nh\bin                # Game directory

#       Compilation Flags.

#       Debugging
#CFLAGS = -pg -c -I../include
#LFLAGS = -pg

#       Normal 
CFLAGS = /i=..\include
LFLAGS = @nethack.lnk

#       Special libraries
# LIBS = -lpc

#       Source directories.    Makedefs hardcodes these, don't change them.
INCL = ..\include   # NetHack include files
DAT  = ..\dat       # NetHack data files
DOC  = ..\doc       # NetHack documentation files
UTIL = ..\util      # Utility source
SRC  = ..\src       # Main source
#SYS  = ..\sys\share # Shared system files
#MSYS = ..\sys\msdos # Msdos specific files
#WIN  = ..\win\tty   # Character terminal files
GAMEFILE = $(GAMEDIR)\$(GAME).exe # whole thing

#       The default make target (so just typing 'make' is useful).
default : $(GAMEFILE)

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

#  Nothing below this line should have to be changed.
#
#  Other things that have to be reconfigured are in
#       config.h, pcconf.h and possibly system.h.
#

#       This line should not be deleted.
 
#  Make Rules.

.SUFFIXES:  .exe .obj .c .y .l

.c.obj:
	$(CC) $(CFLAGS) $*.c

#  Object files for the game itself.

VOBJ01 = allmain.obj  alloc.obj    apply.obj    artifact.obj attrib.obj
VOBJ02 = ball.obj     bones.obj    botl.obj     cmd.obj      dbridge.obj
VOBJ03 = decl.obj     detect.obj   display.obj  do.obj       do_name.obj
VOBJ04 = do_wear.obj  dog.obj      dogmove.obj  dokick.obj   dothrow.obj
VOBJ05 = drawing.obj  dungeon.obj  eat.obj      end.obj      engrave.obj
VOBJ06 = exper.obj    explode.obj  extralev.obj files.obj    fountain.obj
VOBJ07 = getline.obj  hack.obj     hacklib.obj  invent.obj   lock.obj
VOBJ08 = mail.obj     main.obj     makemon.obj  mcastu.obj   mhitm.obj
VOBJ09 = mhitu.obj    minion.obj   mkmap.obj    mklev.obj    mkmaze.obj
VOBJ10 = mkobj.obj    mkroom.obj   mon.obj      mondata.obj  monmove.obj
VOBJ11 = monst.obj    monstr.obj   mplayer.obj  mthrowu.obj  muse.obj
VOBJ12 = music.obj    o_init.obj   objects.obj  objnam.obj   options.obj
VOBJ13 = pickup.obj   pline.obj    polyself.obj potion.obj   quest.obj
VOBJ14 = questpgr.obj pager.obj    pray.obj     priest.obj   read.obj
VOBJ15 = rect.obj     restore.obj  rip.obj      rnd.obj      rumors.obj
VOBJ16 = save.obj     shk.obj      shknam.obj   sit.obj      sounds.obj
VOBJ17 = sp_lev.obj   spell.obj    steal.obj    termcap.obj  timeout.obj
VOBJ18 = topl.obj     topten.obj   track.obj    trap.obj     u_init.obj
VOBJ19 = uhitm.obj    vault.obj    vision.obj   vis_tab.obj  weapon.obj
VOBJ20 = were.obj     wield.obj    windows.obj  wintty.obj   wizard.obj
VOBJ21 = worm.obj     worn.obj     write.obj    zap.obj

SOBJ    = msdos.obj    sys.obj      tty.obj      unix.obj    video.obj

VVOBJ  = version.obj

VOBJ   = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
	 $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
	 $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
	 $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
	 $(VOBJ21)

ALLOBJ = $(VOBJ) $(VVOBJ) $(SOBJ)

RM_H      = $(INCL)\rm.h  $(INCL)\align.h
DISPLAY_H = $(INCL)\display.h  $(INCL)\vision.h $(INCL)\mondata.h
DECL_H    = $(INCL)\decl.h $(INCL)\quest.h $(INCL)\spell.h \
	    $(INCL)\color.h $(INCL)\obj.h $(INCL)\you.h \
	    $(INCL)\onames.h $(INCL)\pm.h
ESHK_H    = $(INCL)\eshk.h  $(INCL)\dungeon.h
PCCONF_H  = $(INCL)\pcconf.h  $(INCL)\micro.h $(INCL)\system.h
DUNGEON_H = $(INCL)\dungeon.h  $(INCL)\align.h
EPRI_H    = $(DUNGEON_H)  $(INCL)\epri.h
EMIN_H    = $(DUNGEON_H)  $(INCL)\emin.h
PERM_H    = $(INCL)\permonst.h $(INCL)\monattk.h $(INCL)\monflag.h \
	    $(INCL)\align.h
CONFIG_H  = $(INCL)\config.h $(INCL)\tradstdc.h $(INCL)\global.h \
	    $(PCCONF_H)
HACK_H    = $(INCL)\hack.h $(CONFIG_H) $(DUNGEON_H) $(DECL_H)    \
	    $(DISPLAY_H) $(RM_H) $(INCL)\monsym.h                \
	    $(INCL)\mkroom.h $(INCL)\objclass.h $(INCL)\trap.h   \
	    $(INCL)\flag.h  $(INCL)\vision.h $(INCL)\display.h   \
	    $(INCL)\wintype.h $(INCL)\engrave.h $(INCL)\rect.h   \
	    $(INCL)\winprocs.h $(INCL)\wintty.h


#  The default target.

all :  $(GAMEFILE) install.tag
       @echo Done.

install: install.tag

install.tag:    $(GAMEFILE) $(DAT)\sp_lev.tag
    copy $(SYS)\termcap       $(GAMEDIR)
    copy $(DAT)\*.?           $(GAMEDIR)
    copy $(DAT)\*.dat         $(GAMEDIR)
    copy $(DAT)\*.lev         $(GAMEDIR)
    copy $(SYS)\nethack.cnf   $(GAMEDIR)
    copy $(UTIL)\recover.exe  $(GAMEDIR)
    copy $(MSYS)\msdos.hlp    $(GAMEDIR)
    del   $(GAMEDIR)\makefile
    echo install done > install.tag

#
#  The main target.
#
#$(GAMEFILE) : $(GAME).res  $(UTIL)\utility.tag
#    $(CC) $(LFLAGS) @$(GAME).res $(LIBRARIES)
#    copy /b $(STUBPATH)$(STUB) + a.objut $(GAMEFILE)
#    del a.objut

$(GAME).res : $(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 $(SOBJ)   >> $@
    @echo $(VVOBJ)  >> $@

#  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 : $(VOBJ)
    $(UTIL)\makedefs -v

$(INCL)\onames.h :
    $(UTIL)\makedefs -o

$(INCL)\pm.h :
    $(UTIL)\makedefs -p

$(INCL)\trap.h :
    $(UTIL)\makedefs -t

#
#  Housekeeping.
#

clean :
    -del *.obj

spotless : clean
    -del $(INCL)\date.h
    -del $(INCL)\onames.h
    -del $(INCL)\pm.h
    -del $(INCL)\vis_tab.h
    -del vis_tab.c
    -del $(UTIL)\makedefs.exe
    -del $(UTIL)\lev_comp.exe
    -del $(UTIL)\dgn_comp.exe
    -del $(UTIL)\*.res
    -del $(UTIL)\*.def
    -del $(UTIL)\*.map
    -del $(DAT)\data
    -del $(DAT)\rumors

# dependencies
# some files require movement as Ndmake 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.obj:  $(HACK_H) $(SYS)\pcmain.c
#    copy $(SYS)\pcmain.c .
#    $(CC) $(CFLAGS) -omain.obj pcmain.c

#tty.obj:   $(HACK_H) $(INCL)\wintty.h $(SYS)\pctty.c
#    copy $(SYS)\pctty.c .
#    $(CC) $(CFLAGS) -otty.obj  pctty.c

#unix.obj:  $(HACK_H) $(SYS)\pcunix.c
#    copy $(SYS)\pcunix.c .
#    $(CC) $(CFLAGS) -ounix.obj pcunix.c

#sys.obj : $(HACK_H) $(SYS)\pcsys.c
#    copy $(SYS)\pcsys.c .
#    $(CC) $(CFLAGS) -o$*.obj pcsys.c

# sys\msdos
#msdos.obj : $(HACK_H)  $(MSYS)\msdos.c
#    copy $(MSYS)\msdos.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

#video.obj : $(HACK_H)  $(MSYS)\video.c
#    copy $(MSYS)\video.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

# win/tty
#getline.obj : $(HACK_H) $(INCL)\wintty.h $(WIN)\getline.c
#    copy $(WIN)\getline.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

#termcap.obj : $(CONFIG_H) $(WIN)\termcap.c
#    copy $(WIN)\termcap.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

#topl.obj : $(CONFIG_H) $(WIN)\topl.c
#    copy $(WIN)\topl.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

#wintty.obj : $(CONFIG_H) $(WIN)\wintty.c
#    copy $(WIN)\wintty.c .
#    $(CC) $(CFLAGS) -o$*.obj $*.c

# src dependencies
allmain.obj:  $(HACK_H)
alloc.obj:    $(CONFIG_H)
apply.obj:    $(HACK_H) $(INCL)\edog.h
artifact.obj: $(HACK_H) $(INCL)\artifact.h $(INCL)\artilist.h
attrib.obj:   $(HACK_H) $(INCL)\artifact.h
ball.obj:     $(HACK_H)
bones.obj:    $(HACK_H) $(INCL)\lev.h
botl.obj:     $(HACK_H)
cmd.obj:      $(HACK_H) $(INCL)\func_tab.h
dbridge.obj:  $(HACK_H)
decl.obj:     $(HACK_H) $(INCL)\quest.h
detect.obj:   $(HACK_H) $(INCL)\artifact.h
display.obj:  $(HACK_H)
do.obj:       $(HACK_H) $(INCL)\lev.h
do_name.obj:  $(HACK_H)
do_wear.obj:  $(HACK_H)
dog.obj:      $(HACK_H) $(INCL)\edog.h
dogmove.obj:  $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h
dokick.obj:   $(HACK_H) $(ESHK_H)
dothrow.obj:  $(HACK_H)
drawing.obj:  $(HACK_H) $(INCL)\termcap.h
dungeon.obj:  $(HACK_H) $(INCL)\dgn_file.h
eat.obj:      $(HACK_H)
end.obj:      $(HACK_H) $(ESHK_H)
engrave.obj:  $(HACK_H) $(INCL)\lev.h
exper.obj:    $(HACK_H)
explode.obj:  $(HACK_H)
extralev.obj:  $(HACK_H)
files.obj:     $(HACK_H)
fountain.obj:  $(HACK_H)
hack.obj:      $(HACK_H)
hacklib.obj:   $(HACK_H)
invent.obj:    $(HACK_H) $(INCL)\artifact.h
lock.obj:      $(HACK_H)
mail.obj:      $(HACK_H) $(INCL)\mail.h
makemon.obj:   $(HACK_H) $(EPRI_H) $(EMIN_H)
mcastu.obj:    $(HACK_H)
mhitm.obj:     $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h
mhitu.obj:     $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h
minion.obj:    $(HACK_H) $(EMIN_H) $(EPRI_H)
mklev.obj:     $(HACK_H)
mkmap.obj:     $(HACK_H) $(INCL)\sp_lev.h
mkmaze.obj:    $(HACK_H) $(INCL)\sp_lev.h
mkobj.obj:     $(HACK_H) $(INCL)\artifact.h $(INCL)\prop.h
mkroom.obj:    $(HACK_H)
mon.obj:       $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h
mondata.obj:   $(HACK_H) $(ESHK_H) $(EPRI_H)
monmove.obj:   $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h
monst.obj:     $(CONFIG_H) $(PERM_H) $(ESHK_H) $(EPRI_H) \
	     $(INCL)\color.h $(INCL)\monsym.h $(INCL)\vault.h
mplayer.obj:   $(HACK_H)
mthrowu.obj:   $(HACK_H)
muse.obj:      $(HACK_H)
music.obj:     $(HACK_H)
o_init.obj:    $(HACK_H)
objects.obj:   $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h \
	     $(INCL)\prop.h $(INCL)\color.h
objnam.obj:    $(HACK_H)
options.obj:   $(CONFIG_H) $(HACK_H) $(INCL)\objclass.h $(INCL)\flag.h \
	     $(INCL)\termcap.h
pager.obj:     $(HACK_H)
pickup.obj:    $(HACK_H)
pline.obj:     $(HACK_H) $(EPRI_H)
polyself.obj:  $(HACK_H)
potion.obj:    $(HACK_H)
pray.obj:      $(HACK_H) $(EPRI_H)
priest.obj:    $(HACK_H) $(INCL)\mfndpos.h $(ESHK_H) $(EPRI_H) $(EMIN_H)
quest.obj:     $(HACK_H) $(INCL)\quest.h $(INCL)\qtext.h
questpgr.obj:  $(HACK_H) $(INCL)\qtext.h
read.obj:      $(HACK_H)
rect.obj:      $(HACK_H)
restore.obj:   $(HACK_H) $(INCL)\lev.h $(INCL)\termcap.h $(INCL)\quest.h
rip.obj:       $(HACK_H)
rnd.obj:       $(HACK_H)
rumors.obj:    $(HACK_H)
save.obj:      $(HACK_H) $(INCL)\lev.h $(INCL)\quest.h
shk.obj:       $(HACK_H) $(ESHK_H)
shknam.obj:    $(HACK_H) $(ESHK_H)
sit.obj:       $(HACK_H) $(INCL)\artifact.h
sounds.obj:    $(HACK_H) $(INCL)\edog.h
sp_lev.obj:    $(HACK_H) $(INCL)\sp_lev.h $(INCL)\align.h $(INCL)\rect.h
spell.obj:     $(HACK_H)
steal.obj:     $(HACK_H)
timeout.obj:   $(HACK_H)
topten.obj:    $(HACK_H)
track.obj:     $(HACK_H)
trap.obj:      $(HACK_H)
u_init.obj:    $(HACK_H)
uhitm.obj:     $(HACK_H)
vault.obj:     $(HACK_H) $(INCL)\vault.h
version.obj:   $(HACK_H) $(INCL)\date.h  $(INCL)\patchlev.h
vision.obj:    $(HACK_H) $(INCL)\vis_tab.h
weapon.obj:    $(HACK_H)
were.obj:      $(HACK_H)
wield.obj:     $(HACK_H)
windows.obj:   $(HACK_H) $(INCL)\wintty.h
wizard.obj:    $(HACK_H) $(INCL)\qtext.h
worm.obj:      $(HACK_H) $(INCL)\lev.h
worn.obj:      $(HACK_H)
write.obj:     $(HACK_H)
zap.obj:       $(HACK_H)

# end of file
