1PREFIX?=/usr
2BINDIR?=${PREFIX}/games
3DATADIR=${PREFIX}/share/wordwarvi
4MANDIR?=${PREFIX}/share/man
5MANPAGEDIR=${MANDIR}/man6
6PKG_CONFIG?=pkg-config
7
8SCREENSAVERFLAG=
9#SCREENSAVERFLAG=-DDO_INHIBIT_SCREENSAVER
10
11# To compile withaudio, WITHAUDIO=yes,
12# for no audio support, change to WITHAUDIO=no,
13WITHAUDIO=yes
14# WITHAUDIO=no
15
16ifeq (${WITHAUDIO},yes)
17SNDLIBS=`$(PKG_CONFIG) --libs portaudio-2.0 vorbisfile`
18SNDFLAGS=-DWITHAUDIOSUPPORT `$(PKG_CONFIG) --cflags portaudio-2.0`
19OGGOBJ=ogg_to_pcm.o
20else
21SNDLIBS=
22SNDFLAGS=-DWWVIAUDIO_STUBS_ONLY
23OGGOBJ=
24endif
25
26# "make OPENLASE=1" to compile support for openlase laser projector
27# NOTE: this will cut a lot of standard stuff out of wordwarvi
28# for performance reasons, and cut the frame rate to 20 fps,
29# as openlase rendering is slow
30#
31# "make OPENLASE=1 OPENLASEGRAYSCALE=1" to compile for openlase
32# but monochromatic, in case you don't have an RGB capable
33# laser projector.
34#
35ifeq (${OPENLASE},1)
36ifeq (${OPENLASEGRAYSCALE},1)
37OPENLASECFLAG=-DOPENLASE -DOPENLASEGRAYSCALE
38else
39OPENLASECFLAG=-DOPENLASE
40endif
41OPENLASELIB=-lopenlase
42OPENLASELIBDIR=-L.
43else
44OPENLASELIB=
45OPENLASECFLAG=
46OPENLASELIBDIR=
47endif
48
49CC ?= gcc
50BUILD_CC ?= gcc
51
52# DEBUG=-g
53# DEBUG=
54# PROFILE_FLAG=-pg
55#PROFILE_FLAG=
56#OPTIMIZE_FLAG=
57# OPTIMIZE_FLAG=-O3
58#OPTIMIZE_FLAG=-O3 -pedantic -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security
59CFLAGS ?= -O3
60CFLAGS += -pedantic
61OPTIMIZE_FLAG = ${CFLAGS} ${CPPFLAGS}
62WARNFLAG=-pedantic -W -Wall
63
64LDFLAGS += ${PROFILE_FLAG}
65
66DEFINES=${SNDFLAGS} -DDATADIR=\"${DATADIR}/\"
67
68all:	wordwarvi wordwarvi.6.gz
69
70HAS_PORTAUDIO_2_0:
71ifeq (${WITHAUDIO},yes)
72	$(PKG_CONFIG) --print-errors --exists portaudio-2.0
73else
74endif
75
76HAS_VORBISFILE:
77ifeq (${WITHAUDIO},yes)
78	$(PKG_CONFIG) --print-errors --exists vorbisfile
79else
80endif
81
82joystick.o:	joystick.c joystick.h Makefile
83	$(CC) ${DEBUG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} -pthread ${WARNFLAG} -c joystick.c
84
85ogg_to_pcm.o:	ogg_to_pcm.c ogg_to_pcm.h Makefile
86	$(CC) ${DEBUG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} `$(PKG_CONFIG) --cflags vorbisfile` \
87		-pthread ${WARNFLAG} -c ogg_to_pcm.c
88
89wwviaudio.o:	wwviaudio.c wwviaudio.h ogg_to_pcm.h my_point.h Makefile
90	$(CC) ${WARNFLAG} ${DEBUG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} \
91		${DEFINES} \
92		-pthread `$(PKG_CONFIG) --cflags vorbisfile` \
93		-c wwviaudio.c
94
95rumble.o:	rumble.c rumble.h Makefile
96	$(CC) ${DEBUG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} `$(PKG_CONFIG) --cflags vorbisfile` \
97		-pthread ${WARNFLAG} -c rumble.c
98
99wwvi_font.o:	wwvi_font.c wwvi_font.h my_point.h Makefile
100	$(CC) ${DEBUG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} -pthread ${WARNFLAG} -c wwvi_font.c
101
102stamp:	stamp.c
103	$(BUILD_CC) -o stamp stamp.c
104
105wordwarvi:	wordwarvi.c joystick.o rumble.o ${OGGOBJ} wwviaudio.o wwvi_font.o \
106		Makefile version.h stamp levels.h rumble.h
107	./stamp > stamp.h
108	$(CC) ${DEBUG} ${OPENLASECFLAG} ${PROFILE_FLAG} ${OPTIMIZE_FLAG} ${SCREENSAVERFLAG} -pthread ${WARNFLAG}  ${DEFINES} \
109		joystick.o \
110		rumble.o \
111		wwvi_font.o \
112		${OGGOBJ} \
113		wwviaudio.o \
114		wordwarvi.c -o wordwarvi ${OPENLASELIBDIR} ${OPENLASELIB} -lm ${SNDLIBS} \
115		`$(PKG_CONFIG) --cflags gtk+-2.0` `$(PKG_CONFIG) --libs gtk+-2.0 gthread-2.0` ${LDFLAGS}
116	/bin/rm stamp.h
117
118wordwarvi.6.gz:	wordwarvi.6
119	gzip -c wordwarvi.6 > wordwarvi.6.gz
120
121install: wordwarvi wordwarvi.6.gz
122	mkdir -p $(DESTDIR)$(BINDIR)
123	mkdir -p $(DESTDIR)$(DATADIR)/sounds
124	mkdir -p $(DESTDIR)$(MANPAGEDIR)
125	install -p -m 755 wordwarvi $(DESTDIR)$(BINDIR)
126	install -p -m 644 sounds/*.ogg $(DESTDIR)$(DATADIR)/sounds
127	install -p -m 644 wordwarvi.6.gz $(DESTDIR)$(MANPAGEDIR)
128
129uninstall:
130	/bin/rm -f $(DESTDIR)$(BINDIR)/wordwarvi
131	/bin/rm -fr $(DESTDIR)${DATADIR}
132	/bin/rm -f $(DESTDIR)${MANPAGEDIR}/wordwarvi.6.gz
133
134CHECK_VERSION:
135	@echo Checking VERSION string ${VERSION}... 1>&2
136	@echo ${VERSION} | grep '[0-9][0-9]*[.][0-9][0-9]*' > /dev/null 2>&1
137	@echo VERSION=${VERSION} which looks ok. 1>&2
138	@echo Checking that ${VERSION} matches what is in version.h 1>&2
139	@grep ${VERSION} version.h > /dev/null 2>&1
140	@echo VERSION ${VERSION} matches cursory check of version.h 1>&2
141
142tarball:	CHECK_VERSION
143	mkdir -p d/wordwarvi-${VERSION}/sounds
144	cp Makefile version.h ogg_to_pcm.c ogg_to_pcm.h levels.h rumble.c rumble.h \
145		joystick.c joystick.h changelog.txt wordwarvi.c wordwarvi.6 \
146		wwviaudio.c wwviaudio.h my_point.h wwvi_font.h wwvi_font.c \
147		stamp.c README AUTHORS COPYING \
148		AAA_HOW_TO_MAKE_NEW_LEVELS.txt \
149		changelog.txt wordwarvi_hacking.html bigrocket.png \
150		d/wordwarvi-${VERSION}
151	cp sounds/*.ogg d/wordwarvi-${VERSION}/sounds
152	cp sounds/Attribution.txt d/wordwarvi-${VERSION}/sounds
153	mkdir -p d/wordwarvi-${VERSION}/icons
154	cp icons/*.png icons/*.xcf d/wordwarvi-${VERSION}/icons
155	chown -R root:root d;
156	( cd d; tar cvf ../wordwarvi-${VERSION}.tar ./wordwarvi-${VERSION} )
157	gzip wordwarvi-${VERSION}.tar
158
159scan-build:
160	make clean
161	scan-build -o /tmp/wordwarvi-scan-build-output make CC=clang
162	xdg-open /tmp/wordwarvi-scan-build-output/*/index.html
163
164clean:
165	rm -f ./wordwarvi ./wordwarvi-*.tar.gz wordwarvi.6.gz stamp.h stamp
166	rm -f ./joystick.o  ./ogg_to_pcm.o  ./rumble.o  ./wwviaudio.o ./wwvi_font.o
167	rm -fr ./d
168	rm -fr /tmp/wordwarvi-scan-build-output
169