OSDN Git Service

upgrade to 3.6.1
[jnethack/source.git] / sys / vms / Makefile.utl
1 #       NetHack Makefile (VMS) - for utility programs.
2 #       NetHack 3.6     Makefile.utl    $NHDT-Date: 1524689428 2018/04/25 20:50:28 $    $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.15 $
3 # Copyright (c) 2011 by Robert Patrick Rankin
4 # NetHack may be freely redistributed.  See license for details.
5
6 #  Copy this file to [.util]Makefile. and then edit it as needed.
7 #  The default configuration is for building with DEC C (aka Compaq C).
8 #  Settings for CC and CFLAGS ought to match the ones used in [.src]Makefile.
9
10 MAKE    = $(MMS)
11 CD      = set default
12 ECHO    = write sys$output
13 MOVE    = rename/New            # within same device only
14 MUNG    = search/Exact/Match=NOR        # to strip bogus #module directives
15 NOOP    = continue
16 RM      = delete/noConfirm
17 RUN     = mcr                   # simplest way to pass command line args
18 TOUCH   = append/New _NLA0:     # only one file per $(TOUCH)
19 # source tree, relative to 'src' and 'util'
20 DAT = [-.dat]
21 INC = [-.include]
22 SYSSHR = [-.sys.share]
23 SRC = [-.src]
24 UTL = [-.util]
25 VMS = [-.sys.vms]
26 WINSHR = [-.win.share]
27 WINX11 = [-.win.X11]
28 # targets, with enough punctuation to keep MCR and DELETE happy
29 MAKEDEFS= $(UTL)makedefs.exe;
30 LEVCOMP = $(UTL)lev_comp.exe;
31 DGNCOMP = $(UTL)dgn_comp.exe;
32 DLB     = $(UTL)dlb.exe;
33 RECOVER = $(UTL)recover.exe;
34 # used by $(DAT)Makefile for synchronization
35 MARKER  = $(UTL)util.timestamp;
36
37 # if you are using gcc as your compiler,
38 #       uncomment the CC definition below if it's not in your environment
39 # CC = gcc
40
41 CFLAGS  = /Prefix=All/Incl=$(INC)/noList        # DECC in native mode
42 #CFLAGS = /Include=$(INC)/noList        # VAXC or GNUC
43 LFLAGS  = /noMap
44 LIBS    = $(SRC)crtl.opt/Options,$(SRC)ident.opt/Options  # run-time library
45 LINK    = link
46
47 # If you don't have yacc, byacc, or bison or just don't want to run any of
48 #       them, then make target "no_yacc" before trying to build lev_comp
49 #       or dgn_comp.  You won't be able to modify *_comp.y though.
50 # If you don't have lex or flex, then make target "no_lex" and leave
51 #       *_comp.l alone.  $(VMS)lev_lex.h will be used to work-around some
52 #       suspect code included in the distributed copies of *_lex.c.
53 # If you do either of the above, the corresponding value of YACC and/or LEX
54 #       below won't matter.
55 #
56 # Note:  VMS POSIX V1.1 lex and yacc generate code which contains an
57 #       invalid #module directive; it order to prevent warnings for CC or
58 #       choking by GCC, the SEARCH command is used in an attempt to strip
59 #       then out.  Otherwise MMS would quit when making the affected targets.
60 #       Each "munged" copy should be identical to its original if no #module
61 #       directives are present.
62 #
63 # yacc/lex programs to use to generate *_comp.c, *_comp.h, and *_lex.c.
64 # choose xxxOUT that matches xxx tool's output
65 YACC    = bison /Define
66 LEX     = flex
67 #YACC   = yacc -d
68 #LEX    = lex
69 #YACC   = posix/Run posix$bin:yacc. "-d
70 #LEX    = posix/Run posix$bin:lex. "
71 # blank means foo.y -> foo_tab.c & foo_tab.h
72 YACCOUT =               # bison
73 #YACCOUT = ytab         # VMS POSIX
74 #YACCOUT = y_tab        # DEC/Shell
75 LEXOUT  = lexyy         # flex
76 #LEXOUT  = lex_yy       # VMS POSIX
77
78
79 # Nothing below this line should have to be changed.
80
81 # linker options files
82 LIBOPT  = $(SRC)crtl.opt;
83 ID_OPT  = $(SRC)ident.opt;
84
85 # timestamps for primary header files, matching src/Makefile
86 CONFIG_H = $(SRC)config.h-t
87 HACK_H   = $(SRC)hack.h-t
88
89 # utility .c files
90 MAKESRC    = makedefs.c
91 SPLEVSRC   = lev_yacc.c lev_lex.c lev_main.c
92 DGNCOMPSRC = dgn_yacc.c dgn_lex.c dgn_main.c
93 RECOVSRC   = recover.c
94 DLBSRC     = dlb_main.c
95 UTILSRCS   = $(MAKESRC) $(SPLEVSRC) $(DGNCOMPSRC) $(RECOVSRC) $(DLBSRC) panic.c
96
97 VMSOBJS = $(SRC)vmsmisc.obj,$(SRC)vmsfiles.obj
98
99 # object files that provide access to NetHack's names
100 NAMEOBJ1 = $(SRC)monst.obj,$(SRC)objects.obj
101 NAMEOBJ2 = $(SRC)drawing.obj,$(SRC)decl.obj
102 NAMEOBJS = $(NAMEOBJ1),$(NAMEOBJ2)
103
104 # object files for makedefs
105 MAKEOBJS = makedefs.obj,$(NAMEOBJ1)
106
107 # object files for special levels compiler
108 SPLEVOBJS = lev_main.obj,lev_yacc.obj,lev_lex.obj,panic.obj,\
109             $(SRC)alloc.obj,$(NAMEOBJS)
110
111 # object files for dungeon compiler
112 DGNCOMPOBJS = dgn_main.obj,dgn_yacc.obj,dgn_lex.obj,panic.obj,$(SRC)alloc.obj
113
114 # object files for recovery utility
115 RECOVOBJS = recover.obj
116
117 # object files for dlb utility
118 DLBOBJS = dlb_main.obj,panic.obj,$(SRC)alloc.obj,$(SRC)dlb.obj
119
120
121 #       fake target
122 default :
123       @ $(ECHO) "Oops!  No target(s) specified...."
124
125 all     : $(MAKEDEFS) $(LEVCOMP) $(DGNCOMP) $(RECOVER) $(DLB)
126       @ $(ECHO) "util is up to date."
127
128 #       special targets for folks without yacc/bison and or lex/flex
129 no_yacc :
130         copy $(SYSSHR)%%%_yacc.c $(UTL)
131         copy $(SYSSHR)%%%_comp.h $(INC)
132       @ $(ECHO) "distributed yacc output (*_yacc.c) copied into place"
133 no_lex :
134         copy $(SYSSHR)%%%_lex.c $(UTL)
135         copy $(VMS)lev_lex.h $(UTL)
136       @ $(ECHO) "distributed lex output (*_lex.c) copied into place"
137
138 #       alternate target names for possible interactive use
139 makedefs : $(MAKEDEFS)
140       @ $(ECHO) "makedefs is up to date."
141 lev_comp : $(LEVCOMP)
142       @ $(ECHO) "lev_comp is up to date."
143 dgn_comp : $(DGNCOMP)
144       @ $(ECHO) "dgn_comp is up to date."
145 recover  : $(RECOVER)
146       @ $(ECHO) "recover is up to date."
147 dlb      : $(DLB)
148       @ $(ECHO) "dlb is up to date."
149
150 $(LIBOPT) : $(SRC)Makefile.;            # linker options file
151         $(CD) $(SRC)
152         $(MAKE)$(MAKEFLAGS) $(LIBOPT)
153       @ $(CD) $(UTL)
154
155 $(ID_OPT) : $(SRC)Makefile.;            # linker options file
156         $(CD) $(SRC)
157         $(MAKE)$(MAKEFLAGS) $(ID_OPT)
158       @ $(CD) $(UTL)
159
160 #       dependencies for makedefs
161 #
162 $(MAKEDEFS) :   $(MAKEOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
163         $(LINK) $(LFLAGS) $(MAKEOBJS),$(VMSOBJS),$(LIBS)
164       @ $(TOUCH) $(MARKER)
165
166 makedefs.obj :  makedefs.c \
167                 $(CONFIG_H) $(INC)permonst.h $(INC)objclass.h \
168                 $(INC)monsym.h $(INC)artilist.h $(INC)dungeon.h \
169                 $(INC)obj.h $(INC)monst.h $(INC)you.h $(INC)flag.h \
170                 $(INC)dlb.h $(INC)patchlevel.h $(INC)qtext.h
171
172 $(INC)onames.h  : $(MAKEDEFS)
173         $(RUN) $(MAKEDEFS) -o
174 $(INC)pm.h      : $(MAKEDEFS)
175         $(RUN) $(MAKEDEFS) -p
176 $(SRC)monstr.c  : $(MAKEDEFS)
177         $(RUN) $(MAKEDEFS) -m
178 # both vis_tab.h and vis_tab.c are made at the same time by makedefs -z
179 $(INC)vis_tab.h : $(SRC)vis_tab.c
180         $(TOUCH) $(INC)vis_tab.h
181 $(SRC)vis_tab.c : $(MAKEDEFS)
182         $(RUN) $(MAKEDEFS) -z
183
184 # the src Makefile is responsible for knowing when to call this, since
185 # it knows all about the main src and include files
186 $(INC)date.h :  $(MAKEDEFS)
187         $(RUN) $(MAKEDEFS) -v
188
189
190 #       dependencies for lev_comp
191 #
192 $(LEVCOMP) : $(SPLEVOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
193         $(LINK)/Exe=$(LEVCOMP) $(LFLAGS) $(SPLEVOBJS),$(VMSOBJS),$(LIBS)
194
195 lev_yacc.obj : $(HACK_H) $(INC)sp_lev.h lev_yacc.c
196         $(CC) $(CFLAGS) lev_yacc.c
197 lev_lex.obj  : $(HACK_H) $(INC)lev_comp.h $(INC)sp_lev.h lev_lex.c
198         @ if f$search("lev_lex.h").nes."" then  $(MOVE) lev_lex.h stdio.h
199         $(CC) $(CFLAGS) lev_lex.c
200         @ if f$search("stdio.h").nes."" then  $(MOVE) stdio.h lev_lex.h
201 lev_main.obj : $(HACK_H) $(INC)sp_lev.h $(INC)tcap.h $(INC)date.h lev_main.c
202         $(CC) $(CFLAGS) lev_main.c
203 panic.obj    : $(CONFIG_H)
204         $(CC) $(CFLAGS) panic.c
205
206 $(INC)lev_comp.h : lev_yacc.c
207         $(TOUCH) $(INC)lev_comp.h
208
209 lev_yacc.c : lev_comp.y
210         $(YACC) lev_comp.y
211         $(MUNG) 'f$parse("$(YACCOUT)","lev_comp_tab.c")' "#module" /Outp=lev_yacc.c
212         @ if f$search("''f$parse("$(YACCOUT)","lev_comp_tab.c")'").nes."" then \
213                 $(RM) 'f$parse("$(YACCOUT)","lev_comp_tab.c")'
214         $(MOVE) 'f$parse("$(YACCOUT)","lev_comp_tab.h")' $(INC)lev_comp.h
215
216 lev_lex.c : lev_comp.l
217         $(LEX) lev_comp.l
218         $(MUNG) 'f$parse("$(LEXOUT)","lev_comp_lex.c")' "#module" /Outp=lev_lex.c
219         @ if f$search("''f$parse("$(LEXOUT)","lev_comp_lex.c")'").nes."" then \
220                 $(RM) 'f$parse("$(LEXOUT)","lev_comp_lex.c")'
221
222
223 #       dependencies for dgn_comp
224 #
225 $(DGNCOMP) : $(DGNCOMPOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
226         $(LINK)/Exe=$(DGNCOMP) $(LFLAGS) $(DGNCOMPOBJS),$(VMSOBJS),$(LIBS)
227
228 dgn_yacc.obj : $(CONFIG_H) $(INC)dgn_file.h $(INC)date.h dgn_yacc.c
229         $(CC) $(CFLAGS) dgn_yacc.c
230 dgn_lex.obj  : $(CONFIG_H) $(INC)dgn_comp.h $(INC)dgn_file.h dgn_lex.c
231         @ if f$search("lev_lex.h").nes."" then  $(MOVE) lev_lex.h stdio.h
232         $(CC) $(CFLAGS) dgn_lex.c
233         @ if f$search("stdio.h").nes."" then  $(MOVE) stdio.h lev_lex.h
234 dgn_main.obj : $(CONFIG_H) dgn_main.c
235         $(CC) $(CFLAGS) dgn_main.c
236
237 $(INC)dgn_comp.h : dgn_yacc.c
238         $(TOUCH) $(INC)dgn_comp.h
239
240 dgn_yacc.c : dgn_comp.y
241         $(YACC) dgn_comp.y
242         $(MUNG) 'f$parse("$(YACCOUT)","dgn_comp_tab.c")' "#module" /Outp=dgn_yacc.c
243         @ if f$search("''f$parse("$(YACCOUT)","dgn_comp_tab.c")'").nes."" then \
244                 $(RM) 'f$parse("$(YACCOUT)","dgn_comp_tab.c")'
245         $(MOVE) 'f$parse("$(YACCOUT)","dgn_comp_tab.h")' $(INC)dgn_comp.h
246
247 dgn_lex.c : dgn_comp.l
248         $(LEX) dgn_comp.l
249         $(MUNG) 'f$parse("$(LEXOUT)","dgn_comp_lex.c")' "#module" /Outp=dgn_lex.c
250         @ if f$search("''f$parse("$(LEXOUT)","dgn_comp_lex.c")'").nes."" then \
251                 $(RM) 'f$parse("$(LEXOUT)","dgn_comp_lex.c")'
252
253
254 #       dependencies for recover
255 #
256 $(RECOVER) : $(RECOVOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
257         $(LINK) $(LFLAGS) $(RECOVOBJS),$(VMSOBJS),$(LIBS)
258
259 recover.obj : $(CONFIG_H) recover.c
260
261 #       dependencies for dlb
262 #
263 $(DLB) : $(DLBOBJS) $(VMSOBJS) $(LIBOPT) $(ID_OPT)
264         $(LINK)/Exe=$(DLB) $(LFLAGS) $(DLBOBJS),$(VMSOBJS),$(LIBS)
265
266 dlb_main.obj : $(CONFIG_H) $(INC)dlb.h dlb_main.c
267
268 #       dependencies and build rules for tile utilities
269 #
270 TILEMAP    = $(UTL)tilemap.exe;
271 GIF2TXT    = $(UTL)gif2txt.exe;
272 TXT2PPM    = $(UTL)txt2ppm.exe;
273 TILE2X11   = $(UTL)tile2x11.exe;
274 TILEUTILS  = $(TILEMAP),$(GIF2TXT),$(TXT2PPM),$(TILE2X11)
275 TEXTIO     = $(UTL)tiletxt.obj,tiletext.obj,$(NAMEOBJS),$(SRC)vmsmisc.obj
276 GIFREADERS = gifread.obj,panic.obj,$(SRC)alloc.obj
277 PPMWRITERS = ppmwrite.obj,panic.obj,$(SRC)alloc.obj
278
279 tileutils : $(TILEUTILS)
280         @ $(NOOP)
281
282 $(GIF2TXT) : $(GIFREADERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
283         $(LINK)/Exe=$(GIF2TXT) $(LFLAGS) $(GIFREADERS),$(TEXTIO),$(LIBS)
284 $(TXT2PPM) : $(PPMWRITERS) $(TEXTIO) $(LIBOPT) $(ID_OPT)
285         $(LINK)/Exe=$(TXT2PPM) $(LFLAGS) $(PPMWRITERS),$(TEXTIO),$(LIBS)
286 $(TILE2X11) : tile2x11.obj $(TEXTIO) $(LIBOPT) $(ID_OPT)
287         $(LINK) $(LFLAGS) tile2x11.obj,$(TEXTIO),$(LIBS)
288 $(TILEMAP) : tilemap.obj $(SRC)vmsmisc.obj $(LIBOPT) $(ID_OPT)
289         $(LINK) $(LFLAGS) tilemap.obj,$(SRC)vmsmisc.obj,$(LIBS)
290
291 $(SRC)tile.c : $(TILEMAP)
292         $(RUN) $(TILEMAP)
293 $(INC)tile.h : $(WINSHR)tile.h
294         copy $(WINSHR)tile.h $(INC)tile.h
295
296 # Force an explicit directory prefix on tiletxt.obj so that we don't get
297 # unwanted "sticky defaults" when $(TEXTIO) is used in a comma-separated
298 # list on the link command line.
299 #
300 $(UTL)tiletxt.obj : $(HACK_H) $(WINSHR)tilemap.c
301         $(CC) $(CFLAGS) /Def=("TILETEXT")/Obj=$@ $(WINSHR)tilemap.c
302 tilemap.obj  : $(HACK_H) $(WINSHR)tilemap.c
303 tiletext.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)tiletext.c
304 gifread.obj  : $(CONFIG_H) $(INC)tile.h $(WINSHR)gifread.c
305 ppmwrite.obj : $(CONFIG_H) $(INC)tile.h $(WINSHR)ppmwrite.c
306 tile2x11.obj : $(HACK_H) $(INC)tile.h $(INC)tile2x11.h $(WINX11)tile2x11.c
307
308
309 # make sure object files from src are available when needed
310 #
311 $(SRC)alloc.obj : $(SRC)alloc.c $(CONFIG_H)
312         $(CD) $(SRC)
313         $(MAKE)$(MAKEFLAGS) alloc.obj
314       @ $(CD) $(UTL)
315
316 $(SRC)monst.obj : $(SRC)monst.c $(CONFIG_H)
317         $(CD) $(SRC)
318         $(MAKE)$(MAKEFLAGS) monst.obj
319       @ $(CD) $(UTL)
320
321 $(SRC)objects.obj : $(SRC)objects.c $(CONFIG_H)
322         $(CD) $(SRC)
323         $(MAKE)$(MAKEFLAGS) objects.obj
324       @ $(CD) $(UTL)
325
326 $(SRC)decl.obj : $(SRC)decl.c $(HACK_H)
327         $(CD) $(SRC)
328         $(MAKE)$(MAKEFLAGS) decl.obj
329       @ $(CD) $(UTL)
330
331 $(SRC)drawing.obj : $(SRC)drawing.c $(HACK_H)
332         $(CD) $(SRC)
333         $(MAKE)$(MAKEFLAGS) drawing.obj
334       @ $(CD) $(UTL)
335
336 $(SRC)dlb.obj : $(SRC)dlb.c $(CONFIG_H) $(INC)dlb.h
337         $(CD) $(SRC)
338         $(MAKE)$(MAKEFLAGS) dlb.obj
339       @ $(CD) $(UTL)
340
341 # make sure hack.h dependencies get transitive information
342 $(HACK_H) : $(CONFIG_H)
343         $(CD) $(SRC)
344         $(MAKE)$(MAKEFLAGS) $(HACK_H)
345       @ $(CD) $(UTL)
346 $(CONFIG_H) : $(INC)config.h
347         $(CD) $(SRC)
348         $(MAKE)$(MAKEFLAGS) $(CONFIG_H)
349       @ $(CD) $(UTL)
350
351 # VMS specific dependencies
352 $(SRC)vmsmisc.obj :     $(VMS)vmsmisc.c $(CONFIG_H)
353         $(CD) $(SRC)
354         $(MAKE)$(MAKEFLAGS) vmsmisc.obj
355       @ $(CD) $(UTL)
356
357 $(SRC)vmsfiles.obj :    $(VMS)vmsfiles.c $(CONFIG_H)
358         $(CD) $(SRC)
359         $(MAKE)$(MAKEFLAGS) vmsfiles.obj
360       @ $(CD) $(UTL)
361
362
363 clean :
364       - if f$search("*.*;-1").nes."" then  purge
365       - if f$search("*.obj") .nes."" then  $(RM) *.obj;
366
367 spotless :      clean
368       - if f$search("%%%_lex.c") .nes."" then  $(RM) %%%_lex.c;
369       - if f$search("%%%_yacc.c").nes."" then  $(RM) %%%_yacc.c;
370       - if f$search("$(INC)%%%_comp.h").nes."" then  $(RM) $(INC)%%%_comp.h;*
371       - if f$search("$(INC)tile.h").nes."" then  $(RM) $(INC)tile.h;*
372       - if f$search("lev_lex.h") .nes."" then  $(RM) lev_lex.h;
373       - if f$search("*tab.c")    .nes."" then  $(RM) *tab.c;
374       - if f$search("*.exe").nes."" then \
375  $(RM) $(MAKEDEFS),$(LEVCOMP),$(DGNCOMP),$(RECOVER),$(DLB)
376       - if f$search("*.exe").nes."" then  $(RM) $(TILEUTILS)
377       - if f$search("$(MARKER)").nes."" then  $(RM) $(MARKER)