1############################################################
2all:
3############################################################
4# HAS_NOWEB := 1
5
6ifdef HAS_NOWEB
7    LINE_NUMBERS := -L
8endif
9
10OPSYS := $(shell uname -s)
11BUILD := Build/$(OPSYS)
12CODE  := code
13
14ifdef HAS_NOWEB
15
16NWS := \
17	nws/intro.nw \
18	nws/cube.nw \
19	nws/font.nw \
20	nws/sound.nw \
21	nws/control.nw \
22	nws/view.nw \
23	nws/menu.nw \
24	nws/menuview.nw \
25	nws/help.nw \
26	nws/flipflop.nw \
27	nws/fcontrol.nw \
28	nws/fview.nw \
29	nws/bomb.nw \
30	nws/bcontrol.nw \
31	nws/bview.nw \
32	nws/maze.nw \
33	nws/mcontrol.nw \
34	nws/mview.nw \
35	nws/peg.nw \
36	nws/pview.nw \
37	nws/pcontrol.nw \
38	nws/tile.nw \
39	nws/tcontrol.nw \
40	nws/tview.nw \
41	nws/life.nw \
42	nws/lcontrol.nw \
43	nws/lview.nw \
44	nws/main.nw \
45	nws/darwin.nw \
46	nws/end.nw
47
48endif
49
50DOC := doc/54321-dev.pdf
51
52SCREENSHOTS := \
53    $(wildcard data/webpage/*.jpg) \
54    $(wildcard data/webpage/*.png)
55
56WEBPAGES := \
57	doc/index.html \
58	doc/index.php \
59	$(patsubst data/webpage/%, doc/screenshot/%, $(SCREENSHOTS) )
60
61TARGET := Release/bin/$(OPSYS)/54321
62SRCS := \
63	$(CODE)/cube.cpp \
64	$(CODE)/font.cpp \
65	$(CODE)/soundDev.cpp \
66	$(CODE)/controller.cpp \
67	$(CODE)/view.cpp \
68	$(CODE)/mainmenuController.cpp \
69	$(CODE)/mainmenuView.cpp \
70	$(CODE)/help.cpp \
71	$(CODE)/flipflop.cpp \
72	$(CODE)/flipflopController.cpp \
73	$(CODE)/flipflopView.cpp \
74	$(CODE)/bomb.cpp \
75	$(CODE)/bombController.cpp \
76	$(CODE)/bombView.cpp \
77	$(CODE)/maze.cpp \
78	$(CODE)/mazeController.cpp \
79	$(CODE)/mazeView.cpp \
80	$(CODE)/peg.cpp \
81	$(CODE)/pegController.cpp \
82	$(CODE)/pegView.cpp \
83	$(CODE)/tile.cpp \
84	$(CODE)/tileController.cpp \
85	$(CODE)/tileView.cpp \
86	$(CODE)/life.cpp \
87	$(CODE)/lifeController.cpp \
88	$(CODE)/lifeView.cpp \
89	$(CODE)/main.cpp
90
91OBJS := \
92	$(patsubst $(CODE)/%.cpp,$(BUILD)/%.o,$(filter $(CODE)/%.cpp, $(SRCS)))
93
94HDRS := \
95	$(CODE)/cube.h \
96	$(CODE)/font.h \
97	$(CODE)/soundDev.h \
98	$(CODE)/controller.h \
99	$(CODE)/view.h \
100	$(CODE)/help.h \
101	$(CODE)/mainmenuController.h \
102	$(CODE)/mainmenuView.h \
103	$(CODE)/flipflop.h \
104	$(CODE)/flipflopController.h \
105	$(CODE)/flipflopView.h \
106	$(CODE)/bomb.h \
107	$(CODE)/bombController.h \
108	$(CODE)/bombView.h \
109	$(CODE)/maze.h \
110	$(CODE)/mazeController.h \
111	$(CODE)/mazeView.h \
112	$(CODE)/peg.h \
113	$(CODE)/pegController.h \
114	$(CODE)/pegView.h \
115	$(CODE)/tile.h \
116	$(CODE)/tileController.h \
117	$(CODE)/tileView.h \
118	$(CODE)/life.h \
119	$(CODE)/lifeController.h \
120	$(CODE)/lifeView.h
121
122 HELP_FILES := $(wildcard data/*.hlp)
123  PEG_FILES := $(wildcard data/*.peg)
124IMAGE_FILES := $(wildcard images/*.png)
125
126DATA := \
127	$(patsubst data/%.hlp, Release/data/%.hlp, $(HELP_FILES) ) \
128	$(patsubst data/%.peg, Release/data/%.peg, $(PEG_FILES) ) \
129	$(patsubst images/%.png, Release/data/%.png, $(IMAGE_FILES) ) \
130	Release/README
131
132CXXFLAGS += -DNDEBUG=1
133CPPFLAGS := -I$(CODE)
134
135############################################################
136include archs/$(OPSYS)/variables.GNU
137############################################################
138
139all: prog $(DOC) $(WEBPAGES)
140
141prog:	$(TARGET) $(DATA)
142
143size:	prog
144	@echo 'Size (in Kilobytes) is: ' $(shell du -ks Release)
145
146clean:	tidy
147	rm -rf Release
148ifdef HAS_NOWEB
149	rm -rf $(CODE) doc
150else
151	rm -rf $(WEBPAGES) doc/screenshot
152endif
153
154tidy:
155	rm -rf Build \
156		$(DOC:%.pdf=%.tex) \
157		$(DOC:%.pdf=%.aux) \
158		$(DOC:%.pdf=%.log) \
159		$(DOC:%.pdf=%.toc)
160
161############################################################
162
163$(TARGET):	$(OBJS)
164	-@$(MKDIR_CMD)
165	$(CXX) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
166	$(STRIP) $@
167
168ifdef HAS_NOWEB
169
170$(CODE)/%.h:	$(NWS)
171	-@$(MKDIR_CMD)
172	notangle $(LINE_NUMBERS) -R$(@F) $^ | cpif $@
173
174$(CODE)/%.cpp:	$(NWS)
175	-@$(MKDIR_CMD)
176	notangle $(LINE_NUMBERS) -R$(@F) $^ | cpif $@
177
178$(DOC):	$(DOC:%.pdf=%.tex)
179	-@$(MKDIR_CMD)
180	( \
181	    cd $(@D); \
182	    pdflatex $(<F) ; \
183	    pdflatex $(<F) ; \
184	    pdflatex $(<F) ; \
185	)
186
187$(DOC:%.pdf=%.tex):	$(NWS)
188	-@$(MKDIR_CMD)
189	noweave $^ | cpif $@
190
191endif
192
193############################################################
194
195$(BUILD)/%.o:	$(CODE)/%.cpp
196	-@$(MKDIR_CMD)
197	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
198
199Release/data/%:	images/%
200	-@$(MKDIR_CMD)
201	cp -p $< $@
202
203Release/data/%:	data/%
204	-@$(MKDIR_CMD)
205	cp -p $< $@
206
207Release/README: README
208	-@$(MKDIR_CMD)
209	cp -p $< $@
210
211doc/screenshot/%:	data/webpage/%
212	-@$(MKDIR_CMD)
213	cp -p $< $@
214
215doc/index.%:	data/webpage/hdr.% data/webpage/body.html data/webpage/tail.%
216	-@$(MKDIR_CMD)
217	cat $^ > $@
218
219############################################################
220
221.PHONY: all
222.PHONY: prog
223.PHONY: size
224.PHONY: clean
225.PHONY: tidy
226
227.SECONDARY: $(SRCS)
228.SECONDARY: $(HDRS)
229.SECONDARY: $(DOC:%.pdf=%.tex)
230.SECONDARY: $(DOC:%.pdf=%.aux)
231.SECONDARY: $(DOC:%.pdf=%.log)
232.SECONDARY: $(DOC:%.pdf=%.toc)
233
234############################################################
235
236$(BUILD)/cube.o:	$(CODE)/cube.h
237
238$(BUILD)/font.o:	$(CODE)/font.h
239
240$(BUILD)/soundDev.o:	$(CODE)/soundDev.h
241
242$(BUILD)/controller.o:	$(CODE)/controller.h
243$(BUILD)/controller.o:	$(CODE)/cube.h
244
245$(BUILD)/view.o:	$(CODE)/view.h
246$(BUILD)/view.o:	$(CODE)/help.h
247$(BUILD)/view.o:	$(CODE)/cube.h
248$(BUILD)/view.o:	$(CODE)/soundDev.h
249
250$(BUILD)/mainmenuController.o:	$(CODE)/mainmenuController.h
251$(BUILD)/mainmenuController.o:	$(CODE)/cube.h
252$(BUILD)/mainmenuController.o:	$(CODE)/soundDev.h
253$(BUILD)/mainmenuController.o:	$(CODE)/view.h
254$(BUILD)/mainmenuController.o:	$(CODE)/controller.h
255$(BUILD)/mainmenuController.o:	$(CODE)/mainmenuView.h
256
257$(BUILD)/mainmenuView.o:	$(CODE)/mainmenuView.h
258$(BUILD)/mainmenuView.o:	$(CODE)/soundDev.h
259$(BUILD)/mainmenuView.o:	$(CODE)/view.h
260$(BUILD)/mainmenuView.o:	$(CODE)/cube.h
261
262$(BUILD)/help.o:	$(CODE)/help.h
263$(BUILD)/help.o:	$(CODE)/font.h
264$(BUILD)/help.o:	$(CODE)/soundDev.h
265$(BUILD)/help.o:	$(CODE)/view.h
266$(BUILD)/help.o:	$(CODE)/cube.h
267
268$(BUILD)/flipflop.o:	$(CODE)/flipflop.h
269$(BUILD)/flipflop.o:	$(CODE)/cube.h
270$(BUILD)/flipflop.o:	$(CODE)/soundDev.h
271$(BUILD)/flipflop.o:	$(CODE)/view.h
272$(BUILD)/flipflop.o:	$(CODE)/flipflopView.h
273
274$(BUILD)/flipflopController.o:	$(CODE)/flipflopController.h
275$(BUILD)/flipflopController.o:	$(CODE)/cube.h
276$(BUILD)/flipflopController.o:	$(CODE)/controller.h
277$(BUILD)/flipflopController.o:	$(CODE)/soundDev.h
278$(BUILD)/flipflopController.o:	$(CODE)/view.h
279$(BUILD)/flipflopController.o:	$(CODE)/flipflopView.h
280$(BUILD)/flipflopController.o:	$(CODE)/flipflop.h
281
282$(BUILD)/flipflopView.o:	$(CODE)/flipflopView.h
283$(BUILD)/flipflopView.o:	$(CODE)/cube.h
284$(BUILD)/flipflopView.o:	$(CODE)/soundDev.h
285$(BUILD)/flipflopView.o:	$(CODE)/view.h
286
287$(BUILD)/bomb.o:	$(CODE)/bomb.h
288$(BUILD)/bomb.o:	$(CODE)/cube.h
289$(BUILD)/bomb.o:	$(CODE)/soundDev.h
290$(BUILD)/bomb.o:	$(CODE)/view.h
291$(BUILD)/bomb.o:	$(CODE)/bombView.h
292
293$(BUILD)/bombView.o:	$(CODE)/bombView.h
294$(BUILD)/bombView.o:	$(CODE)/cube.h
295$(BUILD)/bombView.o:	$(CODE)/font.h
296$(BUILD)/bombView.o:	$(CODE)/soundDev.h
297$(BUILD)/bombView.o:	$(CODE)/view.h
298$(BUILD)/bombView.o:	$(CODE)/bomb.h
299
300$(BUILD)/bombController.o:	$(CODE)/bombController.h
301$(BUILD)/bombController.o:	$(CODE)/cube.h
302$(BUILD)/bombController.o:	$(CODE)/controller.h
303$(BUILD)/bombController.o:	$(CODE)/soundDev.h
304$(BUILD)/bombController.o:	$(CODE)/view.h
305$(BUILD)/bombController.o:	$(CODE)/bombView.h
306$(BUILD)/bombController.o:	$(CODE)/bomb.h
307
308$(BUILD)/maze.o:	$(CODE)/maze.h
309$(BUILD)/maze.o:	$(CODE)/cube.h
310$(BUILD)/maze.o:	$(CODE)/soundDev.h
311$(BUILD)/maze.o:	$(CODE)/view.h
312$(BUILD)/maze.o:	$(CODE)/mazeView.h
313
314$(BUILD)/mazeView.o:	$(CODE)/mazeView.h
315$(BUILD)/mazeView.o:	$(CODE)/cube.h
316$(BUILD)/mazeView.o:	$(CODE)/soundDev.h
317$(BUILD)/mazeView.o:	$(CODE)/view.h
318$(BUILD)/mazeView.o:	$(CODE)/maze.h
319
320$(BUILD)/mazeController.o:	$(CODE)/mazeController.h
321$(BUILD)/mazeController.o:	$(CODE)/cube.h
322$(BUILD)/mazeController.o:	$(CODE)/controller.h
323$(BUILD)/mazeController.o:	$(CODE)/soundDev.h
324$(BUILD)/mazeController.o:	$(CODE)/view.h
325$(BUILD)/mazeController.o:	$(CODE)/mazeView.h
326$(BUILD)/mazeController.o:	$(CODE)/maze.h
327
328$(BUILD)/peg.o:	$(CODE)/peg.h
329$(BUILD)/peg.o:	$(CODE)/cube.h
330$(BUILD)/peg.o:	$(CODE)/soundDev.h
331$(BUILD)/peg.o:	$(CODE)/view.h
332$(BUILD)/peg.o:	$(CODE)/font.h
333$(BUILD)/peg.o:	$(CODE)/pegView.h
334
335$(BUILD)/pegView.o:	$(CODE)/pegView.h
336$(BUILD)/pegView.o:	$(CODE)/cube.h
337$(BUILD)/pegView.o:	$(CODE)/font.h
338$(BUILD)/pegView.o:	$(CODE)/soundDev.h
339$(BUILD)/pegView.o:	$(CODE)/view.h
340$(BUILD)/pegView.o:	$(CODE)/peg.h
341
342$(BUILD)/pegController.o:	$(CODE)/pegController.h
343$(BUILD)/pegController.o:	$(CODE)/cube.h
344$(BUILD)/pegController.o:	$(CODE)/controller.h
345$(BUILD)/pegController.o:	$(CODE)/soundDev.h
346$(BUILD)/pegController.o:	$(CODE)/view.h
347$(BUILD)/pegController.o:	$(CODE)/font.h
348$(BUILD)/pegController.o:	$(CODE)/pegView.h
349$(BUILD)/pegController.o:	$(CODE)/peg.h
350
351$(BUILD)/tile.o:	$(CODE)/tile.h
352$(BUILD)/tile.o:	$(CODE)/cube.h
353$(BUILD)/tile.o:	$(CODE)/soundDev.h
354$(BUILD)/tile.o:	$(CODE)/view.h
355$(BUILD)/tile.o:	$(CODE)/font.h
356$(BUILD)/tile.o:	$(CODE)/tileView.h
357
358$(BUILD)/tileView.o:	$(CODE)/tileView.h
359$(BUILD)/tileView.o:	$(CODE)/cube.h
360$(BUILD)/tileView.o:	$(CODE)/font.h
361$(BUILD)/tileView.o:	$(CODE)/soundDev.h
362$(BUILD)/tileView.o:	$(CODE)/view.h
363
364$(BUILD)/tileController.o:	$(CODE)/tileController.h
365$(BUILD)/tileController.o:	$(CODE)/cube.h
366$(BUILD)/tileController.o:	$(CODE)/controller.h
367$(BUILD)/tileController.o:	$(CODE)/soundDev.h
368$(BUILD)/tileController.o:	$(CODE)/view.h
369$(BUILD)/tileController.o:	$(CODE)/font.h
370$(BUILD)/tileController.o:	$(CODE)/tileView.h
371$(BUILD)/tileController.o:	$(CODE)/tile.h
372
373$(BUILD)/life.o:	$(CODE)/life.h
374$(BUILD)/life.o:	$(CODE)/cube.h
375$(BUILD)/life.o:	$(CODE)/soundDev.h
376$(BUILD)/life.o:	$(CODE)/view.h
377$(BUILD)/life.o:	$(CODE)/font.h
378$(BUILD)/life.o:	$(CODE)/lifeView.h
379
380$(BUILD)/lifeView.o:	$(CODE)/lifeView.h
381$(BUILD)/lifeView.o:	$(CODE)/cube.h
382$(BUILD)/lifeView.o:	$(CODE)/font.h
383$(BUILD)/lifeView.o:	$(CODE)/soundDev.h
384$(BUILD)/lifeView.o:	$(CODE)/view.h
385
386$(BUILD)/lifeController.o:	$(CODE)/lifeController.h
387$(BUILD)/lifeController.o:	$(CODE)/cube.h
388$(BUILD)/lifeController.o:	$(CODE)/controller.h
389$(BUILD)/lifeController.o:	$(CODE)/soundDev.h
390$(BUILD)/lifeController.o:	$(CODE)/view.h
391$(BUILD)/lifeController.o:	$(CODE)/font.h
392$(BUILD)/lifeController.o:	$(CODE)/lifeView.h
393$(BUILD)/lifeController.o:	$(CODE)/life.h
394
395$(BUILD)/main.o:	$(CODE)/cube.h
396$(BUILD)/main.o:	$(CODE)/font.h
397$(BUILD)/main.o:	$(CODE)/soundDev.h
398$(BUILD)/main.o:	$(CODE)/controller.h
399$(BUILD)/main.o:	$(CODE)/view.h
400$(BUILD)/main.o:	$(CODE)/mainmenuView.h
401$(BUILD)/main.o:	$(CODE)/mainmenuController.h
402$(BUILD)/main.o:	$(CODE)/flipflopView.h
403$(BUILD)/main.o:	$(CODE)/flipflop.h
404$(BUILD)/main.o:	$(CODE)/flipflopController.h
405$(BUILD)/main.o:	$(CODE)/bombView.h
406$(BUILD)/main.o:	$(CODE)/bomb.h
407$(BUILD)/main.o:	$(CODE)/bombController.h
408$(BUILD)/main.o:	$(CODE)/mazeView.h
409$(BUILD)/main.o:	$(CODE)/maze.h
410$(BUILD)/main.o:	$(CODE)/mazeController.h
411$(BUILD)/main.o:	$(CODE)/pegView.h
412$(BUILD)/main.o:	$(CODE)/peg.h
413$(BUILD)/main.o:	$(CODE)/pegController.h
414$(BUILD)/main.o:	$(CODE)/tileView.h
415$(BUILD)/main.o:	$(CODE)/tile.h
416$(BUILD)/main.o:	$(CODE)/tileController.h
417$(BUILD)/main.o:	$(CODE)/lifeView.h
418$(BUILD)/main.o:	$(CODE)/life.h
419$(BUILD)/main.o:	$(CODE)/lifeController.h
420