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