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