1 # aNetHack Makefile (VMS) - for utility programs.
2 # aNetHack 0.0.1 Makefile.utl $ANH-Date: 1454712071 2016/02/05 22:41:11 $ $ANH-Branch: aNetHack-3.6.0 $:$ANH-Revision: 1.14 $
4 # Copy this file to [.util]Makefile. and then edit it as needed.
5 # The default configuration is for building with DEC C (aka Compaq C).
6 # Settings for CC and CFLAGS ought to match the ones used in [.src]Makefile.
10 ECHO = write sys$output
11 MOVE = rename/New # within same device only
12 MUNG = search/Exact/Match=NOR # to strip bogus #module directives
15 RUN = mcr # simplest way to pass command line args
16 TOUCH = append/New _NLA0: # only one file per $(TOUCH)
17 # source tree, relative to 'src' and 'util'
20 SYSSHR = [-.sys.share]
24 WINSHR = [-.win.share]
26 # targets, with enough punctuation to keep MCR and DELETE happy
27 MAKEDEFS= $(UTL)makedefs.exe;
28 LEVCOMP = $(UTL)lev_comp.exe;
29 DGNCOMP = $(UTL)dgn_comp.exe;
31 RECOVER = $(UTL)recover.exe;
32 # used by $(DAT)Makefile for synchronization
33 MARKER = $(UTL)util.timestamp;
35 # if you are using gcc as your compiler,
36 # uncomment the CC definition below if it's not in your environment
39 CFLAGS = /Prefix=All/Incl=$(INC)/noList # DECC in native mode
40 #CFLAGS = /Include=$(INC)/noList # VAXC or GNUC
42 LIBS = $(SRC)crtl.opt/Options,$(SRC)ident.opt/Options # run-time library
45 # If you don't have yacc, byacc, or bison or just don't want to run any of
46 # them, then make target "no_yacc" before trying to build lev_comp
47 # or dgn_comp. You won't be able to modify *_comp.y though.
48 # If you don't have lex or flex, then make target "no_lex" and leave
49 # *_comp.l alone. $(VMS)lev_lex.h will be used to work-around some
50 # suspect code included in the distributed copies of *_lex.c.
51 # If you do either of the above, the corresponding value of YACC and/or LEX
54 # Note: VMS POSIX V1.1 lex and yacc generate code which contains an
55 # invalid #module directive; it order to prevent warnings for CC or
56 # choking by GCC, the SEARCH command is used in an attempt to strip
57 # then out. Otherwise MMS would quit when making the affected targets.
58 # Each "munged" copy should be identical to its original if no #module
59 # directives are present.
61 # yacc/lex programs to use to generate *_comp.c, *_comp.h, and *_lex.c.
62 # choose xxxOUT that matches xxx tool's output
67 #YACC = posix/Run posix$bin:yacc. "-d
68 #LEX = posix/Run posix$bin:lex. "
69 # blank means foo.y -> foo_tab.c & foo_tab.h
71 #YACCOUT = ytab # VMS POSIX
72 #YACCOUT = y_tab # DEC/Shell
74 #LEXOUT = lex_yy # VMS POSIX
77 # Nothing below this line should have to be changed.
79 # linker options files
80 LIBOPT = $(SRC)crtl.opt;
81 ID_OPT = $(SRC)ident.opt;
83 # timestamps for primary header files, matching src/Makefile
84 CONFIG_H = $(SRC)config.h-t
85 HACK_H = $(SRC)hack.h-t
89 SPLEVSRC = lev_yacc.c lev_lex.c lev_main.c
90 DGNCOMPSRC = dgn_yacc.c dgn_lex.c dgn_main.c
93 UTILSRCS = $(MAKESRC) $(SPLEVSRC) $(DGNCOMPSRC) $(RECOVSRC) $(DLBSRC) panic.c
95 VMSOBJS = $(SRC)vmsmisc.obj,$(SRC)vmsfiles.obj
97 # object files that provide access to aNetHack's names
98 NAMEOBJ1 = $(SRC)monst.obj,$(SRC)objects.obj
99 NAMEOBJ2 = $(SRC)drawing.obj,$(SRC)decl.obj
100 NAMEOBJS = $(NAMEOBJ1),$(NAMEOBJ2)
102 # object files for makedefs
103 MAKEOBJS = makedefs.obj,$(NAMEOBJ1)
105 # object files for special levels compiler
106 SPLEVOBJS = lev_main.obj,lev_yacc.obj,lev_lex.obj,panic.obj,\
107 $(SRC)alloc.obj,$(NAMEOBJS)
109 # object files for dungeon compiler
110 DGNCOMPOBJS = dgn_main.obj,dgn_yacc.obj,dgn_lex.obj,panic.obj,$(SRC)alloc.obj
112 # object files for recovery utility
113 RECOVOBJS = recover.obj
115 # object files for dlb utility
116 DLBOBJS = dlb_main.obj,panic.obj,$(SRC)alloc.obj,$(SRC)dlb.obj
121 @ $(ECHO) "Oops! No target(s) specified...."
123 all : $(MAKEDEFS) $(LEVCOMP) $(DGNCOMP) $(RECOVER) $(DLB)
124 @ $(ECHO) "util is up to date."
126 # special targets for folks without yacc/bison and or lex/flex
128 copy $(SYSSHR)%%%_yacc.c $(UTL)
129 copy $(SYSSHR)%%%_comp.h $(INC)
130 @ $(ECHO) "distributed yacc output (*_yacc.c) copied into place"
132 copy $(SYSSHR)%%%_lex.c $(UTL)
133 copy $(VMS)lev_lex.h $(UTL)
134 @ $(ECHO) "distributed lex output (*_lex.c) copied into place"
136 # alternate target names for possible interactive use
137 makedefs : $(MAKEDEFS)
138 @ $(ECHO) "makedefs is up to date."
139 lev_comp : $(LEVCOMP)
140 @ $(ECHO) "lev_comp is up to date."
141 dgn_comp : $(DGNCOMP)
142 @ $(ECHO) "dgn_comp is up to date."
144 @ $(ECHO) "recover is up to date."
146 @ $(ECHO) "dlb is up to date."
148 $(LIBOPT) : $(SRC)Makefile.; # linker options file
150 $(MAKE)$(MAKEFLAGS) $(LIBOPT)
153 $(ID_OPT) : $(SRC)Makefile.; # linker options file
155 $(MAKE)$(MAKEFLAGS) $(ID_OPT)
158 # dependencies for makedefs
160 $(MAKEDEFS) : $(MAKEOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
161 $(LINK) $(LFLAGS) $(MAKEOBJS),$(VMSOBJS),$(LIBS)
164 makedefs.obj : makedefs.c \
165 $(CONFIG_H) $(INC)permonst.h $(INC)objclass.h \
166 $(INC)monsym.h $(INC)artilist.h $(INC)dungeon.h \
167 $(INC)obj.h $(INC)monst.h $(INC)you.h $(INC)flag.h \
168 $(INC)dlb.h $(INC)patchlevel.h $(INC)qtext.h
170 $(INC)onames.h : $(MAKEDEFS)
171 $(RUN) $(MAKEDEFS) -o
172 $(INC)pm.h : $(MAKEDEFS)
173 $(RUN) $(MAKEDEFS) -p
174 $(SRC)monstr.c : $(MAKEDEFS)
175 $(RUN) $(MAKEDEFS) -m
176 # both vis_tab.h and vis_tab.c are made at the same time by makedefs -z
177 $(INC)vis_tab.h : $(SRC)vis_tab.c
178 $(TOUCH) $(INC)vis_tab.h
179 $(SRC)vis_tab.c : $(MAKEDEFS)
180 $(RUN) $(MAKEDEFS) -z
182 # the src Makefile is responsible for knowing when to call this, since
183 # it knows all about the main src and include files
184 $(INC)date.h : $(MAKEDEFS)
185 $(RUN) $(MAKEDEFS) -v
188 # dependencies for lev_comp
190 $(LEVCOMP) : $(SPLEVOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
191 $(LINK)/Exe=$(LEVCOMP) $(LFLAGS) $(SPLEVOBJS),$(VMSOBJS),$(LIBS)
193 lev_yacc.obj : $(HACK_H) $(INC)sp_lev.h lev_yacc.c
194 $(CC) $(CFLAGS) lev_yacc.c
195 lev_lex.obj : $(HACK_H) $(INC)lev_comp.h $(INC)sp_lev.h lev_lex.c
196 @ if f$search("lev_lex.h").nes."" then $(MOVE) lev_lex.h stdio.h
197 $(CC) $(CFLAGS) lev_lex.c
198 @ if f$search("stdio.h").nes."" then $(MOVE) stdio.h lev_lex.h
199 lev_main.obj : $(HACK_H) $(INC)sp_lev.h $(INC)tcap.h $(INC)date.h lev_main.c
200 $(CC) $(CFLAGS) lev_main.c
201 panic.obj : $(CONFIG_H)
202 $(CC) $(CFLAGS) panic.c
204 $(INC)lev_comp.h : lev_yacc.c
205 $(TOUCH) $(INC)lev_comp.h
207 lev_yacc.c : lev_comp.y
209 $(MUNG) 'f$parse("$(YACCOUT)","lev_comp_tab.c")' "#module" /Outp=lev_yacc.c
210 @ if f$search("''f$parse("$(YACCOUT)","lev_comp_tab.c")'").nes."" then \
211 $(RM) 'f$parse("$(YACCOUT)","lev_comp_tab.c")'
212 $(MOVE) 'f$parse("$(YACCOUT)","lev_comp_tab.h")' $(INC)lev_comp.h
214 lev_lex.c : lev_comp.l
216 $(MUNG) 'f$parse("$(LEXOUT)","lev_comp_lex.c")' "#module" /Outp=lev_lex.c
217 @ if f$search("''f$parse("$(LEXOUT)","lev_comp_lex.c")'").nes."" then \
218 $(RM) 'f$parse("$(LEXOUT)","lev_comp_lex.c")'
221 # dependencies for dgn_comp
223 $(DGNCOMP) : $(DGNCOMPOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
224 $(LINK)/Exe=$(DGNCOMP) $(LFLAGS) $(DGNCOMPOBJS),$(VMSOBJS),$(LIBS)
226 dgn_yacc.obj : $(CONFIG_H) $(INC)dgn_file.h $(INC)date.h dgn_yacc.c
227 $(CC) $(CFLAGS) dgn_yacc.c
228 dgn_lex.obj : $(CONFIG_H) $(INC)dgn_comp.h $(INC)dgn_file.h dgn_lex.c
229 @ if f$search("lev_lex.h").nes."" then $(MOVE) lev_lex.h stdio.h
230 $(CC) $(CFLAGS) dgn_lex.c
231 @ if f$search("stdio.h").nes."" then $(MOVE) stdio.h lev_lex.h
232 dgn_main.obj : $(CONFIG_H) dgn_main.c
233 $(CC) $(CFLAGS) dgn_main.c
235 $(INC)dgn_comp.h : dgn_yacc.c
236 $(TOUCH) $(INC)dgn_comp.h
238 dgn_yacc.c : dgn_comp.y
240 $(MUNG) 'f$parse("$(YACCOUT)","dgn_comp_tab.c")' "#module" /Outp=dgn_yacc.c
241 @ if f$search("''f$parse("$(YACCOUT)","dgn_comp_tab.c")'").nes."" then \
242 $(RM) 'f$parse("$(YACCOUT)","dgn_comp_tab.c")'
243 $(MOVE) 'f$parse("$(YACCOUT)","dgn_comp_tab.h")' $(INC)dgn_comp.h
245 dgn_lex.c : dgn_comp.l
247 $(MUNG) 'f$parse("$(LEXOUT)","dgn_comp_lex.c")' "#module" /Outp=dgn_lex.c
248 @ if f$search("''f$parse("$(LEXOUT)","dgn_comp_lex.c")'").nes."" then \
249 $(RM) 'f$parse("$(LEXOUT)","dgn_comp_lex.c")'
252 # dependencies for recover
254 $(RECOVER) : $(RECOVOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
255 $(LINK) $(LFLAGS) $(RECOVOBJS),$(VMSOBJS),$(LIBS)
257 recover.obj : $(CONFIG_H) recover.c
259 # dependencies for dlb
261 $(DLB) : $(DLBOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
262 $(LINK)/Exe=$(DLB) $(LFLAGS) $(DLBOBJS),$(VMSOBJS),$(LIBS)
264 dlb_main.obj : $(CONFIG_H) $(INC)dlb.h dlb_main.c
266 # dependencies and build rules for tile utilities
268 TILEMAP = $(UTL)tilemap.exe;
269 GIF2TXT = $(UTL)gif2txt.exe;
270 TXT2PPM = $(UTL)txt2ppm.exe;
271 TILE2X11 = $(UTL)tile2x11.exe;
272 TILEUTILS = $(TILEMAP),$(GIF2TXT),$(TXT2PPM),$(TILE2X11)
273 TEXTIO = $(UTL)tiletxt.obj,tiletext.obj,$(NAMEOBJS),$(SRC)vmsmisc.obj
274 GIFREADERS = gifread.obj,panic.obj,$(SRC)alloc.obj
275 PPMWRITERS = ppmwrite.obj,panic.obj,$(SRC)alloc.obj
277 tileutils : $(TILEUTILS)
280 $(GIF2TXT) : $(GIFREADERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
281 $(LINK)/Exe=$(GIF2TXT) $(LFLAGS) $(GIFREADERS),$(TEXTIO),$(LIBS)
282 $(TXT2PPM) : $(PPMWRITERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
283 $(LINK)/Exe=$(TXT2PPM) $(LFLAGS) $(PPMWRITERS),$(TEXTIO),$(LIBS)
284 $(TILE2X11) : tile2x11.obj $(TEXTIO) $(LIBOPT) $(ID_OPT)
285 $(LINK) $(LFLAGS) tile2x11.obj,$(TEXTIO),$(LIBS)
286 $(TILEMAP) : tilemap.obj $(SRC)vmsmisc.obj $(LIBOPT) $(ID_OPT)
287 $(LINK) $(LFLAGS) tilemap.obj,$(SRC)vmsmisc.obj,$(LIBS)
289 $(SRC)tile.c : $(TILEMAP)
291 $(INC)tile.h : $(WINSHR)tile.h
292 copy $(WINSHR)tile.h $(INC)tile.h
294 # Force an explicit directory prefix on tiletxt.obj so that we don't get
295 # unwanted "sticky defaults" when $(TEXTIO) is used in a comma-separated
296 # list on the link command line.
298 $(UTL)tiletxt.obj : $(HACK_H) $(WINSHR)tilemap.c
299 $(CC) $(CFLAGS) /Def=("TILETEXT")/Obj=$@ $(WINSHR)tilemap.c
300 tilemap.obj : $(HACK_H) $(WINSHR)tilemap.c
301 tiletext.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)tiletext.c
302 gifread.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)gifread.c
303 ppmwrite.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)ppmwrite.c
304 tile2x11.obj : $(HACK_H) $(INC)tile.h $(INC)tile2x11.h $(WINX11)tile2x11.c
307 # make sure object files from src are available when needed
309 $(SRC)alloc.obj : $(SRC)alloc.c $(CONFIG_H)
311 $(MAKE)$(MAKEFLAGS) alloc.obj
314 $(SRC)monst.obj : $(SRC)monst.c $(CONFIG_H)
316 $(MAKE)$(MAKEFLAGS) monst.obj
319 $(SRC)objects.obj : $(SRC)objects.c $(CONFIG_H)
321 $(MAKE)$(MAKEFLAGS) objects.obj
324 $(SRC)decl.obj : $(SRC)decl.c $(HACK_H)
326 $(MAKE)$(MAKEFLAGS) decl.obj
329 $(SRC)drawing.obj : $(SRC)drawing.c $(HACK_H)
331 $(MAKE)$(MAKEFLAGS) drawing.obj
334 $(SRC)dlb.obj : $(SRC)dlb.c $(CONFIG_H) $(INC)dlb.h
336 $(MAKE)$(MAKEFLAGS) dlb.obj
339 # make sure hack.h dependencies get transitive information
340 $(HACK_H) : $(CONFIG_H)
342 $(MAKE)$(MAKEFLAGS) $(HACK_H)
344 $(CONFIG_H) : $(INC)config.h
346 $(MAKE)$(MAKEFLAGS) $(CONFIG_H)
349 # VMS specific dependencies
350 $(SRC)vmsmisc.obj : $(VMS)vmsmisc.c $(CONFIG_H)
352 $(MAKE)$(MAKEFLAGS) vmsmisc.obj
355 $(SRC)vmsfiles.obj : $(VMS)vmsfiles.c $(CONFIG_H)
357 $(MAKE)$(MAKEFLAGS) vmsfiles.obj
362 - if f$search("*.*;-1").nes."" then purge
363 - if f$search("*.obj") .nes."" then $(RM) *.obj;
366 - if f$search("%%%_lex.c") .nes."" then $(RM) %%%_lex.c;
367 - if f$search("%%%_yacc.c").nes."" then $(RM) %%%_yacc.c;
368 - if f$search("$(INC)%%%_comp.h").nes."" then $(RM) $(INC)%%%_comp.h;*
369 - if f$search("$(INC)tile.h").nes."" then $(RM) $(INC)tile.h;*
370 - if f$search("lev_lex.h") .nes."" then $(RM) lev_lex.h;
371 - if f$search("*tab.c") .nes."" then $(RM) *tab.c;
372 - if f$search("*.exe").nes."" then \
373 $(RM) $(MAKEDEFS),$(LEVCOMP),$(DGNCOMP),$(RECOVER),$(DLB)
374 - if f$search("*.exe").nes."" then $(RM) $(TILEUTILS)
375 - if f$search("$(MARKER)").nes."" then $(RM) $(MARKER)