summaryrefslogtreecommitdiff
path: root/games/nethack/files/Makefile.utl.slack
blob: b259cfc2b6d45f0199135ebbb23ee75ffab48e8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
#	Makefile for NetHack's utility programs.
#	SCCS Id: @(#)Makefile.utl	3.4	1997/04/19

# 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 'foo.o')
# MAKE = make

# if you are using gcc as your compiler,
#	uncomment the CC definition below if it's not in your environment
CC = gcc
#
#	For Bull DPX/2 systems at B.O.S. 2.0 or higher use the following:
#
# CC = gcc -ansi -D_BULL_SOURCE -D_XOPEN_SOURCE -D_POSIX_SOURCE
# 
#	If you are using GCC 2.2.2 or higher on a DPX/2, just use:
#
# CC = gcc -ansi
#
#	For HP/UX 10.20 with GCC:
# CC = gcc -D_POSIX_SOURCE
#
# if your make doesn't define a default SHELL properly, you may need
#    the line below (Atari users will need a bourne work-alike)
# SHELL = /bin/sh
# for Atari
# SHELL=E:/GEMINI2/MUPFEL.TTP

# flags may have to be changed as required
# flags for 286 Xenix:
# CFLAGS = -Ml2t16 -O -LARGE -I../include
# LFLAGS = -Ml -F 4000 -SEG 512

# flags for 286 Microport SysV-AT
# CFLAGS = -DDUMB -Ml -I../include
# LFLAGS = -Ml

# flags for Atari GCC (3.2.1)
# CFLAGS = -O -I../include
# LFLAGS = -s
# flags for Atari GCC (3.3)
# CFLAGS = -mshort -O2 -I../include
# LFLAGS = -mshort -s

# flags for Apollos using their native cc
# (as long as it claims to be __STDC__ but isn't)
# CFLAGS = -DAPOLLO -O -I../include

# flags for AIX 3.1 cc on IBM RS/6000 to define
# a suitable subset of standard libraries
# (note that there is more info regarding the "-qchars=signed"
# switch in file Install.unx note 8)
# CFLAGS = -D_NO_PROTO -D_XOPEN_SOURCE -O -I../include -qchars=signed
# and for AIX 3.2:
# CFLAGS = -D_NO_PROTO -D_XOPEN_SOURCE -D_ALL_SOURCE -O -I../include -qchars=signed

# flags for A/UX 2.01 using native cc or c89
# gcc predefines AUX so that's not needed there
# CFLAGS = -ZS -D_POSIX_SOURCE -O -I../include -DAUX

# flags for IRIX 4.0.x using native cc
# SGI cc 3.10 will fail to compile makedefs with -O
# CFLAGS = -I../include -D__STDC__ -woff 100,293

# flags for Linux
#   compile normally
# CFLAGS = -O2 -fomit-frame-pointer -I../include
LFLAGS = -L/usr/lib
#   OR compile backwards compatible a.out format
# CFLAGS = -O2 -b i486-linuxaout -fomit-frame-pointer -I../include
# LFLAGS = -b i486-linuxaout -L/usr/X11R6/lib

# flags for BeOS using the command line
# remember to uncomment flex and bison below
#   BeOS on a Mac/BeBox:
#CC = mwcc
#CFLAGS = -I../include
#   BeOS on Intel:
# the default values are fine

# flags for debugging:
# CFLAGS = -g -I../include

CFLAGS = -O -I../include
# LFLAGS =

LIBS =
 
# If you are cross-compiling, you must use this:
#OBJDIR = .
# otherwise, you can save a little bit of disk space with this:
OBJDIR = ../src

# yacc/lex programs to use to generate *_comp.h, *_lex.c, and *_yacc.c.
# if, instead of yacc/lex you have bison/flex, comment/uncomment the following.
# YACC     = yacc
# LEX      = lex
YACC     = bison -y
# YACC     = byacc
LEX      = flex
 
# these are the names of the output files from YACC/LEX. Under MS-DOS
# and similar systems, they may differ
YTABC = y.tab.c
YTABH = y.tab.h
LEXYYC = lex.yy.c
# YTABC = y_tab.c
# YTABH = y_tab.h
# LEXYYC = lexyy.c



# ----------------------------------------
#
# Nothing below this line should have to be changed.

# 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
SPLEVSRC = lev_yacc.c lev_lex.c lev_main.c
DGNCOMPSRC = dgn_yacc.c dgn_lex.c dgn_main.c
RECOVSRC = recover.c
DLBSRC = dlb_main.c
UTILSRCS = $(MAKESRC) panic.c $(SPLEVSRC) $(DGNCOMPSRC) $(RECOVSRC) $(DLBSRC)

# files that define all monsters and objects
CMONOBJ = ../src/monst.c ../src/objects.c
OMONOBJ = $(OBJDIR)/monst.o $(OBJDIR)/objects.o
# files that provide access to NetHack's names
CNAMING = ../src/drawing.c ../src/decl.c $(CMONOBJ)
ONAMING = $(OBJDIR)/drawing.o $(OBJDIR)/decl.o $(OMONOBJ)
# dynamic memory allocation
CALLOC = ../src/alloc.c panic.c
OALLOC = $(OBJDIR)/alloc.o panic.o

# object files for makedefs
MAKEOBJS = makedefs.o $(OMONOBJ)

# object files for special levels compiler
SPLEVOBJS = lev_yacc.o lev_lex.o lev_main.o $(OALLOC) $(ONAMING)

# object files for dungeon compiler
DGNCOMPOBJS = dgn_yacc.o dgn_lex.o dgn_main.o $(OALLOC)

# object files for recovery utility
RECOVOBJS = recover.o

# object files for the data librarian
DLBOBJS = dlb_main.o $(OBJDIR)/dlb.o $(OALLOC)

# flags for creating distribution versions of sys/share/*_lex.c, using
# a more portable flex skeleton, which is not included in the distribution.
# hopefully keeping this out of the section to be edited will keep too
# many people from being confused by it...
# FLEXDIST = -L -S../sys/share/flexhack.skl
FLEXDIST =
#
# flags for creating distribution versions of sys/share/*_yacc.c, without
# line numbers so patches from version to version are practical
# YACCDIST = -l
YACCDIST =


#	dependencies for makedefs
#
makedefs:	$(MAKEOBJS)
	$(CC) $(LFLAGS) -o makedefs $(MAKEOBJS)

makedefs.o: makedefs.c $(CONFIG_H) ../include/permonst.h \
		../include/objclass.h ../include/monsym.h \
		../include/artilist.h ../include/dungeon.h ../include/obj.h \
		../include/monst.h ../include/you.h ../include/flag.h \
		../include/dlb.h ../include/patchlevel.h ../include/qtext.h

../include/onames.h: makedefs
	./makedefs -o
../include/pm.h: makedefs
	./makedefs -p
../src/monstr.c: makedefs
	./makedefs -m
../include/vis_tab.h: makedefs
	./makedefs -z
# makedefs -z makes both vis_tab.h and vis_tab.c, but writes the .h first
../src/vis_tab.c: ../include/vis_tab.h

lintdefs:
	@lint -axbh -I../include -DLINT $(MAKESRC) $(CMONOBJ) | sed '/_flsbuf/d'


# 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
../include/date.h::
	@( cd ../src ; $(MAKE) ../include/date.h )

# support code used by several of the utility programs (but not makedefs)
panic.o:     panic.c $(CONFIG_H)


#	dependencies for lev_comp
#
lev_comp:  $(SPLEVOBJS)
	$(CC) $(LFLAGS) -o lev_comp $(SPLEVOBJS) $(LIBS)

lev_yacc.o:  lev_yacc.c $(HACK_H) ../include/sp_lev.h
lev_main.o:  lev_main.c $(HACK_H) ../include/sp_lev.h ../include/tcap.h \
		../include/date.h

# see lev_comp.l for WEIRD_LEX discussion
# egrep will return failure if it doesn't find anything, but we know there
# is one "_cplusplus" inside a comment
lev_lex.o:   lev_lex.c $(HACK_H) ../include/lev_comp.h ../include/sp_lev.h
	@echo $(CC) -c $(CFLAGS) lev_lex.c
	@$(CC) -c $(CFLAGS) -DWEIRD_LEX=`egrep -c _cplusplus lev_lex.c` lev_lex.c

../include/lev_comp.h: lev_yacc.c

lev_yacc.c: lev_comp.y
	$(YACC) $(YACCDIST) -d lev_comp.y
	mv $(YTABC) lev_yacc.c
	mv $(YTABH) ../include/lev_comp.h

lev_lex.c: lev_comp.l
	$(LEX) $(FLEXDIST) lev_comp.l
	mv $(LEXYYC) lev_lex.c

# with all of extern.h's functions to complain about, we drown in
# 'defined but not used' without -u
lintlev:
	@lint -axhu -I../include -DLINT $(SPLEVSRC) $(CALLOC) $(CNAMING) | sed '/_flsbuf/d'


#	dependencies for dgn_comp
#
dgn_comp:  $(DGNCOMPOBJS)
	$(CC) $(LFLAGS) -o dgn_comp $(DGNCOMPOBJS) $(LIBS)

dgn_yacc.o:  dgn_yacc.c $(CONFIG_H) ../include/dgn_file.h ../include/date.h
dgn_main.o:  dgn_main.c $(CONFIG_H) ../include/dlb.h

# see dgn_comp.l for WEIRD_LEX discussion
dgn_lex.o:   dgn_lex.c $(CONFIG.H) ../include/dgn_comp.h ../include/dgn_file.h
	@echo $(CC) -c $(CFLAGS) dgn_lex.c
	@$(CC) -c $(CFLAGS) -DWEIRD_LEX=`egrep -c _cplusplus dgn_lex.c` dgn_lex.c


../include/dgn_comp.h: dgn_yacc.c

dgn_yacc.c: dgn_comp.y
	$(YACC) $(YACCDIST) -d dgn_comp.y
	mv $(YTABC) dgn_yacc.c
	mv $(YTABH) ../include/dgn_comp.h

dgn_lex.c: dgn_comp.l
	$(LEX) $(FLEXDIST) dgn_comp.l
	mv $(LEXYYC) dgn_lex.c

# 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 $(DGNCOMPSRC) $(CALLOC) | sed '/_flsbuf/d'


#	dependencies for recover
#
recover: $(RECOVOBJS)
	$(CC) $(LFLAGS) -o recover $(RECOVOBJS) $(LIBS)

recover.o: recover.c $(CONFIG_H) ../include/date.h


#	dependencies for dlb
#
dlb:	$(DLBOBJS)
	$(CC) $(LFLAGS) -o dlb $(DLBOBJS) $(LIBS)

dlb_main.o: dlb_main.c $(CONFIG_H) ../include/dlb.h ../include/date.h
	$(CC) $(CFLAGS) -c dlb_main.c



#	dependencies for tile utilities
#
TEXT_IO = tiletext.o tiletxt.o $(ONAMING)
GIFREADERS = gifread.o $(OALLOC)
PPMWRITERS = ppmwrite.o $(OALLOC)

tileutils: tilemap gif2txt txt2ppm tile2x11

gif2txt: $(GIFREADERS) $(TEXT_IO)
	$(CC) $(LFLAGS) -o gif2txt $(GIFREADERS) $(TEXT_IO) $(LIBS)
txt2ppm: $(PPMWRITERS) $(TEXT_IO)
	$(CC) $(LFLAGS) -o txt2ppm $(PPMWRITERS) $(TEXT_IO) $(LIBS)

tile2x11: tile2x11.o $(TEXT_IO)
	$(CC) $(LFLAGS) -o tile2x11 tile2x11.o $(TEXT_IO) $(LIBS)

tile2img.ttp: tile2img.o bitmfile.o $(TEXT_IO)
	$(CC) $(LFLAGS) -o tile2img.ttp tile2img.o bitmfile.o $(TEXT_IO) $(LIBS)

tile2bmp: tile2bmp.o $(TEXT_IO)
	$(CC) $(LFLAGS) -o tile2bmp tile2bmp.o $(TEXT_IO)

xpm2img.ttp: xpm2img.o bitmfile.o
	$(CC) $(LFLAGS) -o xpm2img.ttp xpm2img.o bitmfile.o $(LIBS)

tile2beos: tile2beos.o $(TEXT_IO)
	$(CC) $(LFLAGS) -o tile2beos tile2beos.o $(TEXT_IO) -lbe

tilemap: ../win/share/tilemap.c $(HACK_H)
	$(CC) $(CFLAGS) $(LFLAGS) -o tilemap ../win/share/tilemap.c $(LIBS)
../src/tile.c: tilemap
	./tilemap

../include/tile.h: ../win/share/tile.h
	cp ../win/share/tile.h ../include/tile.h
tiletext.o: ../win/share/tiletext.c $(CONFIG_H) ../include/tile.h
	$(CC) $(CFLAGS) -c ../win/share/tiletext.c
tiletxt.o: ../win/share/tilemap.c $(HACK_H)
	$(CC) $(CFLAGS) -c -DTILETEXT ../win/share/tilemap.c
	mv tilemap.o tiletxt.o

gifread.o: ../win/share/gifread.c $(CONFIG_H) ../include/tile.h
	$(CC) $(CFLAGS) -c ../win/share/gifread.c
ppmwrite.o: ../win/share/ppmwrite.c $(CONFIG_H) ../include/tile.h
	$(CC) $(CFLAGS) -c ../win/share/ppmwrite.c

tile2bmp.o: ../win/share/tile2bmp.c $(HACK_H) ../include/tile.h
	$(CC) $(CFLAGS) -c ../win/share/tile2bmp.c

tile2x11.o: ../win/X11/tile2x11.c $(HACK_H) ../include/tile.h \
						../include/tile2x11.h
	$(CC) $(CFLAGS) -c ../win/X11/tile2x11.c

tile2img.o: ../win/gem/tile2img.c $(HACK_H) ../include/tile.h \
						../include/bitmfile.h
	$(CC) $(CFLAGS) -c ../win/gem/tile2img.c
xpm2img.o: ../win/gem/xpm2img.c $(HACK_H) ../include/bitmfile.h
	$(CC) $(CFLAGS) -c ../win/gem/xpm2img.c
bitmfile.o: ../win/gem/bitmfile.c ../include/bitmfile.h
	$(CC) $(CFLAGS) -c ../win/gem/bitmfile.c

tile2beos.o: ../win/BeOS/tile2beos.cpp $(HACK_H) ../include/tile.h
	$(CXX) $(CFLAGS) -c ../win/BeOS/tile2beos.cpp

# using dependencies like
#	../src/foo::
#		@( cd ../src ; $(MAKE) foo )
# would always force foo to be up-to-date according to the src Makefile
# when it's needed here.  unfortunately, some makes believe this syntax
# means foo always changes, instead of foo should always be checked.
# therefore, approximate via config.h dependencies, and hope that anybody
# changing anything other than basic configuration also knows when not
# to improvise things not in the instructions, like 'make makedefs' here
# in util...

# make sure object files from src are available when needed
#
$(OBJDIR)/alloc.o: ../src/alloc.c $(CONFIG_H)
	$(CC) $(CFLAGS) -c ../src/alloc.c -o $@
$(OBJDIR)/drawing.o: ../src/drawing.c $(CONFIG_H)
	$(CC) $(CFLAGS) -c ../src/drawing.c -o $@
$(OBJDIR)/decl.o: ../src/decl.c $(CONFIG_H)
	$(CC) $(CFLAGS) -c ../src/decl.c -o $@
$(OBJDIR)/monst.o: ../src/monst.c $(CONFIG_H)
	$(CC) $(CFLAGS) -c ../src/monst.c -o $@
$(OBJDIR)/objects.o: ../src/objects.c $(CONFIG_H)
	$(CC) $(CFLAGS) -c ../src/objects.c -o $@
$(OBJDIR)/dlb.o: ../src/dlb.c $(HACK_H) ../include/dlb.h
	$(CC) $(CFLAGS) -c ../src/dlb.c -o $@

# make sure hack.h dependencies get transitive information
$(HACK_H): $(CONFIG_H)
	@( cd ../src ; $(MAKE) $(HACK_H) )
$(CONFIG_H): ../include/config.h
	@( cd ../src ; $(MAKE) $(CONFIG_H) )

tags: $(UTILSRCS)
	@ctags -tw $(UTILSRCS)

clean:
	-rm -f *.o

spotless: clean
	-rm -f lev_lex.c lev_yacc.c dgn_lex.c dgn_yacc.c
	-rm -f ../include/lev_comp.h ../include/dgn_comp.h
	-rm -f ../include/tile.h
	-rm -f makedefs lev_comp dgn_comp recover dlb
	-rm -f gif2txt txt2ppm tile2x11 tile2img.ttp xpm2img.ttp tilemap

tileedit: tileedit.cpp $(TEXT_IO)
	$(QTDIR)/bin/moc -o tileedit.moc tileedit.h
	$(CC) -o tileedit -I../include -I$(QTDIR)/include -L$(QTDIR)/lib tileedit.cpp $(TEXT_IO) -lqt-mt