Files
nethack/sys/vms/Makefile.utl
nhmall 2baadd6a29 header files sym.h and defsym.h
There were multiple symbol-related lists that had to be kept
in sync in various places.

Consolidate some of that into a single new file
    defsym.h
with a set of morphing macros that can be custom-called from
the various places that use the sym info without maintaining
multiple occurrences. Most maintenance can be done there.

Rename monsym.h to sym.h since it looks after some
symbols not related to monsters now too.

The defsym.h header file is included in multiple places to
produce different code depending on its use and the controlling
macro definitions in place prior to including it.

Its purpose is to have a definitive source for
pchar, objclass and mon symbol maintenance.

The controlling macros used to morph the resulting code are
used in these places:
  - in include/sym.h for enums of some S_ symbol values
    (define PCHAR_ENUM, MONSYMS_ENUM prior to #include defsym.h)
  - in include/objclass.h for enums of some S_ symbol values
    (define OBJCLASS_ENUM prior to #include defsym.h)
  - in src/symbols.c for parsing S_ entries in config files
    (define PCHAR_PARSE, MONSYMS_PARSE, OBJCLASS_PARSE prior
    to #include defsym.h)
  - in src/drawing.c for initializing some data structures/arrays
    (define PCHAR_DRAWING, MONSYMS_DRAWING, OBJCLASS_DRAWING prior
    to #include defsym.h)
  - in win/share/tilemap.c for processing a tile file
    (define PCHAR_TILES prior to #include defsym.h).
2021-08-10 13:35:25 -04:00

249 lines
7.3 KiB
Makefile

# NetHack Makefile (VMS) - for utility programs.
# NetHack 3.7 Makefile.utl $NHDT-Date: 1609347482 2020/12/30 16:58:02 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.20 $
# Copyright (c) 2011 by Robert Patrick Rankin
# NetHack may be freely redistributed. See license for details.
# Copy this file to [.util]Makefile. and then edit it as needed.
# The default configuration is for building with DEC C (aka Compaq C).
# Settings for CC and CFLAGS ought to match the ones used in [.src]Makefile.
MAKE = $(MMS)
CD = set default
ECHO = write sys$output
MOVE = rename/New # within same device only
MUNG = search/Exact/Match=NOR # to strip bogus #module directives
NOOP = continue
RM = delete/noConfirm
RUN = mcr # simplest way to pass command line args
TOUCH = append/New _NLA0: # only one file per $(TOUCH)
# source tree, relative to 'src' and 'util'
DAT = [-.dat]
INC = [-.include]
SYSSHR = [-.sys.share]
SRC = [-.src]
UTL = [-.util]
VMS = [-.sys.vms]
WINSHR = [-.win.share]
WINX11 = [-.win.X11]
# targets, with enough punctuation to keep MCR and DELETE happy
MAKEDEFS= $(UTL)makedefs.exe;
DLB = $(UTL)dlb.exe;
RECOVER = $(UTL)recover.exe;
# used by $(DAT)Makefile for synchronization
MARKER = $(UTL)util.timestamp;
# if you are using gcc as your compiler,
# uncomment the CC definition below if it's not in your environment
# CC = gcc
CFLAGS = /Prefix=All/Incl=$(INC)/noList # DECC in native mode
#CFLAGS = /Include=$(INC)/noList # VAXC or GNUC
LFLAGS = /noMap
LIBS = $(SRC)crtl.opt/Options,$(SRC)ident.opt/Options # run-time library
LINK = link
#
# Nothing below this line should have to be changed.
#
# linker options files
LIBOPT = $(SRC)crtl.opt;
ID_OPT = $(SRC)ident.opt;
# 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
RECOVSRC = recover.c
DLBSRC = dlb_main.c
UTILSRCS = $(MAKESRC) $(SPLEVSRC) $(DGNCOMPSRC) $(RECOVSRC) $(DLBSRC) panic.c
VMSOBJS = $(SRC)vmsmisc.obj,$(SRC)vmsfiles.obj
# object files that provide access to NetHack's names
NAMEOBJ1 = $(SRC)monst.obj,$(SRC)objects.obj
NAMEOBJ2 = $(SRC)drawing.obj,$(SRC)decl.obj
NAMEOBJS = $(NAMEOBJ1),$(NAMEOBJ2)
# object files for makedefs
MAKEOBJS = makedefs.obj,$(NAMEOBJ1)
# object files for recovery utility
RECOVOBJS = recover.obj
# object files for dlb utility
DLBOBJS = dlb_main.obj,panic.obj,$(SRC)alloc.obj,$(SRC)dlb.obj
# fake target
default :
@ $(ECHO) "Oops! No target(s) specified...."
<all : $(MAKEDEFS) $(LEVCOMP) $(DGNCOMP) $(RECOVER) $(DLB)
@ $(ECHO) "util is up to date."
# alternate target names for possible interactive use
makedefs : $(MAKEDEFS)
@ $(ECHO) "makedefs is up to date."
recover : $(RECOVER)
@ $(ECHO) "recover is up to date."
dlb : $(DLB)
@ $(ECHO) "dlb is up to date."
$(LIBOPT) : $(SRC)Makefile.; # linker options file
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) $(LIBOPT)
@ $(CD) $(UTL)
$(ID_OPT) : $(SRC)Makefile.; # linker options file
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) $(ID_OPT)
@ $(CD) $(UTL)
# dependencies for makedefs
#
$(MAKEDEFS) : $(MAKEOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
$(LINK) $(LFLAGS) $(MAKEOBJS),$(VMSOBJS),$(LIBS)
@ $(TOUCH) $(MARKER)
makedefs.obj : makedefs.c \
$(CONFIG_H) $(INC)permonst.h $(INC)objclass.h \
$(INC)sym.h $(INC)defsym.h $(INC)artilist.h \
$(INC)dungeon.h $(INC)obj.h $(INC)monst.h \
$(INC)you.h $(INC)flag.h $(INC)dlb.h $(INC)patchlevel.h
$(INC)onames.h : $(MAKEDEFS)
$(RUN) $(MAKEDEFS) -o
$(INC)pm.h : $(MAKEDEFS)
$(RUN) $(MAKEDEFS) -p
# the src Makefile is responsible for knowing when to call this, since
# it knows all about the main src and include files
$(INC)date.h : $(MAKEDEFS)
$(RUN) $(MAKEDEFS) -v
panic.obj : $(CONFIG_H)
$(CC) $(CFLAGS) panic.c
# dependencies for recover
#
$(RECOVER) : $(RECOVOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
$(LINK) $(LFLAGS) $(RECOVOBJS),$(VMSOBJS),$(LIBS)
recover.obj : $(CONFIG_H) recover.c
# dependencies for dlb
#
$(DLB) : $(DLBOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
$(LINK)/Exe=$(DLB) $(LFLAGS) $(DLBOBJS),$(VMSOBJS),$(LIBS)
dlb_main.obj : $(CONFIG_H) $(INC)dlb.h dlb_main.c
# dependencies and build rules for tile utilities
#
TILEMAP = $(UTL)tilemap.exe;
GIF2TXT = $(UTL)gif2txt.exe;
TXT2PPM = $(UTL)txt2ppm.exe;
TILE2X11 = $(UTL)tile2x11.exe;
TILEUTILS = $(TILEMAP),$(GIF2TXT),$(TXT2PPM),$(TILE2X11)
TEXTIO = $(UTL)tiletxt.obj,tiletext.obj,$(NAMEOBJS),$(SRC)vmsmisc.obj
GIFREADERS = gifread.obj,panic.obj,$(SRC)alloc.obj
PPMWRITERS = ppmwrite.obj,panic.obj,$(SRC)alloc.obj
tileutils : $(TILEUTILS)
@ $(NOOP)
$(GIF2TXT) : $(GIFREADERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
$(LINK)/Exe=$(GIF2TXT) $(LFLAGS) $(GIFREADERS),$(TEXTIO),$(LIBS)
$(TXT2PPM) : $(PPMWRITERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
$(LINK)/Exe=$(TXT2PPM) $(LFLAGS) $(PPMWRITERS),$(TEXTIO),$(LIBS)
$(TILE2X11) : tile2x11.obj $(TEXTIO) $(LIBOPT) $(ID_OPT)
$(LINK) $(LFLAGS) tile2x11.obj,$(TEXTIO),$(LIBS)
$(TILEMAP) : tilemap.obj $(SRC)vmsmisc.obj $(LIBOPT) $(ID_OPT)
$(LINK) $(LFLAGS) tilemap.obj,$(SRC)vmsmisc.obj,$(LIBS)
$(SRC)tile.c : $(TILEMAP)
$(RUN) $(TILEMAP)
$(INC)tile.h : $(WINSHR)tile.h
copy $(WINSHR)tile.h $(INC)tile.h
# Force an explicit directory prefix on tiletxt.obj so that we don't get
# unwanted "sticky defaults" when $(TEXTIO) is used in a comma-separated
# list on the link command line.
#
$(UTL)tiletxt.obj : $(HACK_H) $(WINSHR)tilemap.c
$(CC) $(CFLAGS) /Def=("TILETEXT")/Obj=$@ $(WINSHR)tilemap.c
tilemap.obj : $(HACK_H) $(WINSHR)tilemap.c
tiletext.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)tiletext.c
gifread.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)gifread.c
ppmwrite.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)ppmwrite.c
tile2x11.obj : $(HACK_H) $(INC)tile.h $(INC)tile2x11.h $(WINX11)tile2x11.c
# make sure object files from src are available when needed
#
$(SRC)alloc.obj : $(SRC)alloc.c $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) alloc.obj
@ $(CD) $(UTL)
$(SRC)monst.obj : $(SRC)monst.c $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) monst.obj
@ $(CD) $(UTL)
$(SRC)objects.obj : $(SRC)objects.c $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) objects.obj
@ $(CD) $(UTL)
$(SRC)decl.obj : $(SRC)decl.c $(HACK_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) decl.obj
@ $(CD) $(UTL)
$(SRC)drawing.obj : $(SRC)drawing.c $(HACK_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) drawing.obj
@ $(CD) $(UTL)
$(SRC)dlb.obj : $(SRC)dlb.c $(CONFIG_H) $(INC)dlb.h
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) dlb.obj
@ $(CD) $(UTL)
# make sure hack.h dependencies get transitive information
$(HACK_H) : $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) $(HACK_H)
@ $(CD) $(UTL)
$(CONFIG_H) : $(INC)config.h
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) $(CONFIG_H)
@ $(CD) $(UTL)
# VMS specific dependencies
$(SRC)vmsmisc.obj : $(VMS)vmsmisc.c $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) vmsmisc.obj
@ $(CD) $(UTL)
$(SRC)vmsfiles.obj : $(VMS)vmsfiles.c $(CONFIG_H)
$(CD) $(SRC)
$(MAKE)$(MAKEFLAGS) vmsfiles.obj
@ $(CD) $(UTL)
clean :
- if f$search("*.*;-1").nes."" then purge
- if f$search("*.obj") .nes."" then $(RM) *.obj;
spotless : clean
- if f$search("$(INC)tile.h").nes."" then $(RM) $(INC)tile.h;*
- if f$search("*.exe").nes."" then \
$(RM) $(MAKEDEFS),$(RECOVER),$(DLB)
- if f$search("*.exe").nes."" then $(RM) $(TILEUTILS)
- if f$search("$(MARKER)").nes."" then $(RM) $(MARKER)