set of Makefiles.vms for GNU make 4.1 on VMS based on Unix Makefiles

A test build log follows

$ make
pipe set default [.src] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 LUA_VERSION=5.4.6 nethack \
        && set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.src]'
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]hacklib.c /OBJECT=hacklib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    /obj=[-.util]panic.obj [-.util]panic.c
if f$search("hacklib.olb").eqs."" then -
library/create hacklib.olb/object
library/insert/replace hacklib.olb hacklib.obj,[-.util]panic.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lapi.c /OBJECT=lapi.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lauxlib.c /OBJECT=lauxlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lbaselib.c /OBJECT=lbaselib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lcode.c /OBJECT=lcode.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lcorolib.c /OBJECT=lcorolib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lctype.c /OBJECT=lctype.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldblib.c /OBJECT=ldblib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldebug.c /OBJECT=ldebug.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldo.c /OBJECT=ldo.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldump.c /OBJECT=ldump.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lfunc.c /OBJECT=lfunc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lgc.c /OBJECT=lgc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]linit.c /OBJECT=linit.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]liolib.c /OBJECT=liolib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]llex.c /OBJECT=llex.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lmathlib.c /OBJECT=lmathlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lmem.c /OBJECT=lmem.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]loadlib.c /OBJECT=loadlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lobject.c /OBJECT=lobject.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lopcodes.c /OBJECT=lopcodes.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]loslib.c /OBJECT=loslib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lparser.c /OBJECT=lparser.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstate.c /OBJECT=lstate.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstring.c /OBJECT=lstring.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstrlib.c /OBJECT=lstrlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltable.c /OBJECT=ltable.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltablib.c /OBJECT=ltablib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltm.c /OBJECT=ltm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lundump.c /OBJECT=lundump.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lutf8lib.c /OBJECT=lutf8lib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lvm.c /OBJECT=lvm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lzio.c /OBJECT=lzio.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  luaplaceholder.
c /OBJECT=luaplaceholder.obj
if f$search("[-.lib.lua]lua546.olb").eqs."" then library/create/obj [-.lib.lua]l
ua546.olb
library/insert/replace [-.lib.lua]lua546.olb lapi.obj, lauxlib.obj, lbaselib.obj
, lcode.obj, lcorolib.obj, lctype.obj, ldblib.obj, ldebug.obj, ldo.obj, ldump.ob
j, lfunc.obj, lgc.obj, linit.obj, liolib.obj, llex.obj, lmathlib.obj, lmem.obj,
loadlib.obj, lobject.obj, lopcodes.obj, loslib.obj, lparser.obj, lstate.obj, lst
ring.obj, lstrlib.obj, ltable.obj, ltablib.obj, ltm.obj, lundump.obj, lutf8lib.o
bj, lvm.obj, lzio.obj, luaplaceholder.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmain.c /OBJECT=vmsmain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]allmain.c /OBJECT=allmain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]alloc.c/OBJECT=alloc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]apply.c/OBJECT=apply.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]artifact.c /OBJECT=artifact.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]attrib.c /OBJECT=attrib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]ball.c /OBJECT=ball.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]bones.c/OBJECT=bones.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]botl.c /OBJECT=botl.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]calendar.c /OBJECT=calendar.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]cmd.c /OBJECT=cmd.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]coloratt.c /OBJECT=coloratt.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dbridge.c /OBJECT=dbridge.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]decl.c /OBJECT=decl.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]detect.c /OBJECT=detect.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dig.c /OBJECT=dig.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]display.c /OBJECT=display.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dlb.c /OBJECT=dlb.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do.c /OBJECT=do.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do_name.c /OBJECT=do_name.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do_wear.c /OBJECT=do_wear.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dog.c /OBJECT=dog.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dogmove.c /OBJECT=dogmove.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dokick.c /OBJECT=dokick.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dothrow.c /OBJECT=dothrow.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]drawing.c /OBJECT=drawing.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dungeon.c /OBJECT=dungeon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]eat.c /OBJECT=eat.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]end.c /OBJECT=end.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]engrave.c /OBJECT=engrave.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]exper.c/OBJECT=exper.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]explode.c /OBJECT=explode.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]extralev.c /OBJECT=extralev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]files.c/OBJECT=files.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]fountain.c /OBJECT=fountain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]getpos.c /OBJECT=getpos.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]hack.c /OBJECT=hack.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]insight.c /OBJECT=insight.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]invent.c /OBJECT=invent.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]isaac64.c /OBJECT=isaac64.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]light.c/OBJECT=light.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]lock.c /OBJECT=lock.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mail.c /OBJECT=mail.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]makemon.c /OBJECT=makemon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mcastu.c /OBJECT=mcastu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mdlib.c /OBJECT=mdlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mhitm.c /OBJECT=mhitm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mhitu.c /OBJECT=mhitu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]minion.c /OBJECT=minion.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mklev.c /OBJECT=mklev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkmap.c /OBJECT=mkmap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkmaze.c /OBJECT=mkmaze.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkobj.c /OBJECT=mkobj.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkroom.c /OBJECT=mkroom.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mon.c /OBJECT=mon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mondata.c /OBJECT=mondata.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]monmove.c /OBJECT=monmove.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]monst.c /OBJECT=monst.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mplayer.c /OBJECT=mplayer.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mthrowu.c /OBJECT=mthrowu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]muse.c /OBJECT=muse.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]music.c /OBJECT=music.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlua.c /OBJECT=nhlua.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlsel.c /OBJECT=nhlsel.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlobj.c /OBJECT=nhlobj.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]objnam.c /OBJECT=objnam.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]o_init.c /OBJECT=o_init.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]objects.c /OBJECT=objects.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]options.c /OBJECT=options.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pager.c /OBJECT=pager.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pickup.c /OBJECT=pickup.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pline.c /OBJECT=pline.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]polyself.c /OBJECT=polyself.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]potion.c /OBJECT=potion.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pray.c /OBJECT=pray.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]priest.c /OBJECT=priest.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]quest.c /OBJECT=quest.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]questpgr.c /OBJECT=questpgr.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]read.c /OBJECT=read.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rect.c /OBJECT=rect.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]region.c /OBJECT=region.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]report.c /OBJECT=report.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]restore.c /OBJECT=restore.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rip.c /OBJECT=rip.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rnd.c /OBJECT=rnd.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]role.c /OBJECT=role.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rumors.c /OBJECT=rumors.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]save.c /OBJECT=save.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]selvar.c /OBJECT=selvar.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sfstruct.c /OBJECT=sfstruct.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]shk.c /OBJECT=shk.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]shknam.c /OBJECT=shknam.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sit.c /OBJECT=sit.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sounds.c /OBJECT=sounds.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sp_lev.c /OBJECT=sp_lev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]spell.c /OBJECT=spell.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]stairs.c /OBJECT=stairs.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]steal.c /OBJECT=steal.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]steed.c /OBJECT=steed.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]strutil.c /OBJECT=strutil.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]symbols.c /OBJECT=symbols.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sys.c /OBJECT=sys.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]teleport.c /OBJECT=teleport.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]timeout.c /OBJECT=timeout.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]topten.c /OBJECT=topten.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]track.c /OBJECT=track.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]trap.c /OBJECT=trap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]u_init.c /OBJECT=u_init.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]utf8map.c /OBJECT=utf8map.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]uhitm.c/OBJECT=uhitm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]vault.c/OBJECT=vault.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]version.c /OBJECT=version.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]vision.c /OBJECT=vision.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]weapon.c /OBJECT=weapon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]were.c /OBJECT=were.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wield.c /OBJECT=wield.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]windows.c /OBJECT=windows.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wizard.c /OBJECT=wizard.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wizcmds.c /OBJECT=wizcmds.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]worm.c /OBJECT=worm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]worn.c /OBJECT=worn.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]write.c/OBJECT=write.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]zap.c /OBJECT=zap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsfiles.c /OBJECT=vmsfiles.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmail.c /OBJECT=vmsmail.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmisc.c /OBJECT=vmsmisc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmstty.c /OBJECT=vmstty.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsunix.c /OBJECT=vmsunix.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=getline.obj [-.win.tty]getline.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=termcap.obj [-.win.tty]termcap.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=topl.obj [-.win.tty]topl.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=wintty.obj [-.win.tty]wintty.c
cxx /INCLUDE_DIR=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS) /OBJECT=cppregex.obj [-.sys.share]cppregex.cpp
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]tclib.c /OBJECT=tclib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    \
        /OBJECT=date.obj [-.src]date.c
Linking nethack.
link  vmsmain.obj, \
        allmain.obj, alloc.obj, apply.obj, artifact.obj, attrib.obj, ball.obj, b
ones.obj, botl.obj, calendar.obj, cmd.obj, coloratt.obj, dbridge.obj, decl.obj,
detect.obj, dig.obj, display.obj, dlb.obj, do.obj, do_name.obj, do_wear.obj, dog
.obj, dogmove.obj, dokick.obj, dothrow.obj, drawing.obj, dungeon.obj, eat.obj, e
nd.obj, engrave.obj, exper.obj, explode.obj, extralev.obj, files.obj, fountain.o
bj, getpos.obj, hack.obj, hacklib.obj, insight.obj, invent.obj, isaac64.obj, lig
ht.obj, lock.obj, mail.obj, makemon.obj, mcastu.obj, mdlib.obj, mhitm.obj, mhitu
.obj, minion.obj, mklev.obj, mkmap.obj, mkmaze.obj, mkobj.obj, mkroom.obj, mon.o
bj, mondata.obj, monmove.obj, monst.obj, mplayer.obj, mthrowu.obj, muse.obj, mus
ic.obj, nhlua.obj, nhlsel.obj, nhlobj.obj, objnam.obj, o_init.obj, objects.obj,
options.obj, pager.obj, pickup.obj, pline.obj, polyself.obj, potion.obj, pray.ob
j, priest.obj, quest.obj, questpgr.obj, read.obj, rect.obj, region.obj, report.o
bj, restore.obj, rip.obj, rnd.obj, role.obj, rumors.obj, save.obj, selvar.obj, s
fstruct.obj, shk.obj, shknam.obj, sit.obj, sounds.obj, sp_lev.obj, spell.obj, st
airs.obj, steal.obj, steed.obj, strutil.obj, symbols.obj, sys.obj, teleport.obj,
 timeout.obj, topten.obj, track.obj, trap.obj, u_init.obj, utf8map.obj, uhitm.ob
j, vault.obj, version.obj, vision.obj, weapon.obj, were.obj, wield.obj, windows.
obj, wizard.obj, wizcmds.obj, worm.obj, worn.obj, write.obj, zap.obj, vmsfiles.o
bj, vmsmail.obj, vmsmisc.obj, vmstty.obj, vmsunix.obj, getline.obj, termcap.obj,
 topl.obj, wintty.obj, cppregex.obj, tclib.obj, date.obj \
         /EXECUTABLE=nethack.exe\
         +[-.lib.lua]lua546.olb/library
nethack is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.src]'
pipe set def [.util] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 recover && s
et def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.util]'
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    recover.c /OB
J=recover.obj
link  /EXE=recover.exe recover.obj
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.util]'
pipe set def [.doc] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 Guidebook &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.doc]'
pipe set def [-.util] &&  make makedefs && set def [-.doc]
make[2]: Entering directory 'DKA100:[DEVEL.NetHack370.util]'
LIBRARY/CREATE hacklib.olb/object
LIBRARY/INSERT hacklib.olb [-.src]hacklib.obj,[-.util]panic.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)   makedefs.c /OB
J=makedefs.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    /obj=placehol
der.obj placeholder.c
link  /EXE=makedefs.exe \
        []makedefs.obj, [-.src]monst.obj, [-.src]objects.obj, [-.src]date.obj, [
-.src]alloc.obj, []panic.obj, placeholder.obj, \
        hacklib.olb/lib
make[2]: Leaving directory 'DKA100:[DEVEL.NetHack370.util]'
disabled Guidebook on vms
                         make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.do
c]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 bogusmon  &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -s
about to Sprintf epitaph sizeof filename 600.filename = "../dat/epitaph.txt".RDT
MODE = "r".just did Sprintf filename="../dat/epitaph".about to Sprintf engrave s
izeof filename 600.filename = "../dat/engrave.txt".RDTMODE = "r".just did Sprint
f filename="../dat/engrave".about to Sprintf bogusmon sizeof filename 600.filena
me = "../dat/bogusmon.txt".RDTMODE = "r".just did Sprintf filename="../dat/bogus
mon".
     make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 data && set d
ef [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -d
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 engrave && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'engrave' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 epitaph && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'epitaph' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 oracles && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -h
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 options && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -v
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 rumors && set
 def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -r
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 spec_levs &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'spec_levs' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 quest_levs &&
 set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'quest_levs' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
echo disabled check-dlb
disabled check-dlb
                  pipe true
Done.
This commit is contained in:
nhmall
2024-03-08 12:15:53 -05:00
parent d52f05fc0e
commit cfc3a7f2b6
7 changed files with 2342 additions and 0 deletions

364
sys/vms/Install370.vms Normal file
View File

@@ -0,0 +1,364 @@
Instructions for Building and Installing NetHack 3.7.0
on a VSI openVMS 9.2 system
=========================================
This contains a description of how to build NetHack-3.7.0 on VSI OpenVMS 9.2.
This process uses Gnu Make 4.1 (minimum) for VMS to carry out the build.
Last tested with VSI C x86-64 V7.5-009 (GEM 50XBR) on OpenVMS x86_64 V9.2-2.
0. Please read this entire file before trying to build or install
NetHack, then read it again!
1. Make sure all the NetHack files are in the appropriate directory
structure. You should set up a directory--referred to as "top" below
and in some of the assorted files, but which may be a subdirectory--
that has these subdirectories
[.dat] -- data files
[.doc] -- documentation files
[.include] -- C header files
[.lib.lua546] -- Lua distribution from https://www.lua.org/
[.src] -- primary source files
[.sys] -- parent for [.sys.*]
[.sys.share] -- files shared by several ports, including VMS
[.sys.vms] -- VMS-specific source and support files
[.util] -- sources for essential utility programs
[.win] -- parent for [.win.*]
[.win.tty] -- "window" routines for ordinary terminals
(including terminal windows on workstations)
2. From the top of the NetHack 3.7 distribution, issue the following
pair of commands to distribute the GNU make Makefile.vms files to their
working locations for building NetHack:
$ set def [.sys.vms]
$ @vmssetup.com
$ set def [-.-]
That will place renamed copies of the following files like so,
relative to the top of the NetHack source tree:
[.sys.vms]Makefile_top.vms -> Makefile.vms
[.sys.vms]Makefile_dat.vms -> [.dat]Makefile.vms
[.sys.vms]Makefile_doc.vms -> [.doc]Makefile.vms
[.sys.vms]Makefile_src.vms -> [.src]Makefile.vms
[.sys.vms]Makefile_utl.vms -> [.util]Makefile.vms
3. Prior to beginning compilation, go to the [.include] subdirectory and
edit vmsconf.h according to its comments. You should set Local_WIZARD
and Local_HACKDIR to appropriate values.
Other things which may be of interest are SECURE if you intend to
set up NetHack as an installed image which is granted privileges, and
SHELL which should be disabled if you intend to allow captive accounts
to run NetHack. You may also want to edit file config.h, but that's
only necessary if you want or need to disable some of the game options.
The distributed copy of config.h will work successfully on VMS;
vmsconf.h has conditional code to deal with the UNIX-specific items.
4. After the above steps, issue the following command from the top of the
NetHack source tree to build the game from sources:
make
5. [ FIXME: this step is not in the Makefile_top.vms yet 2024/03/08 ]
After compilation, it's time to perform installation. Issue the
following command from the top of the NetHack source tree:
make install
6. To clean files left over from the build, issue the following command
from the top of the Nethack source tree:
make clean
7. The file nethack.com which is copied to the playground directory can
be used to invoke NetHack, or nethack.exe can be run directly. Most
of the command-line options specified in the Unix man-page (file
[.doc]nethack.txt) are also applicable to VMS. Some comments at the
beginning of nethack.com illustrate several of the options. New
players should read the file "Guidebook.txt" which will be copied
into the playground directory as "Guidebook.doc".
Notes:
1. Save files and bones files from 3.6.x and earlier versions will not
work with 3.7.0. The scoreboard file (RECORD) from 3.6.x or 3.4.x or
3.3.x should work.
2. To specify user-preference options in your environment, define the
logical name NETHACKOPTIONS to have the value of a quoted string
containing a comma separated list of option values. The option names
are case-insensitive.
$ define nethackoptions "noAutoPickup,Dog:Rover,Cat:Felix,DECgraphics"
One value you'll probably want to specify is "noLegacy" to turn off
the initial introductory passage. The "checkpoint" option controls
whether or not enough data is saved to disk so that the set of level
files left behind after a crash contains sufficient information for
recover.exe to be able to construct a save file after the fact. The
tradeoff for enabling checkpoint is that using it makes level changes
do more I/O and take longer. The "menustyle" option controls some
aspects of the user interface, and can be set to "menustyle:traditional"
to make nethack behave more like older versions.
If logical name or DCL symbol NETHACKOPTIONS is not defined, NetHack
will try HACKOPTIONS instead. Regardless of whether or not either
is defined, it will also try to find a configuration file containing
additional option settings. If the value of the translation of
NETHACKOPTIONS--or HACKOPTIONS--begins with an "@" character then the
rest of the translation is assumed to be the name of the configuration
file. Otherwise, the following are tried: file specified by logical
name NETHACKINI, file SYS$LOGIN:NETHACK.INI, and file HOME:NETHACK.CNF
(note that the C run-time library sets up the value of HOME to match
sys$login). Syntax for the configuration file is similar to
NETHACKOPTIONS, but multiple lines can be used, each must start with
OPTIONS=, and comments can be included by placing '#' in the first
column. Several options which take more complex values (graphics
representation) can also be present; see the "Guidebook" for details.
(Guidebook.txt can be found in the [.doc] subdirectory; a copy gets
placed in the playground directory by install.com. Also, an example
configuration file can be found in [.win.X11]nethack.rc.)
3. termcap is an ASCII data file containing descriptions of terminal
capabilities and the escape sequences that software must use to take
advantage of them. If you do not already have a termcap file in use
on your system there is a small one in file [.SYS.SHARE]TERMCAP. It
contains definitions for common Digital terminals, also suitable for
most clones and emulators. This file is copied into the playground
by install.com, and NetHack will use it if it can't find any other
one. NetHack uses the following sequence to attempt to locate the
termcap file: translation of the logical name TERMCAP (used as-is),
file NETHACKDIR:TERMCAP, similar file HACKDIR:TERMCAP, GNU-Emacs file
EMACS_LIBRARY:[ETC]TERMCAP.DAT, file []TERMCAP, and lastly file
$TERMCAP (which most likely would be a logical name). If NetHack
can't find the termcap file, or if the above search sequence finds a
different one than you'd prefer, then use the DCL ASSIGN or DEFINE
command to define a value for logical name TERMCAP.
NetHack also tries fairly hard to figure out what kind of terminal
you're using. It checks for logical names (or symbols) NETHACK_TERM,
HACK_TERM, EMACS_TERM, and lastly TERM. The last is set up by the
C run-time library and you cannot use a logical name or symbol for
it. If all those fail, or if whichever one succeeds has a value of
"undefined" or "unknown" (which can happen under VMS V5.4-* and
V5.5-* for VT420 terminals), NetHack will query the VMS TERMTABLE
database used by the SMG library routines. Whatever value NetHack
eventually comes up with needs to be the name of an entry in the
termcap file, otherwise a message about "Unknown terminal type" will
be printed and NetHack will exit.
4. Both vmsbuild.com and Makefile.src have provisions to build NetHack's
There is currently no working version of the 'curses' interface for
OpenVMS. The NetHack source code for it won't compile using
the implementation of curses which is supplied with VMS (either the
VMS-specific variant or the BSD-derived one). If someone manages
to port 'ncurses' or 'PDcurses' to OpenVMS, it may be possible to
use either of those, as ncurses works on Unix and PDcurses works
on Windows and MS-DOS.
5. NetHack contains code which attempts to make it secure in case it's
installed with privileges (to allow the playground to be protected
against world write access). This has only undergone limited testing,
so install NetHack with privileges at your own risk. If you discover
any potential security holes, please let us know so that we can take
steps to correct the problem(s). NetHack always includes filename
punctuation when accessing files, so that it should never be affected
by inadvertent or malicious logical name definitions, and it always
deactivates installed privileges prior to spawning a subprocess.
Note to end users: "installing with privileges" is an option for
system managers who set up system-wide access to the game. Since
CMKRNL privilege and modification of the system boot routines are
both required, it is not an option for ordinary users. There are
no explicit instructions on how to do such an installation, because
only system managers who are already familiar with the process and
its potential security ramifications should even consider it.
The default setup by install.com assumes no privileges and uses
world-writable files to allow arbitrary users to play. This is
NOT secure and not advisable in any environment where there are
untrustworthy users, but works fine for many sites. If you allow
users to run NetHack from captive accounts (VMS 5.1-* or earlier)
or from restricted accounts (5.2 and later), you should either make
sure that they do not have TMPMBX privilege or else disable NetHack's
ability to spawn an interactive subprocess. To disable subprocesses,
disable the "!" (shell escape) command by commenting out the definition
of SHELL in vmsconf.h prior to building the program. This necessity
may be removed in some future release, where NetHack will check for
captive accounts instead of spawning unconditionally. Note that
disabling the SHELL command also prevents spawning MAIL when scrolls
of new mail are received.
In order for installed privileges to be used at all, the value of
HACKDIR (via Local_HACKDIR in vmsconf.h) compiled into the program
must correspond to the actual playground directory. If logical name
HACKDIR (or NETHACKDIR) is used to override that value, installed
privileges will be deactivated unless its value corresponds to the
same device and directory as the internal value. If that internal
value contains a logical name, only an executive-mode translation
will be honored; if there is no such translation, installed privs
will be deactivated.
To be able to install nethack.exe with privileges (SYSPRV or GRPPRV,
perhaps EXQUOTA, depending on site usage and needs), you'll need to
link it with debugging and tracebacks both disabled. You can do this
by specifying an argument to vmsbuild.com when performing step #6
above; pass it "/noTrace/noDebug" as the 4th parameter.
$ @[.SYS.VMS]VMSBUILD "" "" "" "/noTrace/noDebug"
/Trace/noDebug is the linker's normal default. If you've already
built NetHack, you can relink with tracebacks disabled by doing
$ @[.SYS.VMS]VMSBUILD "LINK" "" "" "/noTrace/noDebug"
6. If you can't or won't install nethack.exe with privileges and if you
don't have access to a privileged account yourself, then if you intend
to allow other users to access your copy of NetHack you should probably
place an ACL on the playground directory and its save subdirectory.
The access control list should contain a default protection ACE which
grants delete+control access to the playground owner (ie, your own
account if there's no special games account involved). install.com
does not attempt to do this automatically at the present time. After
executing install.com to create the playground directory, perform a
pair of commands similar to the following
$ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) -
$_ device:[playground's.parent.directory]playground.DIR
$ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) -
$_ device:[playground.directory]SAVE.DIR
The two commands use the same options, but SET ACL won't accept a
list of files to modify. (For recent versions of VMS, SET ACL was
made obsolete in favor of SET FILE/ACL, which in turn has been made
obsolete in favor of SET SECURITY/CLASS=FILE/ACL; however, the older
forms will still work.) 'your_id' should be the rights identifier
which corresponds to the account which should retain access to those
files; 'device:[playground's.parent.directory]' is the name of the
parent directory for the playground (ie, if your playground directory
is disk$foo:[me.games.nethack.play], then you want to specify
disk$foo:[me.games.nethack]play.dir on the SET ACL command), and
'device:[playground.directory]' is the playground itself. Those ACLs
establish a default protection scheme such that every newly created
file in those directories will have an ACL attached to it, and the
attached ACL will grant 'your_id' full access to the corresponding
file. That should allow you to clear away level files from aborted
games, and to delete old save files if necessary. It will not enable
you to run recover.exe on behalf of other users, because you won't be
able to create files owned by them unless you have elevated privileges.
7. Many NetHack commands can be aborted by sending it the <escape>
character when it wants input. This is displayed as ESC inside the
game. Digital VK201 keyboards (used by VT2xx and VT3xx and older
VAXstations) and VK401 keyboards (used by VT4xx, newer VAXstations,
and DEC's X Terminals) do not have an <escape> key. They may
transmit <escape> for the <F11> key if the terminal or emulator
window is set to operate in VT100 mode, or there may be a setup-type
option for making the <` | ~> key behave as <escape>. If your
terminal does not have that, or if it's set to a mode where that
won't work, then just use <ctrl/[> instead. (Press the "[" key while
holding down the "Ctrl" key, then release both; <escape> and <ctrl/[>
have the same ASCII code and are indistinguishable once they reach
the computer; note that VAXstations and X Terminals _can_ tell the
difference, but that won't matter for NetHack.)
VMS NetHack is configured to use the SYS$QIOW system service for
reading characters from the keyboard. This allows ^C and ^Y (as well
as ^X and ^O for wizard mode debugging) to be used as commands without
being intercepted or interpreted by the terminal driver. The code
which parses arrow and function keys is not perfect, and it's possible
to get strange results if you hold such keys down or just type too
quickly, particularly on slow multiplexor lines. Those keys are
never needed in actual play, and most function keys are just treated
as <escape> for use in aborting partial commands.
VMS NetHack also still has code to use SMG$READ_KEYSTROKE instead.
That can be activated by modifying vmsconf.h and recompiling, but
it should never be necessary. If you use it, you'll need to press
either <esc> or <ctrl/[> twice to abort partial commands, or else
press an arbitrary function key, such as <PF4>, once.
If SUSPEND is defined in vmsconf.h, <ctrl/Z> is used for that command.
Since Unix-style job control is not available, it's used for connecting
to the parent process if NetHack is running in a subprocess. When not
in a subprocess, it doesn't do anything except give a message to the
effect that it's not doing anything.... The suspend command does not
save the current game; if you use ^Z to attach to your parent process,
be sure to remember to eventually reattach to the NetHack subprocess;
otherwise the game in progress won't get saved when you logout.
8. NetHack optionally maintains a logfile which receives one line appended
to it whenever a game ends. This can be disabled entirely by adding
an "#undef LOGFILE" directive to vmsconf.h prior to building the
program, or it can be disabled later by removing the file(s) LOGFILE.;*
from the playground directory. If not disabled prior to compilation,
the logfile can be reinitialized by simply creating an empty file
named LOGFILE in the playground, but make sure that users are able
to write into it, or new entries will not be appended. A somewhat
more elaborate log file named XLOGFILE containing more information is
handled similarly.
9. Some attempt at support for VMS versions earlier than V4.6 has been
included, but no such obsolete system was available for testing it.
vmsbuild.com detects the need for the extra support routines and
arranges automatically for them to be compiled. The reason that
special support is needed is that the C Run-Time Library (VAXCRTL)
underwent a major revision for VMS V4.6 and several routines which
NetHack utilizes were not available prior to that upgrade.
[That was written many years ago and the chance of it still working
is very small.]
10. To access "wizard mode"--intended for debugging purposes, not to
spoil the game with unlimited wishes--you must be running from the
username compiled into the game via Local_WIZARD in vmsconf.h, and
you must specify "-D" on the command line when invoking NetHack.
Note that -D must be uppercase, and it must be in quotes to prevent
the C run-time library's program startup code from converting it into
lowercase.
$ @hackdir:nethack "-D"
Any character name you specify will be ignored in favor of "wizard".
[More out of date information. Rather than compile-time Local_WIZARD,
users(s) allowed to run in wizard mode are now controlled by the entry
WIZARDS in the file SYSCONF.]
11. At program startup time, NetHack uses the empty file PERM to prevent
two different processes from using the same character name (under the
same UIC ownership) at the same time. It does this by temporarily
giving that file a second directory entry named PERM.LOCK, then
removing the alternate entry once started. If the PERM file is
missing or inaccessible, NetHack will give a message and then quit.
Several possible messages and their usual causes are:
Can't find file perm;1 to lock!
PERM.;1 is missing from the playground directory. Fix: reinstall
the playground directory using install.com, or use CREATE or an editor
to make an empty file named PERM. Version number must be 1.
Can't lock perm;1 due to directory protection.
The playground directory is not allowing write access. Fix: players
need to be able to write files for dungeon levels and "bones" into
the playground directory. Set the protection or ACL on the xxx.DIR;1
file in the playground's parent directory to allow write access.
Can't unlink perm.lock;1.
The empty file PERM.;1 is protected against delete access; only matters
under some versions of VMS. Fix: set the protection or ACL on PERM.;1
to allow delete access to players. Under VMS V5.5-2, delete access is
not necessary. PERM does not have to remain writable.
Waiting for access to perm;1. (# retries left).
If some other process is also starting up NetHack at about the same
time, you may have to wait a short period. NetHack will retry once
per second, counting down to 0. If 0 is reached, the message
Perhaps there is an old perm.lock;1 around?
will be displayed and then NetHack will give up. Fix: to forcibly
remove a stale PERM.LOCK entry, issue the following command
$ SET FILE/REMOVE PERM.LOCK;1
from the playground directory. The file PERM should remain intact.
Do not use that command for real files, only alternate directory
entries. If output from a DIRECTORY command on the playground reports
PERM.LOCK;1 no such file
then someone has deleted PERM.;1 while the synonym entry was still
in place, and PERM.LOCK was left as a dangling name which no longer
points at any file. The SET FILE/REMOVE command above will fix the
dangling name; a new PERM.;1 will need to be created as mentioned above.
In similar fashion, synchronized access to the scoreboard file RECORD
is accomplished using temporary entry RECORD.LOCK and LOGFILE using
entry LOGFILE.LOCK.
12. If necessary, send problem reports via e-mail to
<devteam@nethack.org>
Always include version information for NetHack, the operating system
version, and the C compiler and version used, and the version of GNU
make utility used.
8-March-2024
# NetHack 3.7 Install370.vms $NHDT-Date: 1575245132 2019/12/02 00:05:32 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.16 $
# NetHack may be freely redistributed. See license for details.

156
sys/vms/Makefile_dat.vms Normal file
View File

@@ -0,0 +1,156 @@
# NetHack Datafiles Makefile.dat $NHDT-Date: 1596486993 2020/08/03 20:36:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.32 $
# Copyright (c) 2018 by Pasi Kallinen
# NetHack may be freely redistributed. See license for details.
# Root of source tree:
NHSROOT=..
# relative directories to dat
DOC=[-.doc]
DAT=[-.dat]
INCL=[-.include]
SRC=[-.src]
UTIL=[-.util]
SYSVMS=[-.sys.vms]
SYSSHR=[-.sys.share]
SYSUNIX=[-.sys.unix]
WINTTY=[-.win.tty]
WINSHR=[-.win.share]
WINTTY=[-.win.tty]
WINCURS=[-.win.curses]
WINX11=[-.win.X11]
WINQT=[-.win.Qt]
WINSHIM=[-.win.shim]
WINCHAIN=[-.win.chain]
# Lua location relative to src
LUAVER=546
LUADOTVER=5.4.6
LUAUNDERVER=5_4_6
LUAINC=[-.lib.lua.lua$(LUAVER).src]
LUALIB=[-.lib.lua]lua$(LUAVER).olb
LUASRCDIR =[-.lib.lua.lua$(LUAVER).src]
LUASRCINCDIR=$(LUASRCDIR)
#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE]
#
# If your compiler needs an appropriate switch to accept C99 code.
# VSI C defaults to /STANDARD=relaxed which allows several C
# dialects including C99.
#
# CSTD=/STANDARD=C99
#
# Compiler flags
CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD)
CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS)
# Link flags
LFLAGS =
# external programs
# MAKE = make
CC = CC
#$(TOUCH) :=SET FILE/TRUNCATE
TOUCH = append/New _NLA0: # only one file per $($(TOUCH))
LINK = link
RM = delete
#TRUE uses an actual helper true.exe
TRUE = true
#FALSE uses an actual helper false.exe
FALSE = false
#ECHO uses an actual helper echo.exe
ECHO = echo
CXX ?= CXX
MOC ?= moc
MOCPATH ?= $(QTDIR)/bin/$(MOC)
# The default is for the TARGET_* variables to match the defaults.
# If we're cross-compiling these will get overridden elsewhere, likely via
VARDAT = bogusmon data engrave epitaph rumors oracles options
all: $(VARDAT) spec_levs quest_levs
$(UTIL)makedefs.exe:
pipe set def [-.util] && $(MAKE) makedefs && set def [-.dat]
$(UTIL)tile2x11.exe:
pipe set def [-.util] && $(MAKE) tile2x11 && set def [-.dat]
$(UTIL)tile2bmp.exe:
pipe set def [-.util] && $(MAKE) tile2bmp) && set def [-.dat]
$(UTIL)x11tiles.exe : $(UTIL)tile2x11.exe ../win/share/monsters.txt \
../win/share/objects.txt ../win/share/other.txt \
../win/share/monsters.txt
mcr $(UTIL)tile2x11.exe ../win/share/monsters.txt \
../win/share/objects.txt ../win/share/other.txt \
-grayscale ../win/share/monsters.txt
nhtiles.bmp: $(UTIL)tile2bmp.exe ../win/share/monsters.txt \
../win/share/objects.txt \
../win/share/other.txt
mcr $(UTIL)tile2bmp.exe $@
NetHack.ad: ../win/X11/NetHack.ad
# handle "#define foo bar" -lines
grep ^#define ../win/X11/NetHack.ad | \
sed -e 's/^#define/s/g' -e 's/ */ /g' \
-e 's/$$/ g/g' > NetHack.ad.tmp
grep -v ^#define ../win/X11/NetHack.ad | \
sed -f NetHack.ad.tmp > NetHack.ad
-rm -f NetHack.ad.tmp
pet_mark.xbm: $(WINX11)pet_mark.xbm
copy $(WINX11)pet_mark.xbm pet_mark.xbm
pilemark.xbm: $(WINX11)pilemark.xbm
copy $(WINX11)pilemark.xbm pilemark.xbm
rip.xpm: $(WINX11)rip.xpm
copy $(WINX11)rip.xpm rip.xpm
nhsplash.xpm: $(WINSHR)nhsplash.xpm
copy $(WINSHR)nhsplash.xpm nhsplash.xpm
nethack.icns: $(WINSHR)nhicns.uu
mcr $(UUDECODE) $(WINSHR)nhicns.uu
data: data.base $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -d
rumors: rumors.tru rumors.fal $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -r
oracles: oracles.txt $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -h
engrave: engrave.txt $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -s
epitaph: epitaph.txt $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -s
bogusmon: bogusmon.txt $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -s
# note: 'options' should have already been made when include/date.h was created
options: $(UTIL)makedefs.exe
mcr $(UTIL)makedefs.exe -v
# these don't actually do anything useful now that levcomp and dngcomp are gone
spec_levs:
$(TOUCH) spec_levs
quest_levs:
$(TOUCH) quest_levs
clean:
-delete/log spec_levs.;*,quest_levs.;*,gitinfo.txt;*
spotless: clean
-delete/log nhdat,$(addsuffix ;*$(comma),$(VARDAT) \
x11tiles, pet_mark.xbm, pilemark.xbm, rip.xpm, mapbg.xpm, \
rip.img, GEM_RSC.RSC, title.img, nh16.img, NetHack.ad, \
nhsplash.xpm, nhtiles.bmp)
#eof#

202
sys/vms/Makefile_doc.vms Normal file
View File

@@ -0,0 +1,202 @@
# NetHack Documentation Makefile.
# NetHack 3.7 Makefile.doc $NHDT-Date: 1596498290 2020/08/03 23:44:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.21 $
# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland
# NetHack may be freely redistributed. See license for details.
# Root of source tree:
NHSROOT=[-]
# relative directories from src
DOC=[-.doc]
DAT=[-.dat]
INCL=[-.include]
SRC=[-.src]
UTIL=[-.util]
SYSVMS=[-.sys.vms]
SYSSHR=[-.sys.share]
SYSUNIX=[-.sys.unix]
WINTTY=[-.win.tty]
WINSHR=[-.win.share]
WINTTY=[-.win.tty]
WINCURS=[-.win.curses]
WINX11=[-.win.X11]
WINQT=[-.win.Qt]
WINSHIM=[-.win.shim]
WINCHAIN=[-.win.chain]
# Lua location relative to src
LUAVER=546
LUADOTVER=5.4.6
LUAUNDERVER=5_4_6
LUAINC=[-.lib.lua.lua$(LUAVER).src]
LUALIB=[-.lib.lua]lua$(LUAVER).olb
LUASRCDIR =[-.lib.lua.lua$(LUAVER).src]
LUASRCINCDIR=$(LUASRCDIR)
#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE]
#
# If your compiler needs an appropriate switch to accept C99 code.
# VSI C defaults to /STANDARD=relaxed which allows several C
# dialects including C99.
#
# CSTD=/STANDARD=C99
#
# Compiler flags
CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD)
CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS)
# Link flags
LFLAGS =
# external programs
# MAKE = make
CC = CC
#touch :=SET FILE/TRUNCATE
touch = append/New _NLA0:
LINK = link
RM = delete
#TRUE uses an actual helper true.exe
TRUE = true
#FALSE uses an actual helper false.exe
FALSE = false
#ECHO uses an actual helper echo.exe
ECHO = echo
CXX ?= CXX
MOC ?= moc
MOCPATH ?= $(QTDIR)/bin/$(MOC)
# The default is for the TARGET_* variables to match the defaults.
# If we're cross-compiling these will get overridden elsewhere, likely via
MAKEDEFS = $(UTIL)makedefs
# Which version do we want to build? (XXX These are not used anywhere.)
GUIDEBOOK = Guidebook # regular ASCII file
#GUIDEBOOK = Guidebook.ps # PostScript file
#GUIDEBOOK = Guidebook.dvi # TeX device-independent file
# Some versions of col need -x to keep them from converting spaces to tabs;
# some versions of col don't do the conversion by default and don't
# recognize the option. Sigh.
COLCMD = col -bx
#COLCMD = col -b
# The command to use to generate a PostScript file
# PSCMD = ditroff | psdit
PSCMD = groff
# Use the "cat" GUIDECMD if nroff and/or tbl and/or col are not installed
# Not appropriate for creating Guidebook.txt.
# GUIDECMD = cat Guidebook.txt
#
# Single page. Might need adjustment to .pl value
# GUIDECMD= $(GUIDE_PREFORMAT) | perl -pe 's/^(.mt)$$/.pl 4720v\n.in 0\n.po 8\n.ll 64m\n$$1/' | nroff -c -Tascii | $(COLCMD)
#
GUIDECMD = $(GUIDE_PREFORMAT) | nroff -c -Tascii | $(COLCMD)
ONEPAGECMD = $(ONEPAGE_PREFORMAT) | nroff -c -Tascii | $(COLCMD) \
| sed -e '/EOF--EOF/,12345D'
# Only generate output for the current configuration:
NHGREP = mcr $(MAKEDEFS) --grep --input - --output -
NEEDMAKEDEFS = $(MAKEDEFS)
# Generate output for all configurations:
#NHGREP = mcr $(MAKEDEFS) --grep --input - --output - --grep-define ALLDOCS
#NEEDMAKEDEFS = $(MAKEDEFS)
# Fallback:
#NHGREP = cat
#NEEDMAKEDEFS =
GUIDEBOOK_MN_SRC = Guidebook.mn
GUIDEBOOK_MN = $(GUIDEBOOK_MN_SRC)
GUIDEBOOK_TEX_SRC = Guidebook.tex
GUIDEBOOK_TEX = $(GUIDEBOOK_TEX_SRC)
GUIDE_PREFORMAT = cat $(GUIDEBOOK_MN) | $(NHGREP) | tbl tmac.n -
# for Guidebook.dat, unpaginated version of Guidebook.txt
ONEPAGE_PREFORMAT = cat Gbk-1pg-pfx.mn $(GUIDEBOOK_MN) Gbk-1pg-sfx.mn \
| $(NHGREP) | tbl tmac.n -
# the basic guidebook
Guidebook : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS)
@echo disabled $@ on vms
# $(GUIDECMD) > Guidebook
# Fancier output for those with ditroff, psdit and a PostScript printer.
Guidebook.ps : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS)
@echo disabled $@ on vms
# $(GUIDE_PREFORMAT) | $(PSCMD) > Guidebook.ps
# Guidebook.tex is the same as Guidebook.mn but formatted with LaTeX.
# - The invocation command for LaTeX may vary in different installations.
# - To print Guidebook.dvi you need to use a suitable dvi-driver.
# - LaTeX needs to be run twice; second pass uses Guidebook.aux made by first.
Guidebook.dvi : $(GUIDEBOOK_TEX)
@echo disabled $@ on vms
# latex $(GUIDEBOOK_TEX)
# latex $(GUIDEBOOK_TEX)
# makedefs has more dependencies than these; this is mainly to cope with the
# case where it hasn't been built yet since it is usually needed for $(NHGREP)
# (note: 'make makedefs', not 'make $(MAKEDEFS)')
$(MAKEDEFS) : ../util/makedefs.c ../include/config.h ../src/mdlib.c \
../util/mdgrep.h
pipe set def $(UTIL) && make makedefs && set def [-.doc]
GAME = nethack
MANDIR = /usr/man/man6
MANEXT = 6
# manual installation for most BSD-style systems
GAMEMANCREATE = cat nethack.6 | $(NHGREP) >
RCVRMANCREATE = cat recover.6 | $(NHGREP) >
DLBMANCREATE = cat dlb.6 | $(NHGREP) >
MDMANCREATE = cat makedefs.6 | $(NHGREP) >
# manual installation for most SYSV-style systems
# GAMEMANCREATE = cat nethack.6 | $(NHGREP) | nroff -man - >
# RCVRMANCREATE = cat recover.6 | $(NHGREP) | nroff -man - >
# DLBMANCREATE = cat dlb.6 | $(NHGREP) | nroff -man - >
# MDMANCREATE = cat makedefs.6 | $(NHGREP) | nroff -man - >
manpages:
echo $@ disabled on VMS
# -$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT)
# -$(RCVRMANCREATE) $(MANDIR)/recover.$(MANEXT)
# -$(DLBMANCREATE) $(MANDIR)/dlb.$(MANEXT)
# -$(MDMANCREATE) $(MANDIR)/makedefs.$(MANEXT)
# manual creation for distribution
DISTRIB = Guidebook.txt nethack.txt recover.txt \
dlb.txt makedefs.txt
distrib: $(DISTRIB)
echo $@ disabled on VMS
# @echo "Plain text documentation is up to date."
Guidebook.txt : $(GUIDEBOOK_MN) tmac.n tmac.nh $(NEEDMAKEDEFS)
echo $@ disabled on VMS
# $(GUIDECMD) > $@
Guidebook.dat : Gbk-1pg-pfx.mn Gbk-1pg-sfx.mn $(GUIDEBOOK_MN) tmac.n tmac.nh \
$(NEEDMAKEDEFS)
echo $@ disabled on VMS
# $(ONEPAGECMD) > $@
MAN2TXT = $(NHGREP) | nroff -man - | $(COLCMD)
nethack.txt : nethack.6
echo $@ disabled on VMS
# cat nethack.6 | $(MAN2TXT) > nethack.txt
recover.txt : recover.6
echo $@ disabled on VMS
# cat recover.6 | $(MAN2TXT) > recover.txt
dlb.txt : dlb.6
echo $@ disabled on VMS
# cat dlb.6 | $(MAN2TXT) > dlb.txt
makedefs.txt : makedefs.6
echo $@ disabled on VMS
# cat makedefs.6 | $(MAN2TXT) > makedefs.txt
clean:
-delete/log Guidebook.aux;*, Guidebook.log;*
spotless: clean
-delete/log Guidebook.;*, Guidebook.dat;*, Guidebook.ps;*, \
Guidebook.dvi;*

832
sys/vms/Makefile_src.vms Normal file
View File

@@ -0,0 +1,832 @@
# NetHack 3.7 Makefile.src $NHDT-Date: 1654287121 2022/06/03 20:12:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.145 $
# Copyright (c) 2024 by Michael Allison
# NetHack may be freely redistributed. See license for details.
#
# OpenVMS GNU Makefile for OpenVMS 9.x and VSI C
# with GNU Make V4.1 (or greater).
#
# Tested on x86_64 version of OpenVMS V9.2-1.
#
# Root of source tree:
NHSROOT=..
# If we're cross-compiling, a hints file will override this
# to a unique target directory, but otherwise the obj files just go
# into [-.src]
TARGETPFX=
# relative directories from src
DOC=[-.doc]
DAT=[-.dat]
INCL=[-.include]
SRC=[-.src]
UTIL=[-.util]
SYSVMS=[-.sys.vms]
SYSSHR=[-.sys.share]
SYSUNIX=[-.sys.unix]
WINTTY=[-.win.tty]
WINSHR=[-.win.share]
WINTTY=[-.win.tty]
WINCURS=[-.win.curses]
WINX11=[-.win.X11]
WINQT=[-.win.Qt]
WINSHIM=[-.win.shim]
WINCHAIN=[-.win.chain]
# Lua
LUAVER=546
LUADOTVER=5.4.6
LUAUNDERVER=5_4_6
# Lua location relative to src
LUAINC=[-.lib.lua.lua$(LUAVER).src]
LUALIB=[-.lib.lua]lua$(LUAVER).olb
LUASRCDIR =[-.lib.lua.lua$(LUAVER).src]
LUASRCINCDIR=$(LUASRCDIR)
#
# If your compiler needs an appropriate switch to accept C99 code.
# VSI C defaults to /STANDARD=relaxed which allows several C
# dialects including C99.
#
# CSTD=/STANDARD=C99
#
# Compiler flags
CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD)
CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS)
# Link flags
LFLAGS =
# external programs
# MAKE = make
CC = CC
#touch :=SET FILE/TRUNCATE
touch = append/New _NLA0:
LINK = link
RM = delete
#TRUE uses an actual helper true.exe
TRUE = true
#FALSE uses an actual helper false.exe
FALSE = false
#ECHO uses an actual helper echo.exe
ECHO = echo
CXX ?= CXX
MOC ?= moc
MOCPATH ?= $(QTDIR)/bin/$(MOC)
# The default is for the TARGET_* variables to match the defaults.
# If we're cross-compiling these will get overridden elsewhere, likely via
# a hints file. TARGETPFX was set above earlier.
TARGET_CC = $(CC)
TARGET_CFLAGS = $(CFLAGS)
TARGET_LINK = $(LINK)
TARGET_LFLAGS = $(LFLAGS)
TARGET_CXX = $(CXX)
TARGET_CXXFLAGS = $(CXXFLAGS)
TARGET_LIBS = $(LIBS)
HACKLIB=hacklib.olb
HACKLIBOBJLIST=hacklib.obj,[-.util]panic.obj
# Set SYSTEM target
SYSTEM = SysVMS
comma:=,
# all .h files
CONFIGBASEH := color config config1 patchlevel tradstdc hacklib integer \
global coord vmsconf cstd nhlua unixconf \
pcconf micro windconf warnings fnamesiz
HACKBASEH := hack lint align dungeon wintype sym defsym \
mkroom artilist objclass objects youprop \
prop permonst monattk monflag monsters \
mondata context rm botl rect region trap \
display vision seffects selvar sndprocs stairs decl \
quest spell obj engrave you attrib monst \
mextra skills timeout flag winprocs sys
CONFIG_H = $(addsuffix .h, $(addprefix $(INCL), $(CONFIGBASEH)))
HACK_H = $(addsuffix .h, $(addprefix $(INCL), $(CONFIGBASEH) $(HACKBASEH)))
#QTn_H =
# all .c that are part of the main NetHack program and are not
# operating-system or windowing-system specific.
# Do not include date.c in this list.
HACKFILES := allmain alloc apply artifact attrib ball bones \
botl calendar cmd coloratt dbridge decl detect dig display dlb do \
do_name do_wear dog dogmove dokick dothrow drawing \
dungeon eat end engrave exper explode extralev \
files fountain getpos hack hacklib insight invent isaac64 light \
lock mail makemon mcastu mdlib mhitm mhitu minion mklev \
mkmap mkmaze mkobj mkroom mon \
mondata monmove monst mplayer mthrowu muse music \
nhlua nhlsel nhlobj objnam o_init objects \
options pager pickup pline polyself potion pray \
priest quest questpgr read rect region report restore \
rip rnd role rumors save selvar sfstruct \
shk shknam sit sounds \
sp_lev spell stairs steal steed strutil symbols sys teleport \
timeout topten track trap u_init utf8map \
uhitm vault version vision weapon were wield \
windows wizard wizcmds worm worn write zap
# the date file
DATEFILES = date
# ---------------
# platforms / OS
# ---------------
# Files for sys.vms
OPENVMSFILES = vmsfiles vmsmail vmsmisc vmstty vmsunix
OPENVMSMAIN = vmsmain
# ---------------
# window ports
# ---------------
# files for a straight tty interface
WINTTYFILES = getline termcap topl wintty
# Files for curses interface
WINCURSESFILES = cursmain curswins cursmisc cursdial cursstat cursinit \
cursmesg cursinvt
# Files for X11 interface
WINX11FILES = Window dialogs winX winmap winmenu winmesg winmisc \
winstat wintext winval
# Files for Qt interface
WINQTFILES = qt_bind qt_click qt_clust qt_delay qt_glyph qt_icon qt_inv \
qt_key qt_line qt_main qt_map qt_menu qt_msg qt_plsel qt_rip qt_set \
qt_stat qt_str qt_streq qt_svsel qt_win qt_xcmd qt_yndlg
# shared win files
#WINSHAREFILES = ioctl
#
# Files for a Qt 4, Qt 5, or Qt 6 interface
#
# generated source files made by Qt's 'moc' program from $(WINQT)qt_*.h;
# appended to WINQTSRC for use by 'make depend'
# WINQTMOC = qt_kde0.moc qt_main.moc qt_map.moc qt_menu.moc qt_msg.moc \
# qt_plsel.moc qt_set.moc qt_stat.moc qt_xcmd.moc qt_yndlg.moc
# WINQTSRC = $(WINQT)qt_bind.cpp $(WINQT)qt_click.cpp \
# $(WINQT)qt_clust.cpp $(WINQT)qt_delay.cpp \
# $(WINQT)qt_glyph.cpp $(WINQT)qt_icon.cpp $(WINQT)qt_inv.cpp \
# $(WINQT)qt_key.cpp $(WINQT)qt_line.cpp $(WINQT)qt_main.cpp \
# $(WINQT)qt_map.cpp $(WINQT)qt_menu.cpp $(WINQT)qt_msg.cpp \
# $(WINQT)qt_plsel.cpp $(WINQT)qt_rip.cpp $(WINQT)qt_set.cpp \
# $(WINQT)qt_stat.cpp $(WINQT)qt_str.cpp $(WINQT)qt_streq.cpp \
# $(WINQT)qt_svsel.cpp $(WINQT)qt_win.cpp $(WINQT)qt_xcmd.cpp \
# $(WINQT)qt_yndlg.cpp $(WINQTMOC) tile.c
# WINQTOBJ = $(TARGETPFX)qt_bind.o $(TARGETPFX)qt_click.o \
# $(TARGETPFX)qt_clust.o $(TARGETPFX)qt_delay.o \
# $(TARGETPFX)qt_glyph.o $(TARGETPFX)qt_icon.o \
# $(TARGETPFX)qt_inv.o $(TARGETPFX)qt_key.o $(TARGETPFX)qt_line.o \
# $(TARGETPFX)qt_main.o $(TARGETPFX)qt_map.o $(TARGETPFX)qt_menu.o \
# $(TARGETPFX)qt_msg.o $(TARGETPFX)qt_plsel.o $(TARGETPFX)qt_rip.o \
# $(TARGETPFX)qt_set.o $(TARGETPFX)qt_stat.o $(TARGETPFX)qt_str.o \
# $(TARGETPFX)qt_streq.o $(TARGETPFX)qt_svsel.o $(TARGETPFX)qt_win.o \
# $(TARGETPFX)qt_xcmd.o $(TARGETPFX)qt_yndlg.o #$(TARGETPFX)tile.o
#
# -----------------
# derived variables
# -----------------
HACKSRC = $(addsuffix .c, $(addprefix $(SRC), $(HACKFILES)))
DATESRC = $(addsuffix .c, $(addprefix $(SRC), $(DATEFILES)))
VMSSRC = $(addsuffix .c, $(addprefix $(SYSVMS), $(OPENVMSFILES)))
WINTTYSRC = $(addsuffix .c, $(addprefix $(WINTTY), $(WINTTYFILES)))
WINCURSESSRC = $(addsuffix .c, $(addprefix $(WINCURS), $(WINCURSESFILES)))
WINX11SRC = $(addsuffix .c, $(addprefix $(WINX11), $(WINX11FILES)))
WINQTSRC = $(addsuffix .cpp, $(addprefix $(WINQT), $(WINQTFILES)))
#WINSHARESRC = $(addsuffix .c, $(addprefix $(WINSHR), $(WINSHAREFILES)))
MAINSRC = $(addsuffix .c, $(addprefix $(SYSVMS), $(OPENVMSMAIN)))
HACKOBJS = $(addsuffix .obj, $(HACKFILES))
DATEOBJ = $(addsuffix .obj, $(DATEFILES))
VMSOBJS = $(addsuffix .obj, $(OPENVMSFILES))
WINTTYOBJS = $(addsuffix .obj, $(WINTTYFILES))
#WINCURSESOBJS = $(addsuffix .obj, $(WINCURSESFILES))
#WINX11OBJS = $(addsuffix .obj, $(WINX11FILES))
#WINQTOBJS = $(addsuffix .obj, $(WINQTFILES))
#WINSHAREOBJS = $(addsuffix .obj, $(WINSHAREFILES))
MAINOBJ = $(addsuffix .obj, $(OPENVMSMAIN))
# file for regular expression matching
#REGEXFILE ?= posixregex
#REGEXOBJ ?= pmatchregex
REGEXFILE ?= cppregex
ifeq "$(REGEXFILE)" "cppregex"
REGEXSRC = $(addsuffix .cpp, $(addprefix $(SYSSHR), $(REGEXFILE)))
else
REGEXSRC = $(addsuffix .c, $(addprefix $(SYSSHR), $(REGEXFILE)))
endif
REGEXOBJ = $(addsuffix .obj, $(REGEXFILE))
# file for termcap
TERMCAPFILE ?= tclib
TERMCAPSRC = $(addsuffix .c, $(addprefix $(SYSSHR), $(TERMCAPFILE)))
TERMCAPOBJ = $(addsuffix .obj, $(TERMCAPFILE))
# if you defined RANDOM in unixconf.h since your system did not come
# with a reasonable random number generator
# RANDOBJ = $(TARGETPFX)random.obj
#RANDOBJ =
LUABASESRC = lapi lauxlib lbaselib lcode lcorolib lctype ldblib \
ldebug ldo ldump lfunc lgc linit liolib llex \
lmathlib lmem loadlib lobject lopcodes loslib \
lparser lstate lstring lstrlib ltable ltablib \
ltm lundump lutf8lib lvm lzio
#LUASRC = $(addsuffix .c, $(addprefix $(LUASRCDIR), $(LUABASESRC)))
LUAOBJS = $(addsuffix .obj, $(LUABASESRC))
LUALIBOBJS = $(addsuffix .obj$(comma), $(LUABASESRC))
LUASPOTLESSOBJS = $(addsuffix .obj;*$(comma), $(LUABASESRC))
ALLSRC = $(HACKSRC) $(VMSSRC) $(WINTTYSRC) $(WINCURSESSRC) \
$(WINX11SRC) $(WINQTSRC) $(WINSHARESRC) \
$(REGEXSRC) $(TERMCAPSRC)
#
# $(TARGETPFX)date.o is not included in this list
ALLOBJS = $(HACKOBJS) $(VMSOBJS) $(WINTTYOBJS) $(RANDOBJ) \
$(WINCURSESOBJS) $(WINX11OBJS) $(WINQTOBJS) \
$(WINSHAREOBJS) $(REGEXOBJ) $(TERMCAPOBJ)
GAME = nethack
# GAME = nethack.prg
GAMEBIN = $(GAME).exe
LINKOBJLIST = $(addsuffix $(comma), $(ALLOBJS))
CLEANFILES = $(addsuffix ;*$(comma), $(ALLOBJS) $(MAINOBJ) \
$(GAMEBIN)) \
$(DATEOBJ);*
SPOTLESSFILES = $(addsuffix ;*$(comma), $(LUASPOTLESSOBJS) \
luaplaceholder.obj)
# rules
%.obj: $(SRC)%.c
$(CC) $(CFLAGS) $< /OBJECT=$@
%.obj: $(SYSVMS)%.c
$(CC) $(CFLAGS) $< /OBJECT=$@
%.obj: $(SYSSHR)%.c
$(CC) $(CFLAGS) $< /OBJECT=$@
%.obj: $(SYSSHR)%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
%.obj: $(LUASRCDIR)%.c
$(CC) $(CFLAGS) /define=(LUA_USE_C89) $< /OBJECT=$@
# targets
.PHONY: SysVMS all pregame $(GAME) clean spotless package
.PHONY: tell-fetch-lua fetch-lua
# first target is also the default target for 'make' without any arguments
all: $(GAME)
@echo ""
pregame:
$(PREGAME)
$(GAME): pregame $(HACKLIB) $(MAKEDEFS) $(LUALIB) $(WAVS) $(GAMEBIN)
@echo "$(GAME) is up to date."
$(GAMEBIN): $(LUALIB) $(MAINOBJ) $(ALLOBJS) $(DATEOBJ)
@echo "Linking $(GAME)."
# @echo $(TARGET_LINK) $(TARGET_LFLAGS) $(MAINOBJ), \
# $(LINKOBJLIST) $(DATEOBJ) \
# /EXECUTABLE=$@ \
# +sys$$common:[lua.lib]liblua.olb/library
$(AT)$(TARGET_LINK) $(TARGET_LFLAGS) $(MAINOBJ), \
$(LINKOBJLIST) $(DATEOBJ) \
/EXECUTABLE=$@\
+$(LUALIB)/library
hacklib.olb: $(HACKLIBOBJLIST)
if f$$search("hacklib.olb").eqs."" then -
library/create hacklib.olb/object
library/insert/replace hacklib.olb $(HACKLIBOBJLIST)
#$(WINLIB) $(TARGET_LIBS) $(LUALIB)
$(INCL)nhlua.h:
echo "/* nhlua.h - generated by Makefile.vms */" > $@
@echo \#"include ""$(LUASRCINCDIR)lua.h""" >> $@
@echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@
@echo \#"include ""$(LUASRCINCDIR)lualib.h""" >> $@
@echo \#"include ""$(LUASRCINCDIR)lauxlib.h""" >> $@
@echo "/*nhlua.h*/" >> $@
#$(INCL)nhlua.h:
# echo "/* nhlua.h - generated by -vms9 */" > $@
# @echo \#"include ""sys$$common:[lua.include]lua.h""" >> $@
# @echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@
# @echo \#"include ""sys$$common:[lua.include]lualib.h""" >> $@
# @echo \#"include ""sys$$common:[lua.include]lauxlib.h""" >> $@
# @echo "/*nhlua.h*/" >> $@
$(LUALIB): [-.lib.lua]lua$(LUAVER).dir $(LUAOBJS) luaplaceholder.obj
if f$$search("$(LUALIB)").eqs."" then library/create/obj $(LUALIB)
library/insert/replace $(LUALIB) $(LUALIBOBJS) luaplaceholder.obj
lapi.obj: $(LUASRCDIR)lapi.c
lauxlib.obj: $(LUASRCDIR)lauxlib.c
lbaselib.obj: $(LUASRCDIR)lbaselib.c
lcode.obj: $(LUASRCDIR)lcode.c
lcorolib.obj: $(LUASRCDIR)lcorolib.c
lctype.obj: $(LUASRCDIR)lctype.c
ldblib.obj: $(LUASRCDIR)ldblib.c
ldebug.obj: $(LUASRCDIR)ldebug.c
ldo.obj: $(LUASRCDIR)ldo.c
ldump.obj: $(LUASRCDIR)ldump.c
lfunc.obj: $(LUASRCDIR)lfunc.c
lgc.obj: $(LUASRCDIR)lgc.c
linit.obj: $(LUASRCDIR)linit.c
liolib.obj: $(LUASRCDIR)liolib.c
llex.obj: $(LUASRCDIR)llex.c
lmathlib.obj: $(LUASRCDIR)lmathlib.c
lmem.obj: $(LUASRCDIR)lmem.c
loadlib.obj: $(LUASRCDIR)loadlib.c
lobject.obj: $(LUASRCDIR)lobject.c
lopcodes.obj: $(LUASRCDIR)lopcodes.c
loslib.obj: $(LUASRCDIR)loslib.c
lparser.obj: $(LUASRCDIR)lparser.c
lstate.obj: $(LUASRCDIR)lstate.c
lstring.obj: $(LUASRCDIR)lstring.c
lstrlib.obj: $(LUASRCDIR)lstrlib.c
ltable.obj: $(LUASRCDIR)ltable.c
ltablib.obj: $(LUASRCDIR)ltablib.c
ltm.obj: $(LUASRCDIR)ltm.c
lundump.obj: $(LUASRCDIR)lundump.c
lutf8lib.obj: $(LUASRCDIR)lutf8lib.c
lvm.obj: $(LUASRCDIR)lvm.c
lzio.obj: $(LUASRCDIR)lzio.c
#LUABASESRC = lapi lauxlib lbaselib lcode lcorolib lctype ldblib \
# ldebug ldo ldump lfunc lgc linit liolib llex \
# lmathlib lmem loadlib lobject lopcodes loslib \
# lparser lstate lstring lstrlib ltable ltablib \
# ltm lundump lutf8lib lvm lzio
luaplaceholder.obj: luaplaceholder.c
$(CC) $(CFLAGS) luaplaceholder.c /OBJECT=$@
luaplaceholder.c:
@echo int placeholder = 1; >luaplaceholder.c
[-.lib]lua.dir:
create/directory [-.lib.lua]
[-]lib.dir:
create/directory [-.lib]
[-.lib.lua]lua$(LUAVER).dir:
@echo You need to make fetch-lua
false
fetch-lua: [-]lib.dir [-.lib]lua.dir
if f$$search("[-.lib.lua]lua$(LUAVER).tgz").eqs."" then \
curl http://www.lua.org/ftp/lua-$(LUADOTVER).tar.gz \
--output [-.lib.lua]lua$(LUAVER).tgz
if f$$search("[-.lib.lua]lua$(LUAVER).tgz").nes."" then \
gzip --force -d [-.lib.lua]lua$(LUAVER).tgz
if f$$search("[-.lib.lua]lua$(LUAVER).tar").nes."" then \
pipe set def [-.lib.lua] && \
tar -xf lua$(LUAVER).tar && \
set def [--.src]
if (f$$search("[-.lib.lua]lua-$(LUAUNDERVER).DIR;1").nes."" \
.AND. f$$search("[-.lib.lua]lua$(LUAVER).dir;1").eqs."") then \
rename [-.lib.lua]lua-$(LUAUNDERVER).DIR;1 \
[-.lib.lua]lua$(LUAVER).dir;1
tile.c: $(WINSHR)tilemap.c $(HACK_H)
@( cd $(UTIL) ; $(MAKE) $(SRC)tile.c )
# date.c should be recompiled any time any of the source or include code
# is modified.
$(DATEOBJ): $(DATESRC) $(HACK_H) $(HACKCSRC) $(ALLOBJS)
$(TARGET_CC) $(TARGET_CFLAGS) $(GITHASH) $(GITBRANCH) \
/OBJECT=$@ $(DATESRC)
tags: $(CSOURCES)
@echo ctags -tw ...
@ctags -tw $(CSOURCES)
@( cd $(INCL) ; ctags -tw $(HSOURCES) )
@( cd $(UTIL) ; $(MAKE) tags )
clean:
-delete/log $(CLEANFILES)
spotless: clean
-delete/log $(SPOTLESSFILES) $(INCL)nhlua.h;*
# -$(RM) $(GAMEBIN);*
package:
@echo packaging complete (nothing to do).
# VMS-specific code
vmsmain.obj: $(SYSVMS)vmsmain.c $(HACK_H) $(INCL)dlb.h
vmstty.obj: $(SYSVMS)vmstty.c $(HACK_H) $(INCL)wintty.h \
$(INCL)tcap.h
vmsunix.obj: $(SYSVMS)vmsunix.c $(HACK_H)
vmsmisc.obj: $(SYSVMS)vmsmisc.c $(SYSVMS)oldcrtl.c $(CONFIG_H)
vmsfiles.obj: $(SYSVMS)vmsfiles.c $(CONFIG_H)
vmsmail.obj: $(SYSVMS)vmsmail.c $(CONFIG_H) $(INCL)mail.h \
$(INCL)wintype.h $(INCL)winprocs.h $(INCL)color.h
# DO NOT DELETE THIS LINE OR CHANGE ANYTHING BEYOND IT
#
$(TARGETPFX)pcmain.obj: $(SYSSHR)pcmain.c $(HACK_H) $(INCL)dlb.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcmain.c
$(TARGETPFX)pcsys.obj: $(SYSSHR)pcsys.c $(HACK_H) $(INCL)wintty.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcsys.c
$(TARGETPFX)pctty.obj: $(SYSSHR)pctty.c $(HACK_H) $(INCL)wintty.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pctty.c
$(TARGETPFX)pcunix.obj: $(SYSSHR)pcunix.c $(HACK_H) $(INCL)wintty.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pcunix.c
$(TARGETPFX)pmatchregex.obj: $(SYSSHR)pmatchregex.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)pmatchregex.c
$(TARGETPFX)posixregex.obj: $(SYSSHR)posixregex.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)posixregex.c
$(TARGETPFX)random.obj: $(SYSSHR)random.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)random.c
$(TARGETPFX)ioctl.obj: $(SYSSHR)ioctl.c $(HACK_H) $(INCL)tcap.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)ioctl.c
$(TARGETPFX)unixtty.obj: $(SYSSHR)unixtty.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSSHR)unixtty.c
$(TARGETPFX)unixmain.obj: $(SYSUNIX)unixmain.c $(HACK_H) $(INCL)dlb.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixmain.c
$(TARGETPFX)unixunix.obj: $(SYSUNIX)unixunix.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixunix.c
$(TARGETPFX)unixres.obj: $(SYSUNIX)unixres.c $(CONFIG_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(SYSUNIX)unixres.c
$(TARGETPFX)getline.obj: $(WINTTY)getline.c $(HACK_H) $(INCL)wintty.h \
$(INCL)func_tab.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)getline.c
$(TARGETPFX)termcap.obj: $(WINTTY)termcap.c $(HACK_H) $(INCL)wintty.h \
$(INCL)tcap.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)termcap.c
$(TARGETPFX)topl.obj: $(WINTTY)topl.c $(HACK_H) $(INCL)tcap.h \
$(INCL)wintty.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)topl.c
$(TARGETPFX)wintty.obj: $(WINTTY)wintty.c $(HACK_H) $(INCL)dlb.h \
$(INCL)tcap.h $(INCL)wintty.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINTTY)wintty.c
$(TARGETPFX)cursmain.obj: $(WINCURS)cursmain.c $(HACK_H) $(INCL)wincurs.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmain.c
$(TARGETPFX)curswins.obj: $(WINCURS)curswins.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)curswins.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)curswins.c
$(TARGETPFX)cursmisc.obj: $(WINCURS)cursmisc.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursmisc.h \
$(INCL)func_tab.h $(INCL)dlb.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmisc.c
$(TARGETPFX)cursdial.obj: $(WINCURS)cursdial.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursdial.h \
$(INCL)func_tab.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursdial.c
$(TARGETPFX)cursstat.obj: $(WINCURS)cursstat.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursstat.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursstat.c
$(TARGETPFX)cursinit.obj: $(WINCURS)cursinit.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursinit.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursinit.c
$(TARGETPFX)cursmesg.obj: $(WINCURS)cursmesg.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursmesg.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursmesg.c
$(TARGETPFX)cursinvt.obj: $(WINCURS)cursinvt.c $(HACK_H) \
$(INCL)wincurs.h $(WINCURS)cursinvt.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCURS)cursinvt.c
$(TARGETPFX)Window.obj: $(WINX11)Window.c $(INCL)xwindowp.h \
$(INCL)xwindow.h $(CONFIG_H) $(INCL)lint.h \
$(INCL)winX.h $(INCL)color.h $(INCL)wintype.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)Window.c
$(TARGETPFX)dialogs.obj: $(WINX11)dialogs.c $(CONFIG_H) $(INCL)lint.h \
$(INCL)winX.h $(INCL)color.h $(INCL)wintype.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)dialogs.c
$(TARGETPFX)winX.obj: $(WINX11)winX.c $(HACK_H) $(INCL)winX.h \
$(INCL)dlb.h $(INCL)xwindow.h $(WINX11)nh72icon \
$(WINX11)nh56icon $(WINX11)nh32icon
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winX.c
$(TARGETPFX)winmap.obj: $(WINX11)winmap.c $(INCL)xwindow.h $(HACK_H) \
$(INCL)dlb.h $(INCL)winX.h $(INCL)tile2x11.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmap.c
$(TARGETPFX)winmenu.obj: $(WINX11)winmenu.c $(HACK_H) $(INCL)winX.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmenu.c
$(TARGETPFX)winmesg.obj: $(WINX11)winmesg.c $(INCL)xwindow.h $(HACK_H) \
$(INCL)winX.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmesg.c
$(TARGETPFX)winmisc.obj: $(WINX11)winmisc.c $(HACK_H) $(INCL)func_tab.h \
$(INCL)winX.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winmisc.c
$(TARGETPFX)winstat.obj: $(WINX11)winstat.c $(HACK_H) $(INCL)winX.h \
$(INCL)xwindow.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winstat.c
$(TARGETPFX)wintext.obj: $(WINX11)wintext.c $(HACK_H) $(INCL)winX.h \
$(INCL)xwindow.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)wintext.c
$(TARGETPFX)winval.obj: $(WINX11)winval.c $(HACK_H) $(INCL)winX.h
$(TARGET_CC) $(TARGET_CFLAGS) $(X11CFLAGS) /OBJECT=$@ $(WINX11)winval.c
$(TARGETPFX)tile.obj: tile.c $(HACK_H)
$(TARGETPFX)winshim.obj: $(WINSHIM)winshim.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINSHIM)winshim.c
$(TARGETPFX)cppregex.obj: $(SYSSHR)cppregex.cpp $(CONFIG_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(SYSSHR)cppregex.cpp
$(TARGETPFX)qt_bind.obj: $(WINQT)qt_bind.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \
$(WINQT)qt_kde0.h $(WINQT)qt_click.h $(WINQT)qt_delay.h \
$(WINQT)qt_xcmd.h $(WINQT)qt_key.h $(WINQT)qt_map.h \
$(WINQT)qt_win.h $(WINQT)qt_clust.h $(WINQT)qt_menu.h \
$(WINQT)qt_rip.h $(WINQT)qt_msg.h $(WINQT)qt_plsel.h \
$(WINQT)qt_svsel.h $(WINQT)qt_set.h $(WINQT)qt_stat.h \
$(WINQT)qt_icon.h $(WINQT)qt_streq.h $(WINQT)qt_line.h \
$(WINQT)qt_yndlg.h $(WINQT)qt_str.h $(INCL)dlb.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_bind.cpp
$(TARGETPFX)qt_click.obj: $(WINQT)qt_click.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_click.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_click.cpp
$(TARGETPFX)qt_clust.obj: $(WINQT)qt_clust.cpp $(WINQT)qt_clust.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_clust.cpp
$(TARGETPFX)qt_delay.obj: $(WINQT)qt_delay.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_delay.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_delay.cpp
$(TARGETPFX)qt_glyph.obj: $(WINQT)qt_glyph.cpp $(HACK_H) \
$(INCL)tile2x11.h $(WINQT)qt_pre.h $(WINQT)qt_post.h \
$(WINQT)qt_glyph.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \
$(WINQT)qt_kde0.h $(WINQT)qt_set.h $(WINQT)qt_inv.h \
$(WINQT)qt_map.h $(WINQT)qt_win.h $(WINQT)qt_clust.h \
$(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_glyph.cpp
$(TARGETPFX)qt_icon.obj: $(WINQT)qt_icon.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_icon.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_icon.cpp
$(TARGETPFX)qt_inv.obj: $(WINQT)qt_inv.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_inv.h $(WINQT)qt_glyph.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_set.h \
$(WINQT)qt_bind.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_inv.cpp
$(TARGETPFX)qt_key.obj: $(WINQT)qt_key.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_key.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_key.cpp
$(TARGETPFX)qt_line.obj: $(WINQT)qt_line.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_line.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_line.cpp
$(TARGETPFX)qt_main.obj: $(WINQT)qt_main.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \
qt_main.moc $(WINQT)qt_bind.h $(WINQT)qt_glyph.h \
$(WINQT)qt_inv.h $(WINQT)qt_key.h $(WINQT)qt_map.h \
$(WINQT)qt_win.h $(WINQT)qt_clust.h $(WINQT)qt_msg.h \
$(WINQT)qt_set.h $(WINQT)qt_stat.h $(WINQT)qt_icon.h \
$(WINQT)qt_str.h qt_kde0.moc $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_main.cpp
$(TARGETPFX)qt_map.obj: $(WINQT)qt_map.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_map.h $(WINQT)qt_win.h \
$(WINQT)qt_clust.h qt_map.moc $(WINQT)qt_click.h \
$(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_map.cpp
$(TARGETPFX)qt_menu.obj: $(WINQT)qt_menu.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_menu.h $(WINQT)qt_win.h \
$(WINQT)qt_rip.h qt_menu.moc $(WINQT)qt_key.h \
$(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_streq.h \
$(WINQT)qt_line.h $(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_menu.cpp
$(TARGETPFX)qt_msg.obj: $(WINQT)qt_msg.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_msg.h $(WINQT)qt_win.h \
qt_msg.moc $(WINQT)qt_map.h $(WINQT)qt_clust.h \
$(WINQT)qt_set.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \
$(WINQT)qt_kde0.h $(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_msg.cpp
$(TARGETPFX)qt_plsel.obj: $(WINQT)qt_plsel.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_plsel.h qt_plsel.moc \
$(WINQT)qt_bind.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \
$(WINQT)qt_glyph.h $(WINQT)qt_set.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_plsel.cpp
$(TARGETPFX)qt_rip.obj: $(WINQT)qt_rip.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_rip.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_rip.cpp
$(TARGETPFX)qt_set.obj: $(WINQT)qt_set.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h qt_set.moc \
$(WINQT)qt_glyph.h $(WINQT)qt_xcmd.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_set.cpp
$(TARGETPFX)qt_stat.obj: $(WINQT)qt_stat.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_stat.h $(WINQT)qt_win.h \
$(WINQT)qt_icon.h qt_stat.moc $(WINQT)qt_set.h \
$(WINQT)qt_bind.h $(WINQT)qt_main.h $(WINQT)qt_kde0.h \
$(WINQT)qt_str.h $(WINQT)qt_xpms.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_stat.cpp
$(TARGETPFX)qt_str.obj: $(WINQT)qt_str.cpp $(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_str.cpp
$(TARGETPFX)qt_streq.obj: $(WINQT)qt_streq.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_streq.h $(WINQT)qt_line.h \
$(WINQT)qt_str.h $(WINQT)qt_set.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_streq.cpp
$(TARGETPFX)qt_svsel.obj: $(WINQT)qt_svsel.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_svsel.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_str.h \
$(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_svsel.cpp
$(TARGETPFX)qt_win.obj: $(WINQT)qt_win.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_win.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_click.h \
$(WINQT)qt_glyph.h $(WINQT)qt_inv.h $(WINQT)qt_key.h \
$(WINQT)qt_icon.h $(WINQT)qt_map.h $(WINQT)qt_clust.h \
$(WINQT)qt_menu.h $(WINQT)qt_rip.h $(WINQT)qt_msg.h \
$(WINQT)qt_set.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_win.cpp
$(TARGETPFX)qt_xcmd.obj: $(WINQT)qt_xcmd.cpp $(HACK_H) $(INCL)func_tab.h \
$(WINQT)qt_pre.h $(WINQT)qt_post.h $(WINQT)qt_xcmd.h \
qt_xcmd.moc $(WINQT)qt_key.h $(WINQT)qt_bind.h \
$(WINQT)qt_main.h $(WINQT)qt_kde0.h $(WINQT)qt_set.h \
$(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_xcmd.cpp
$(TARGETPFX)qt_yndlg.obj: $(WINQT)qt_yndlg.cpp $(HACK_H) $(WINQT)qt_pre.h \
$(WINQT)qt_post.h $(WINQT)qt_yndlg.h qt_yndlg.moc \
$(WINQT)qt_key.h $(WINQT)qt_str.h $(QTn_H)
$(TARGET_CXX) $(TARGET_CXXFLAGS) /OBJECT=$@ $(WINQT)qt_yndlg.cpp
qt_kde0.moc: $(WINQT)qt_kde0.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_kde0.h
qt_main.moc: $(WINQT)qt_main.h $(WINQT)qt_kde0.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_main.h
qt_map.moc: $(WINQT)qt_map.h $(WINQT)qt_win.h $(WINQT)qt_clust.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_map.h
qt_menu.moc: $(WINQT)qt_menu.h $(WINQT)qt_win.h $(WINQT)qt_rip.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_menu.h
qt_msg.moc: $(WINQT)qt_msg.h $(WINQT)qt_win.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_msg.h
qt_plsel.moc: $(WINQT)qt_plsel.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_plsel.h
qt_set.moc: $(WINQT)qt_set.h $(WINQT)qt_bind.h $(WINQT)qt_main.h \
$(WINQT)qt_kde0.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_set.h
qt_stat.moc: $(WINQT)qt_stat.h $(WINQT)qt_win.h $(WINQT)qt_icon.h \
$(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_stat.h
qt_xcmd.moc: $(WINQT)qt_xcmd.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_xcmd.h
qt_yndlg.moc: $(WINQT)qt_yndlg.h $(QTn_H)
$(MOCPATH) /OBJECT=$@ $(WINQT)qt_yndlg.h
$(TARGETPFX)tile.obj: tile.c $(HACK_H)
$(TARGETPFX)wc_chainin.obj: $(WINCHAIN)wc_chainin.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_chainin.c
$(TARGETPFX)wc_chainout.obj: $(WINCHAIN)wc_chainout.c $(HACK_H)
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_chainout.c
$(TARGETPFX)wc_trace.obj: $(WINCHAIN)wc_trace.c $(HACK_H) $(INCL)wintty.h \
$(INCL)func_tab.h
$(TARGET_CC) $(TARGET_CFLAGS) /OBJECT=$@ $(WINCHAIN)wc_trace.c
$(TARGETPFX)allmain.obj: allmain.c $(HACK_H)
$(TARGETPFX)alloc.obj: alloc.c $(CONFIG_H)
$(TARGETPFX)apply.obj: apply.c $(HACK_H)
$(TARGETPFX)artifact.obj: artifact.c $(HACK_H) $(INCL)artifact.h
$(TARGETPFX)attrib.obj: attrib.c $(HACK_H)
$(TARGETPFX)ball.obj: ball.c $(HACK_H)
$(TARGETPFX)bones.obj: bones.c $(HACK_H)
$(TARGETPFX)botl.obj: botl.c $(HACK_H)
$(TARGETPFX)cmd.obj: cmd.c $(HACK_H) $(INCL)func_tab.h
$(TARGETPFX)dbridge.obj: dbridge.c $(HACK_H)
$(TARGETPFX)decl.obj: decl.c $(HACK_H)
$(TARGETPFX)detect.obj: detect.c $(HACK_H) $(INCL)artifact.h
$(TARGETPFX)dig.obj: dig.c $(HACK_H)
$(TARGETPFX)display.obj: display.c $(HACK_H)
$(TARGETPFX)dlb.obj: dlb.c $(CONFIG_H) $(INCL)dlb.h
$(TARGETPFX)do.obj: do.c $(HACK_H)
$(TARGETPFX)do_name.obj: do_name.c $(HACK_H)
$(TARGETPFX)do_wear.obj: do_wear.c $(HACK_H)
$(TARGETPFX)dog.obj: dog.c $(HACK_H)
$(TARGETPFX)dogmove.obj: dogmove.c $(HACK_H) $(INCL)mfndpos.h
$(TARGETPFX)dokick.obj: dokick.c $(HACK_H)
$(TARGETPFX)dothrow.obj: dothrow.c $(HACK_H)
$(TARGETPFX)drawing.obj: drawing.c $(CONFIG_H) $(INCL)color.h \
$(INCL)rm.h $(INCL)objclass.h $(INCL)defsym.h \
$(INCL)objects.h $(INCL)wintype.h $(INCL)sym.h
$(TARGETPFX)dungeon.obj: dungeon.c $(HACK_H) $(INCL)dgn_file.h \
$(INCL)dlb.h
$(TARGETPFX)eat.obj: eat.c $(HACK_H)
$(TARGETPFX)end.obj: end.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)engrave.obj: engrave.c $(HACK_H)
$(TARGETPFX)exper.obj: exper.c $(HACK_H)
$(TARGETPFX)explode.obj: explode.c $(HACK_H)
$(TARGETPFX)extralev.obj: extralev.c $(HACK_H)
$(TARGETPFX)files.obj: files.c $(HACK_H) $(INCL)dlb.h $(INCL)wintty.h \
#zlib.h
$(TARGETPFX)fountain.obj: fountain.c $(HACK_H)
$(TARGETPFX)hack.obj: hack.c $(HACK_H)
$(TARGETPFX)hacklib.obj: hacklib.c $(HACK_H)
$(TARGETPFX)insight.obj: insight.c $(HACK_H)
$(TARGETPFX)invent.obj: invent.c $(HACK_H)
$(TARGETPFX)isaac64.obj: isaac64.c $(CONFIG_H) $(INCL)isaac64.h
$(TARGETPFX)light.obj: light.c $(HACK_H)
$(TARGETPFX)lock.obj: lock.c $(HACK_H)
$(TARGETPFX)mail.obj: mail.c $(HACK_H) $(INCL)mail.h
$(TARGETPFX)makemon.obj: makemon.c $(HACK_H)
$(TARGETPFX)mcastu.obj: mcastu.c $(HACK_H)
$(TARGETPFX)mdlib.obj: mdlib.c $(CONFIG_H) $(INCL)permonst.h \
$(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \
$(INCL)monsters.h $(INCL)objclass.h \
$(INCL)defsym.h $(INCL)objects.h $(INCL)wintype.h \
$(INCL)sym.h $(INCL)artilist.h $(INCL)dungeon.h \
$(INCL)sndprocs.h $(INCL)seffects.h $(INCL)obj.h \
$(INCL)monst.h $(INCL)mextra.h $(INCL)you.h \
$(INCL)attrib.h $(INCL)prop.h $(INCL)skills.h \
$(INCL)context.h $(INCL)flag.h $(INCL)dlb.h
$(TARGETPFX)mhitm.obj: mhitm.c $(HACK_H) $(INCL)artifact.h
$(TARGETPFX)mhitu.obj: mhitu.c $(HACK_H) $(INCL)artifact.h
$(TARGETPFX)minion.obj: minion.c $(HACK_H)
$(TARGETPFX)mklev.obj: mklev.c $(HACK_H)
$(TARGETPFX)mkmap.obj: mkmap.c $(HACK_H) $(INCL)sp_lev.h
$(TARGETPFX)mkmaze.obj: mkmaze.c $(HACK_H) $(INCL)sp_lev.h
$(TARGETPFX)mkobj.obj: mkobj.c $(HACK_H)
$(TARGETPFX)mkroom.obj: mkroom.c $(HACK_H)
$(TARGETPFX)mon.obj: mon.c $(HACK_H) $(INCL)mfndpos.h
$(TARGETPFX)mondata.obj: mondata.c $(HACK_H)
$(TARGETPFX)monmove.obj: monmove.c $(HACK_H) $(INCL)mfndpos.h \
$(INCL)artifact.h
$(TARGETPFX)monst.obj: monst.c $(CONFIG_H) $(INCL)permonst.h \
$(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \
$(INCL)monsters.h $(INCL)wintype.h $(INCL)sym.h \
$(INCL)defsym.h $(INCL)color.h
$(TARGETPFX)mplayer.obj: mplayer.c $(HACK_H)
$(TARGETPFX)mthrowu.obj: mthrowu.c $(HACK_H)
$(TARGETPFX)muse.obj: muse.c $(HACK_H)
$(TARGETPFX)music.obj: music.c $(HACK_H)
$(TARGETPFX)nhlua.obj: nhlua.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)nhlsel.obj: nhlsel.c $(HACK_H) $(INCL)sp_lev.h
$(TARGETPFX)nhlobj.obj: nhlobj.c $(HACK_H) $(INCL)sp_lev.h
$(TARGETPFX)o_init.obj: o_init.c $(HACK_H)
$(TARGETPFX)objects.obj: objects.c $(CONFIG_H) $(INCL)obj.h \
$(INCL)prop.h $(INCL)skills.h $(INCL)color.h \
$(INCL)objclass.h $(INCL)defsym.h $(INCL)objects.h
$(TARGETPFX)objnam.obj: objnam.c $(HACK_H)
$(TARGETPFX)options.obj: options.c $(CONFIG_H) $(INCL)objclass.h \
$(INCL)defsym.h $(INCL)objects.h $(INCL)flag.h \
$(HACK_H) $(INCL)tcap.h $(INCL)optlist.h
$(TARGETPFX)pager.obj: pager.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)pickup.obj: pickup.c $(HACK_H)
$(TARGETPFX)pline.obj: pline.c $(HACK_H)
$(TARGETPFX)polyself.obj: polyself.c $(HACK_H)
$(TARGETPFX)potion.obj: potion.c $(HACK_H)
$(TARGETPFX)pray.obj: pray.c $(HACK_H)
$(TARGETPFX)priest.obj: priest.c $(HACK_H) $(INCL)mfndpos.h
$(TARGETPFX)quest.obj: quest.c $(HACK_H)
$(TARGETPFX)questpgr.obj: questpgr.c $(HACK_H) $(INCL)dlb.h \
$(INCL)wintty.h
$(TARGETPFX)read.obj: read.c $(HACK_H)
$(TARGETPFX)rect.obj: rect.c $(HACK_H)
$(TARGETPFX)region.obj: region.c $(HACK_H)
$(TARGETPFX)restore.obj: restore.c $(HACK_H) $(INCL)tcap.h
$(TARGETPFX)rip.obj: rip.c $(HACK_H)
$(TARGETPFX)rnd.obj: rnd.c $(HACK_H) $(INCL)isaac64.h
$(TARGETPFX)role.obj: role.c $(HACK_H)
$(TARGETPFX)rumors.obj: rumors.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)save.obj: save.c $(HACK_H)
$(TARGETPFX)sfstruct.obj: sfstruct.c $(HACK_H)
$(TARGETPFX)shk.obj: shk.c $(HACK_H)
$(TARGETPFX)shknam.obj: shknam.c $(HACK_H)
$(TARGETPFX)sit.obj: sit.c $(HACK_H) $(INCL)artifact.h
$(TARGETPFX)sounds.obj: sounds.c $(HACK_H)
$(TARGETPFX)sp_lev.obj: sp_lev.c $(HACK_H) $(INCL)sp_lev.h
$(TARGETPFX)spell.obj: spell.c $(HACK_H)
$(TARGETPFX)steal.obj: steal.c $(HACK_H)
$(TARGETPFX)steed.obj: steed.c $(HACK_H)
$(TARGETPFX)symbols.obj: symbols.c $(HACK_H) $(INCL)tcap.h
$(TARGETPFX)sys.obj: sys.c $(HACK_H)
$(TARGETPFX)teleport.obj: teleport.c $(HACK_H)
$(TARGETPFX)timeout.obj: timeout.c $(HACK_H)
$(TARGETPFX)topten.obj: topten.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)track.obj: track.c $(HACK_H)
$(TARGETPFX)trap.obj: trap.c $(HACK_H)
$(TARGETPFX)u_init.obj: u_init.c $(HACK_H)
$(TARGETPFX)utf8map.obj: utf8map.c $(HACK_H)
$(TARGETPFX)uhitm.obj: uhitm.c $(HACK_H)
$(TARGETPFX)vault.obj: vault.c $(HACK_H)
$(TARGETPFX)version.obj: version.c $(HACK_H) $(INCL)dlb.h
$(TARGETPFX)vision.obj: vision.c $(HACK_H)
$(TARGETPFX)weapon.obj: weapon.c $(HACK_H)
$(TARGETPFX)were.obj: were.c $(HACK_H)
$(TARGETPFX)wield.obj: wield.c $(HACK_H)
$(TARGETPFX)windows.obj: windows.c $(HACK_H) $(INCL)dlb.h $(INCL)wintty.h
$(TARGETPFX)wizard.obj: wizard.c $(HACK_H)
$(TARGETPFX)worm.obj: worm.c $(HACK_H)
$(TARGETPFX)worn.obj: worn.c $(HACK_H)
$(TARGETPFX)write.obj: write.c $(HACK_H)
$(TARGETPFX)zap.obj: zap.c $(HACK_H)
# DEPENDENCIES MUST END AT END OF FILE
# IF YOU PUT STUFF HERE IT WILL GO AWAY

438
sys/vms/Makefile_top.vms Normal file
View File

@@ -0,0 +1,438 @@
# NetHack Top-level Makefile.
# NetHack 3.7 Makefile.vms $NHDT-Date: 1642630921 2022/01/19 22:22:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.72 $
# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland
# NetHack may be freely redistributed. See license for details.
# Root of source tree: (Note: dot is after setup.sh has been used
# to create the active Makefiles from sys/unix/Makefile.*.
# It isn't sys/unix/ where you might happen to be reading this.)
NHSROOT=[]
# Newer makes predefine $(MAKE) to 'make' and do smarter processing
# of recursive make calls if $(MAKE) is used.
# These makes allow $(MAKE) to be overridden by the environment if
# someone wants to (or has to) use something other than the standard
# make, so we do not want to unconditionally set $(MAKE) here.
#
# Unfortunately, some older makes do not predefine $(MAKE); if you
# have one of these, uncomment the following line.
# (You will know that you have one if you get complaints about unable
# to execute things like 'data' and 'rumors'.)
# MAKE = make
# NetHack 3.7 Makefile.vms $NHDT-Date: 1654287121 2022/06/03 20:12:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.145 $
# Copyright (c) 2023 by Michael Allison
# NetHack may be freely redistributed. See license for details.
#
# OpenVMS GNU Makefile for OpenVMS 9.x and VSI C
# with GNU Make V4.1 (or greater).
#
# Tested on x86_64 version of OpenVMS V9.2-1.
#
# Root of source tree:
NHSROOT=
# relative directories from top
DOC=[.doc]
DAT=[.dat]
INCL=[.include]
SRC=[.src]
UTIL=[.util]
LIB=[.lib]
SYSVMS=[.sys.vms]
SYSSHR=[.sys.share]
SYSUNIX=[.sys.unix]
WINTTY=[.win.tty]
WINSHR=[.win.share]
WINTTY=[.win.tty]
WINCURS=[.win.curses]
WINX11=[.win.X11]
WINQT=[.win.Qt]
WINSHIM=[.win.shim]
WINCHAIN=[.win.chain]
# Lua macros
LUAVER=546
LUADOTVER=5.4.6
LUAUNDERVER=5_4_6
LUAINC=[.lib.lua.lua$(LUAVER).src]
LUALIB=[.lib.lua]lua$(LUAVER).olb
LUASRCDIR =[.lib.lua.lua$(LUAVER).src]
LUASRCINCDIR=$(LUASRCDIR)
LUATESTTARGET = $(LUAINC)lua.h
LUABASELIB = liblua-$(LUADOTVER).olb
# make NetHack (as opposite to variants or such)
#PREFIX = /usr
GAME = nethack
# GAME = nethack.exe
# GAME = nethack.prg
#GAMEUID = games
#GAMEGRP = bin
# Permissions - some places use setgid instead of setuid, for instance.
# See also the option "SECURE" in include/config.h.
#GAMEPERM = 04755
FILEPERM = 0644
# VARFILEPERM = 0644
EXEPERM = 0755
DIRPERM = 0755
# VARDIRPERM = 0755
# VARDIR may also appear in unixconf.h as "VAR_PLAYGROUND" else HACKDIR
#
# Note well! 'make install' believes in creating a nice tidy HACKDIR
# for installation, free of debris from previous NetHack versions --
# therefore there should not be anything in HACKDIR that you want to
# keep (if there is, you'll have to do the installation by hand or
# modify the install commands below).
#HACKDIR = $(PREFIX)/games/lib/$(GAME)dir
#VARDIR = $(HACKDIR)
# Where nethack.sh is installed (as 'nethack').
# If this is not defined, the shell wrapper script is not used.
#SHELLDIR = $(PREFIX)/games
# Extra data files depending upon the interface(s) built into nethack.
# per discussion in Install.X11 and Install.Qt
# Qt prefers nhtiles.bmp but can use x11tiles, and it ignores NetHack.ad.
# X11 uses those last two.
# Both can display a convential text map instead of tiles.
# tty and/or curses (no extra data files outside of the dlb container):
#VARDATND =
# All X11 and/or Qt variations may also include tty or curses or both):
# X11 without Qt:
# VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm
# X11 with GRAPHIC_TOMBSTONE (requires 'xpm'):
# VARDATND = x11tiles NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm
# both X11 and Qt:
# VARDATND = x11tiles nhtiles.bmp NetHack.ad pet_mark.xbm pilemark.xbm rip.xpm
# Qt without X11; assumes GRAPHIC_TOMBSTONE:
# VARDATND = nhtiles.bmp pet_mark.xbm pilemark.xbm rip.xpm
VARDATD = bogusmon data engrave epitaph oracles options quest.lua rumors
VARDAT = $(VARDATD) $(VARDATND)
# Some versions of make use the SHELL environment variable as the
# shell for running commands. We need this to be a Bourne shell.
# SHELL = /bin/sh
# for Atari (obsolete)
# SHELL=E:/GEMINI2/MUPFEL.TTP
# Commands for setting the owner and group on files during installation.
# Some systems fail with one or the other when installing over NFS or for
# other permission-related reasons. If that happens, you may want to set the
# command to "true", which is a no-op. Note that disabling chown or chgrp
# will only work if setuid (or setgid) behavior is not desired or required.
#CHOWN = chown
#CHGRP = chgrp
#
# end of configuration
#
DATHELP = help hh cmdhelp keyhelp history opthelp optmenu usagehlp wizhelp
SPEC_LEVS = asmodeus.lua baalz.lua bigrm-*.lua castle.lua fakewiz?.lua \
juiblex.lua knox.lua medusa-?.lua minend-?.lua minefill.lua \
minetn-?.lua oracle.lua orcus.lua sanctum.lua soko?-?.lua \
tower?.lua valley.lua wizard?.lua nhcore.lua nhlib.lua themerms.lua \
astral.lua air.lua earth.lua fire.lua water.lua hellfill.lua tut-?.lua
QUEST_LEVS = ???-goal.lua ???-fil?.lua ???-loca.lua ???-strt.lua
DATNODLB = $(VARDATND) license symbols
DATDLB = $(DATHELP) dungeon.lua tribute $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD)
DODAT = $(DATNODLB) $(DATDLB)
ALLDEP = $(GAME) recover Guidebook $(VARDAT) spec_levs check-dlb
# first target is also the default target for 'make' without any arguments
all: $(ALLDEP)
pipe true
@echo "Done."
$(GAME): lua_support
pipe set default $(SRC) && $(MAKE) LUA_VERSION=$(LUADOTVER) $(GAME) \
&& set def [-]
lua_support: [.include]nhlua.h
@true
# Note: many of the dependencies below are here to allow parallel make
# to generate valid output
Guidebook:
pipe set def $(DOC) && $(MAKE) Guidebook && set def [-]
Guidebook.txt:
pipe set def $(DOC) && $(MAKE) Guidebook.txt && set def [-]
Guidebook.pdf:
pipe set def $(DOC) && $(MAKE) Guidebook.pdf && set def [-]
manpages:
pipe set def $(DOC) && $(MAKE) manpages && set def [-]
data: $(GAME)
pipe set def $(DAT) && $(MAKE) data && set def [-]
engrave: $(GAME)
pipe set def $(DAT) && $(MAKE) engrave && set def [-]
bogusmon: $(GAME)
pipe set def $(DAT) && $(MAKE) bogusmon && set def [-]
epitaph: $(GAME)
pipe set def $(DAT) && $(MAKE) epitaph && set def [-]
rumors: $(GAME)
pipe set def $(DAT) && $(MAKE) rumors && set def [-]
oracles: $(GAME)
pipe set def $(DAT) && $(MAKE) oracles && set def [-]
# Note: options should have already been made with make, but...
options: $(GAME)
pipe set def $(DAT) && $(MAKE) options && set def [-]
quest.lua: $(GAME)
spec_levs:
pipe set def $(DAT) && $(MAKE) spec_levs && set def [-]
pipe set def $(DAT) && $(MAKE) quest_levs && set def [-]
nhtiles.bmp: $(GAME)
pipe set def $(UTIL) && $(MAKE) tile2bmp && set def [-]
pipe set def $(DAT) && $(MAKE) nhtiles.bmp && set def [-]
x11tiles: $(GAME)
pipe set def $(UTIL) && $(MAKE) tile2x11 && set def [-]
pipe set def $(DAT) && $(MAKE) x11tiles && set def [-]
NetHack.ad: $(GAME)
pipe set def $(DAT) && $(MAKE) NetHack.ad && set def [-]
pet_mark.xbm:
pipe set def $(DAT) && $(MAKE) pet_mark.xbm && set def [-]
pilemark.xbm:
pipe set def $(DAT) && $(MAKE) pilemark.xbm && set def [-]
rip.xpm:
pipe set def $(DAT) && $(MAKE) rip.xpm && set def [-]
mapbg.xpm:
pipe set def $(DAT) && $(MAKE) mapbg.xpm && set def [-]
nhsplash.xpm:
pipe set def $(DAT) && $(MAKE) nhsplash.xpm && set def [-]
nh16.img: $(GAME)
pipe set def $(UTIL) && $(MAKE) tile2img.ttp && set def [-]
pipe set def $(DAT) && $(MAKE) nh16.img && set def [-]
rip.img:
pip set def $(UTIL) && $(MAKE) xpm2img.ttp && set def [-]
pipe set def $(DAT) && $(MAKE) rip.img && set def [-]
GEM_RSC.RSC:
pipe set def $(DAT) && $(MAKE) GEM_RSC.RSC && set def [-]
title.img:
pipe set def $(DAT) && $(MAKE) title.img && set def [-]
check-dlb: options
echo disabled $@
# @if egrep -s librarian dat/options ; then $(MAKE) dlb ; else true ; fi
dlb:
pipe set def $(UTIL) && $(MAKE) dlb && set def [-]
pipe set def $(DAT) && LC_ALL=C && mcr [-.util]dlb cf nhdat $(DATDLB) \
&& set def [-]
wasm:
pipe set def $(SRC) && \
$(MAKE) CROSS_TO_WASM=1 [-.targets.wasm]nethack.js && \
set def [-]
package: $(GAME) recover $(VARDAT) spec_levs
pipe set def $(SRC) && $(MAKE) $(PACKAGE) && set def [-]
# recover can be used when INSURANCE is defined in include/config.h
# and the checkpoint option is true
recover: $(GAME)
pipe set def $(UTIL) && $(MAKE) recover && set def [-]
dofiles:
echo disabled $@
# target=`sed -n \
# -e '/librarian/{' \
# -e 's/.*/dlb/p' \
# -e 'q' \
# -e '}' \
# -e '$$s/.*/nodlb/p' < dat/options` ; \
# $(MAKE) dofiles-$${target-nodlb}
# cp src/$(GAME) $(INSTDIR)
# cp util/recover $(INSTDIR)
# -if test -n '$(SHELLDIR)'; then rm -f $(SHELLDIR)/$(GAME); fi
# if test -n '$(SHELLDIR)'; then \
# sed -e 's;/usr/games/lib/nethackdir;$(HACKDIR);' \
# -e 's;HACKDIR/nethack;HACKDIR/$(GAME);' \
# < sys/unix/nethack.sh \
# > $(SHELLDIR)/$(GAME) ; fi
# set up their permissions
# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) $(GAME) recover ; \
# $(CHGRP) $(GAMEGRP) $(GAME) recover )
# chmod $(GAMEPERM) $(INSTDIR)/$(GAME)
# chmod $(EXEPERM) $(INSTDIR)/recover
# -if test -n '$(SHELLDIR)'; then \
# $(CHOWN) $(GAMEUID) $(SHELLDIR)/$(GAME); fi
# if test -n '$(SHELLDIR)'; then \
# $(CHGRP) $(GAMEGRP) $(SHELLDIR)/$(GAME); \
# chmod $(EXEPERM) $(SHELLDIR)/$(GAME); fi
dofiles-dlb: check-dlb
pipe set def $(DAT) && copy nhdat $(DATNODLB) $(INSTDIR) && \
set def [-]
# set up their permissions
# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) nhdat $(DATNODLB) ; \
# $(CHGRP) $(GAMEGRP) nhdat $(DATNODLB) ; \
# chmod $(FILEPERM) nhdat $(DATNODLB) )
dofiles-nodlb:
# copy over the game files
pipe set def $(DAT) && copy $(DAT) $(INSTDIR) && \
set def [-]
# set up their permissions
# -( cd $(INSTDIR) ; $(CHOWN) $(GAMEUID) $(DAT) ; \
# $(CHGRP) $(GAMEGRP) $(DAT) ; \
# chmod $(FILEPERM) $(DAT) )
#
# This is not part of the dependency build hierarchy.
# It requires an explicit "make fetch-Lua".
$(INCL)nhlua.h:
echo "/* nhlua.h - generated by top-level Makefile.vms */" > $@
@echo \#"include ""lua.h""" >> $@
@echo "LUA_API int (lua_error) (lua_State *L) NORETURN;" >>$@
@echo \#"include ""lualib.h""" >> $@
@echo \#"include ""lauxlib.h""" >> $@
@echo "/*nhlua.h*/" >> $@
[.lib]lua.dir:
create/directory [.lib.lua]
[]lib.dir:
create/directory [.lib]
[.lib.lua]lua$(LUAVER).dir:
@echo You need to make fetch-lua
false
fetch-lua: []lib.dir [.lib]lua.dir
if f$$search("[.lib.lua]lua$(LUAVER).tgz").eqs."" then \
curl http://www.lua.org/ftp/lua-$(LUADOTVER).tar.gz \
--output [.lib.lua]lua$(LUAVER).tgz
if f$$search("[.lib.lua]lua$(LUAVER).tgz").nes."" then \
gzip --force -d [.lib.lua]lua$(LUAVER).tgz
if f$$search("[.lib.lua]lua$(LUAVER).tar").nes."" then \
pipe set def [.lib.lua] && \
tar -xf lua$(LUAVER).tar && \
set def [--]
if (f$$search("[.lib.lua]lua-$(LUAUNDERVER).DIR;1").nes."" \
.AND. f$$search("[.lib.lua]lua$(LUAVER).dir;1").eqs."") then \
rename [.lib.lua]lua-$(LUAUNDERVER).DIR;1 \
[.lib.lua]lua$(LUAVER).dir;1
# remove [.include]nhlua.h in case it was created for some other Lua version
@pipe if f$$search("[.include]nhlua.h").nes."" then \
delete [.include]nhlua.h;* && echo 'delete [.include]nhlua.h;*'
# 'make update' can be used to install a revised version after making
# customizations or such. Unlike 'make install', it doesn't delete everything
# from the target directory to have a clean start.
update: $(GAME) recover $(VARDAT) spec_levs
echo disabled $@
# (don't yank the old version out from under people who're playing it)
# -mv $(INSTDIR)/$(GAME) $(INSTDIR)/$(GAME).old
# -mv $(INSTDIR)/nhdat $(INSTDIR)/nhdat.old
# set up new versions of the game files
# ( $(MAKE) dofiles )
# should already be present, but make sure
# touch $(VARDIR)/perm $(VARDIR)/record
# and a reminder
# @echo You may also want to install the man pages via the doc Makefile.
rootcheck:
@true; $(ROOTCHECK)
install: rootcheck $(GAME) recover $(VARDAT) spec_levs
true; $(PREINSTALL)
echo disabled $@
# set up the directories
# not all mkdirs have -p; those that don't will create a -p directory
# -if test -n '$(SHELLDIR)'; then \
# mkdir -p $(SHELLDIR); fi
# rm -rf $(INSTDIR) $(VARDIR)
# -mkdir -p $(INSTDIR) $(VARDIR) $(VARDIR)/save
# if test -d ./-p; then rmdir ./-p; fi
# -$(CHOWN) $(GAMEUID) $(INSTDIR) $(VARDIR) $(VARDIR)/save
# $(CHGRP) $(GAMEGRP) $(INSTDIR) $(VARDIR) $(VARDIR)/save
# order counts here:
# chmod $(DIRPERM) $(INSTDIR)
# chmod $(VARDIRPERM) $(VARDIR) $(VARDIR)/save
# set up the game files
# ( $(MAKE) dofiles )
# set up some additional files
# touch $(VARDIR)/perm $(VARDIR)/record $(VARDIR)/logfile $(VARDIR)/xlogfile \
# $(VARDIR)/livelog
# -( cd $(VARDIR) ; $(CHOWN) $(GAMEUID) perm record logfile xlogfile livelog ; \
# $(CHGRP) $(GAMEGRP) perm record logfile xlogfile livelog ; \
# chmod $(VARFILEPERM) perm record logfile xlogfile livelog )
# true; $(POSTINSTALL)
# and a reminder
# @echo You may also want to reinstall the man pages via the doc Makefile.
# 'make clean' removes all the .o files, but leaves around all the executables
# and compiled data files
#clean: clean-lib clean-keep-lib
# @true
clean-lib:
# -pipe set def $(LUASRCDIR) && $(MAKE) clean && set def [--.util]
clean-keep-lib:
# ( cd src ; $(MAKE) clean )
# ( cd util ; $(MAKE) clean )
# pipe set def $(DAT) $(MAKE) clean && set def [-.util]
# ( cd doc ; $(MAKE) clean )
spotless-lib:: clean-lib
-( cd lib/lua && rm $(LUABASELIB) )
spotless-keep-lib: clean-keep-lib
# ( cd src ; $(MAKE) spotless )
# ( cd util ; $(MAKE) spotless )
# pipe set def $(DAT) && $(MAKE) spotless && set def [-]
# ( cd doc ; $(MAKE) spotless )
spotless-clean-submodule:
@( if test -f submodules/lua/lua.h ; then \
git submodule deinit submodules/lua ; fi )
clean:
pipe set def $(DAT) && $(MAKE) clean && set def [-]
pipe set def $(SRC) && $(MAKE) clean && set def [-]
pipe set def $(UTIL) && $(MAKE) clean && set def [-]
pipe set def $(DOC) && $(MAKE) clean && set def [-]
# -delete/log $(CLEANFILES)
spotless: clean
pipe set def $(DAT) && $(MAKE) spotless && set def [-]
pipe set def $(SRC) && $(MAKE) spotless && set def [-]
pipe set def $(UTIL) && $(MAKE) spotless && set def [-]
pipe set def $(DOC) && $(MAKE) spotless && set def [-]
-delete/log $(SPOTLESSFILES) $(INCL)nhlua.h;*
# pipe set def $(DAT) && $(MAKE) spotless && set def [-]
# -$(RM) $(GAMEBIN);*

325
sys/vms/Makefile_utl.vms Normal file
View File

@@ -0,0 +1,325 @@
# Makefile for NetHack's utility programs.
# NetHack 3.7 util Makefile.vms $NHDT-Date: 1602258295 2020/10/09 15:44:55 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.53 $
# Copyright (c) 2018 by Robert Patrick Rankin
# NetHack may be freely redistributed. See license for details.
# Root of source tree relative to here:
NHSROOT=[-]
# NetHack 3.7 began introducing C99 code.
#
# If your compiler needs an appropriate switch to accept C99 code.
# CSTD = -std=c99
# directories relative to here (util)
DOC=[-.doc]
DAT=[-.dat]
INCL=[-.include]
SRC=[-.src]
UTIL=[-.util]
SYSVMS=[-.sys.vms]
SYSSHR=[-.sys.share]
SYSUNIX=[-.sys.unix]
WINTTY=[-.win.tty]
WINSHR=[-.win.share]
WINTTY=[-.win.tty]
WINCURS=[-.win.curses]
WINX11=[-.win.X11]
WINQT=[-.win.Qt]
WINSHIM=[-.win.shim]
WINCHAIN=[-.win.chain]
# Lua location relative to here
LUAVER=546
LUADOTVER=5.4.6
LUAUNDERVER=5_4_6
LUAINC=[-.lib.lua.lua$(LUAVER).src]
LUALIB=[-.lib.lua]lua$(LUAVER).olb
LUASRCDIR =[-.lib.lua.lua$(LUAVER).src]
LUASRCINCDIR=$(LUASRCDIR)
#LUASRCINCDIR=SYS$COMMON:[LUA.INCLUDE]
# hacklib
HACKLIB=hacklib.olb
HACKLIBOBJS=[-.src]hacklib.obj,[-.util]panic.obj
comma:=,
LIBS =
OBJDIR = [-.src]
# Compiler flags
CFLAGS :=/INCLUDE=($(INCL),$(LUAINC)) /NAMES=(AS_IS) $(CSTD)
CXXFLAGS = /INCLUDE_DIR=($(INCL),$(LUAINC)) /NAMES=(AS_IS)
# Link flags
LFLAGS =
# external programs
# MAKE = make
CC = CC
#touch :=SET FILE/TRUNCATE
touch = append/New _NLA0:
LINK = link
RM = delete
#TRUE uses an actual helper true.exe
TRUE = true
#FALSE uses an actual helper false.exe
FALSE = false
#ECHO uses an actual helper echo.exe
ECHO = echo
CXX ?= CXX
MOC ?= moc
MOCPATH ?= $(QTDIR)/bin/$(MOC)
# The default is for the TARGET_* variables to match the defaults.
# If we're cross-compiling these will get overridden elsewhere, likely via
# a hints file. TARGETPFX was set above earlier.
TARGET_CC = $(CC)
TARGET_CFLAGS = $(CFLAGS) $(CSTD)
TARGET_LINK = $(LINK)
TARGET_LFLAGS = $(LFLAGS)
TARGET_CXX = $(CXX)
TARGET_CXXFLAGS = $(CXXFLAGS)
TARGET_LIBS = $(LIBS)
# [LINK might be defined to use $(CXX); we don't want that here.]
CLINK=$(TARGET_LINK)
CXXLINK=$(TARGET_LINK)
# timestamps for primary header files, matching src/Makefile
#CONFIG_H = $(SRC)config.h-t
#HACK_H = $(SRC)hack.h-t
# utility .c files
MAKESRC = makedefs.c $(SRC)mdlib.c
RECOVSRC = recover.c
DLBSRC = dlb_main.c
UTILSRCS = $(MAKESRC) panic.c $(RECOVSRC) $(DLBSRC)
# files that define all monsters and objects
CMONOBJ = $(SRC)monst.c $(SRC)objects.c
OMONOBJ = $(OBJDIR)monst.obj $(OBJDIR)objects.obj
# files that provide access to NetHack's names
CNAMING = $(SRC)drawing.c $(CMONOBJ)
ONAMING = $(OBJDIR)drawing.obj $(OMONOBJ)
# dynamic memory allocation
CALLOC = $(SRC)alloc.c
OALLOC = $(OBJDIR)alloc.obj
CPANIC = panic.c
OPANIC = []panic.obj
# build time info
CDATE = $(SRC)date.c
ODATE = $(OBJDIR)date.obj
# object files for makedefs
MAKEOBJS = []makedefs.obj $(OMONOBJ) $(ODATE) $(OALLOC) $(OPANIC)
# object files for recovery utility
RECOVOBJS = $(TARGETPFX)recover.obj
# object files for the data librarian
DLBOBJS = dlb_main.obj $(OBJDIR)dlb.obj $(OALLOC) $(OPANIC)
# Distinguish between the build tools for the native host
# and the build tools for the target environment in commands.
# This allows the same set of Makefiles to be used for native
# builds and for cross-compiles by overriding these in hints
# files or on the command line.
TARGETPFX=
TARGET_CC = $(CC)
TARGET_CFLAGS = $(CFLAGS) $(CSTD)
TARGET_CLINK = $(CLINK)
TARGET_LFLAGS = $(LFLAGS)
TARGET_CXX = $(CXX)
TARGET_CXXFLAGS = $(CXXFLAGS)
# hacklib
#
$(HACKLIB): $(HACKLIBOBJS) [-.util]panic.obj
LIBRARY/CREATE $(HACKLIB)/object
LIBRARY/INSERT $(HACKLIB) $(HACKLIBOBJS)
# dependencies for makedefs
#
makedefs.exe: $(HACKLIB) $(MAKEOBJS) placeholder.obj mdgrep.h
$(CLINK) $(LFLAGS) /EXE=$@ \
$(addsuffix $(comma),$(MAKEOBJS)) placeholder.obj, \
$(HACKLIB)/lib
# note: the headers listed here are maintained manually rather than via
# 'make depend'; only the ones which are directly included by
# makedefs.c are listed, without various nested ones that they include;
# for makedefs (but not for nethack's core), mdlib.c gets included
# rather than be compiled separately
makedefs.obj: makedefs.c $(SRC)mdlib.c $(CONFIG_H) \
$(INCL)permonst.h $(INCL)objclass.h \
$(INCL)artilist.h $(INCL)dungeon.h $(INCL)obj.h \
$(INCL)monst.h $(INCL)monsters.h $(INCL)objects.h \
$(INCL)you.h $(INCL)context.h $(INCL)flag.h \
$(INCL)dlb.h $(INCL)patchlevel.h mdgrep.h
$(CC) $(CFLAGS) $(CSTD) makedefs.c /OBJ=$@
placeholder.c:
echo int makedefs_placeholder = 1; >$@
placeholder.obj: placeholder.c
# Don't require perl to build; that is why mdgrep.h is spelled wrong below.
mdgreph: mdgrep.pl
perl mdgrep.pl
# These are for reference purposes only. They aren't required in the build.
$(INCL)onames.h: makedefs $(INCL)objects.h
mcr []makedefs -o
$(INCL)pm.h: makedefs $(INCL)monsters.h
mcr []makedefs -p
# we defer this makedefs call to the src Makefile, since it knows all about
# the main src and include files date.h is a timestamp for
$(INCL)date.h::
@pipe set def $(SRC) && $(MAKE) $(INCL)date.h && set def [-]
# support code used by several of the utility programs (but not makedefs)
panic.obj: panic.c $(CONFIG_H)
$(CC) $(CFLAGS) $(CSTD) panic.c /OBJ=$@
# with all of extern.h's functions to complain about, we drown in
# 'defined but not used' without -u
#lintdgn:
# @lint -axhu -I.include -DLINT $(UTILSRCS) $(CALLOC) \
# | sed '/_flsbuf/d'
#
#
# dependencies for recover
#
$(TARGETPFX)recover.exe: $(RECOVOBJS)
$(TARGET_CLINK) $(TARGET_LFLAGS) /EXE=$@ $(RECOVOBJS) $(LIBS)
$(TARGETPFX)recover.obj: recover.c $(CONFIG_H)
$(TARGET_CC) $(TARGET_CFLAGS) $(CSTD) recover.c /OBJ=$@
# dependencies for dlb
#
dlb: $(DLBOBJS)
$(CLINK) $(LFLAGS) /EXE=dlb $(DLBOBJS) $(LIBS)
dlb_main.obj: dlb_main.c $(CONFIG_H) $(INCL)dlb.h
$(CC) $(CFLAGS) $(CSTD) dlb_main.c /OBJ=$@
# dependencies for tile utilities
#
TEXT_IO = tiletext.obj tiletxt.obj $(OALLOC) $(ONAMING)
GIFREADERS = gifread.obj
PPMWRITERS = ppmwrite.obj
tileutils: tilemap gif2txt txt2ppm tile2x11
gif2txt.exe: $(GIFREADERS) $(TEXT_IO)
$(CLINK) $(LFLAGS) /EXE=$@ $(GIFREADERS) $(TEXT_IO) $(LIBS)
txt2ppm.exe: $(PPMWRITERS) $(TEXT_IO)
$(CLINK) $(LFLAGS) /EXE=$@ $(PPMWRITERS) $(TEXT_IO) $(LIBS)
tile2x11.exe: tile2x11.obj $(TEXT_IO)
$(CLINK) $(LFLAGS) /EXE=$@ tile2x11.obj $(TEXT_IO) $(LIBS)
tile2bmp.exe: tile2bmp.obj $(TEXT_IO)
$(CLINK) $(LFLAGS) /EXE=$@ tile2bmp.obj $(TEXT_IO)
tile2beos.exe: tile2beos.obj $(TEXT_IO)
$(CXXLINK) $(LFLAGS) /EXE=$@ tile2beos.obj $(TEXT_IO)
#--compiling and linking in one step leaves extra debugging files (in their
# own subdirectories!) on OSX; compile and link separately to suppress
# that without mucking about with extra OS-specific CFLAGS and/or LFLAGS
#tilemap: .win/share/tilemap.c $(HACK_H)
# $(CC) $(CFLAGS) $(LFLAGS) -o tilemap .win/share/tilemap.c $(LIBS)
tilemap.exe: tilemap.obj $(OBJDIR)objects.obj $(OBJDIR)monst.obj \
$(OBJDIR)drawing.obj
$(CLINK) $(LFLAGS) /EXE=$@ tilemap.obj $(OBJDIR)objects.obj \
$(OBJDIR)monst.obj $(OBJDIR)drawing.obj $(LIBS)
$(SRC)tile.c: tilemap
mcr []tilemap
tiletext.obj: $(WINSHR)tiletext.c $(CONFIG_H) $(WINSHR)tile.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tiletext.c /OBJ=$@
tiletxt.obj: $(WINSHR)tiletxt.c $(WINSHR)tilemap.c $(HACK_H)
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tiletxt.c /OBJ=$@
tilemap.obj: $(WINSHR)tilemap.c $(HACK_H)
$(CC) $(CFLAGS) $(CSTD) $(WINSHR)tilemap.c /OBJ=$@
gifread.obj: $(WINSHR)gifread.c $(CONFIG_H) $(WINSHR)tile.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)gifread.c /OBJ=$@
ppmwrite.obj: $(WINSHR)ppmwrite.c $(CONFIG_H) $(WINSHR)tile.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)ppmwrite.c /OBJ=$@
tile2bmp.obj: $(WINSHR)tile2bmp.c $(HACK_H) $(WINSHR)tile.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tile2bmp.c /OBJ=$@
tile2x11.obj: .win/X11/tile2x11.c $(HACK_H) .win/share/tile.h \
$(INCL)tile2x11.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) $(WINSHR)tile2x11.c /OBJ=$@
tile2img.obj: [-.win.gem]tile2img.c $(HACK_H) $(WINSHR)tile.h \
$(INCL)bitmfile.h
$(CC) $(CFLAGS) $(CSTD) /INCLUDE=$(WINSHR) [-.win.gem]tile2img.c /OBJ=$@
xpm2img.obj: [-.win.gem]xpm2img.c $(HACK_H) $(INCL)bitmfile.h
$(CC) $(CFLAGS) $(CSTD) -c .win/gem/xpm2img.c /obj=$@
bitmfile.obj: [-.win.gem]bitmfile.c $(INCL)bitmfile.h
$(CC) $(CFLAGS) $(CSTD) [-.win.gem]bitmfile.c /obj=$@
uudecode.exe: uudecode.obj
$(CLINK) $(LFLAGS) /EXE=$@ uudecode.obj $(LIBS)
uudecode.obj: $(SYSSHR)uudecode.c
$(CC) $(CFLAGS) $(CSTD) /obj=$@ $(SYSSHR)uudecode.c
# make sure host object files from src are available when needed
# (note: these dependencies have been copied from Makefile.src so only come
# indirectly from 'make depend', hence are subject to bit rot as src changes)
$(OBJDIR)alloc.obj: $(SRC)alloc.c $(CONFIG_H)
$(CC) $(CFLAGS) $(CSTD) $(SRC)alloc.c /obj=$@
$(OBJDIR)drawing.obj: $(SRC)drawing.c $(CONFIG_H) $(INCL)color.h \
$(INCL)rm.h $(INCL)objclass.h $(INCL)defsym.h \
$(INCL)objects.h $(INCL)sym.h
$(CC) $(CFLAGS) $(CSTD) $(SRC)drawing.c /obj=$@
$(OBJDIR)decl.obj: $(SRC)decl.c $(HACK_H)
$(CC) $(CFLAGS) $(CSTD) $(SRC)decl.c /obj=$@
$(OBJDIR)monst.obj: $(SRC)monst.c $(CONFIG_H) $(INCL)permonst.h \
$(INCL)align.h $(INCL)monattk.h $(INCL)monflag.h \
$(INCL)monsters.h $(INCL)sym.h $(INCL)defsym.h \
$(INCL)color.h
$(CC) $(CFLAGS) $(CSTD) $(SRC)monst.c /obj=$@
$(OBJDIR)objects.obj: $(SRC)objects.c $(CONFIG_H) $(INCL)obj.h \
$(INCL)prop.h $(INCL)skills.h $(INCL)color.h \
$(INCL)objclass.h $(INCL)defsym.h $(INCL)objects.h
$(CC) $(CFLAGS) $(CSTD) $(SRC)objects.c /obj=$@
$(OBJDIR)dlb.obj: $(SRC)dlb.c $(CONFIG_H) $(INCL)dlb.h
$(CC) $(CFLAGS) $(CSTD) $(SRC)dlb.c /obj=$@
# this differs substantially from what Makefile.src specifies
$(OBJDIR)date.obj: $(SRC)date.c $(CONFIG_H)
$(CC) $(CFLAGS) $(CSTD) $(SRC)date.c /obj=$@
# make sure hack.h dependencies get transitive information
$(HACK_H): $(CONFIG_H)
@pipe set def $(SRC) && $(MAKE) $(HACK_H) && set def $(UTIL)
$(CONFIG_H): $(INCL)config.h
@pipe set def $(SRC) && $(MAKE) $(CONFIG_H) && set def $(UTIL)
clean-fixup:
-delete/log $(INCL)tile.h;*
clean: clean-fixup
-delete/log *.obj;*
spotless: clean
-delete/log makedefs.exe;*,recover.exe;*,dlb.exe;*
-delete/log gif2txt.exe;*,txt2ppm.exe;*,tile2x11.exe;* \
,tile2img.ttp;*,xpm2img.ttp;*, \
tilemap.exe;*,tileedit.exe;*,tile2bmp.exe;*,uudecode.exe;
.PHONY: recover makedefs
recover: recover.exe
makedefs: makedefs.exe

25
sys/vms/vmssetup.com Normal file
View File

@@ -0,0 +1,25 @@
$ ! vmssetup.com -- place GNU Makefiles in their target directories
$ version_number = "3.7.0"
$ ! $NHDT-Date: 1687541093 2024/03/08 17:24:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.39 $
$ ! NetHack may be freely redistributed. See license for details.
$ !
$ relsrc = ""
$ reldst = "-.-"
$ if (f$search("[]dat.dir") .nes. "") .AND. -
(f$search("[]src.dir") .nes. "") .AND. -
(f$search("[]include.dir") .nes. "") .AND. -
(f$search("[]sys.dir") .nes. "") then -
relsrc = ".sys.vms"
$ if (f$search("[]dat.dir") .nes. "") .AND. -
(f$search("[]src.dir") .nes. "") .AND. -
(f$search("[]include.dir") .nes. "") .AND. -
(f$search("[]sys.dir") .nes. "") then -
reldst = ""
$ copy ['relsrc']Makefile_top.vms ['reldst']Makefile.vms
$ copy ['relsrc']Makefile_dat.vms ['reldst'.dat]Makefile.vms
$ copy ['relsrc']Makefile_doc.vms ['reldst'.doc]Makefile.vms
$ copy ['relsrc']Makefile_src.vms ['reldst'.src]Makefile.vms
$ copy ['relsrc']Makefile_utl.vms ['reldst'.util]Makefile.vms
$!
$done:
$ exit