1prefix=${PREFIX} 2BINDIR=${prefix}/bin 3MANDIR=${prefix}/man 4man1dir=$(MANDIR)/man1 5 6TARGETS=gatling dl cgi 7TARGETS2= 8ifdef BENCHMARKS 9TARGETS+=httpbench bindbench ioerr bench pthreadbench 10TARGETS2+=mktestdata mmapbench manymapbench forkbench forksbench 11endif 12ifdef TLSGATLING 13TARGETS+=tlsgatling 14endif 15ALLTARGETS=$(TARGETS) acc hcat referrer hitprofile matchiprange getlinks \ 16rellink $(TARGETS2) 17 18all: $(ALLTARGETS) 19 20#CFLAGS+=-DSTATE_DEBUG -DMOREDEBUG -DDEBUG_EVENTS -DSMDEBUG 21 22path = $(subst :, ,$(PATH)) 23diet_path = $(foreach dir,$(path),$(wildcard $(dir)/diet)) 24ifeq ($(strip $(diet_path)),) 25ifneq ($(wildcard /opt/diet/bin/diet),) 26DIET=/opt/diet/bin/diet 27else 28DIET= 29endif 30else 31DIET:=$(strip $(diet_path)) 32endif 33 34# to build without diet libc support, use $ make DIET= 35# see http://www.fefe.de/dietlibc/ for details about the diet libc 36 37DIET= 38 39ifneq ($(DEBUG),) 40CFLAGS+=-g -Og 41LDFLAGS+=-g 42endif 43 44LDLIBS=-lowfat 45 46ifeq ($(ZLIB),1) 47CFLAGS+=-DUSE_ZLIB 48LDLIBS+=-lz 49endif 50 51libowfat_path = $(strip $(foreach dir,../libowfat*,$(wildcard $(dir)/textcode.h))) 52ifneq ($(libowfat_path),) 53CFLAGS+=$(foreach fnord,$(libowfat_path),-I$(dir $(fnord))) 54LDFLAGS+=$(foreach fnord,$(libowfat_path),-L$(dir $(fnord))) 55endif 56 57ifneq ($(REDIRECT),) 58CFLAGS+="-DREDIRECT=\"$(REDIRECT)\"" 59endif 60 61acc: acc.c 62 $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS) -lowfat 63 64CC:=$(DIET) $(CC) 65 66pthreadbench: pthreadbench.o 67 $(CC) $< -o $@ -I. $(CFLAGS) $(LDFLAGS) $(LDLIBS) -lpthread 68 69forksbench: forkbench.o 70 $(CC) -static -o $@ forkbench.o $(LDFLAGS) $(LDLIBS) 71 72gatling.o tlsgatling ptlsgatling: havesetresuid.h 73 74OBJS=mime.o ftp.o http.o smb.o common.o connstat.o httpstream.o dirfd.o 75HTTPS_OBJS=mime.o ftp.c http.c smb.c common.c connstat.o httpstream.o dirfd.o 76PHTTPS_OBJS=mime.o ftp.o http.c smb.c common.c connstat.o httpstream.o dirfd.o 77 78$(OBJS) https.o gatling.o: gatling.h version.h gatling_features.h dirfd.h 79 80tlsgatling: gatling.c ssl.o $(HTTPS_OBJS) libsocket libiconv libcrypt libsslpthread 81 $(CC) -o $@ gatling.c ssl.o $(HTTPS_OBJS) $(CFLAGS) -DSUPPORT_HTTPS $(LDFLAGS) -lssl -lcrypto $(LDLIBS) `cat libsslpthread` 82 83tlsgatling_nofail: gatling.c ssl.o $(HTTPS_OBJS) libsocket libiconv libcrypt libsslpthread 84 -$(CC) -o tlsgatling gatling.c ssl.o $(HTTPS_OBJS) $(CFLAGS) -DSUPPORT_HTTPS $(LDFLAGS) -lssl -lcrypto $(LDLIBS) `cat libsslpthread` 85 86ptlsgatling: gatling.c pssl.o $(PHTTPS_OBJS) libsocket libiconv libcrypt 87 $(CC) -o $@ gatling.c pssl.c $(PHTTPS_OBJS) $(CFLAGS) -DSUPPORT_HTTPS -DUSE_POLARSSL $(LDFLAGS) -lmbedtls $(LDLIBS) 88 89ptlsgatling_nofail: gatling.c pssl.o $(PHTTPS_OBJS) libsocket libiconv libcrypt 90 -$(CC) -o ptlsgatling gatling.c pssl.c $(PHTTPS_OBJS) $(CFLAGS) -DSUPPORT_HTTPS -DUSE_POLARSSL $(LDFLAGS) -lmbedtls $(LDLIBS) 91 92gatling: gatling.o $(OBJS) md5lib 93 $(CC) $(LDFLAGS) $@.o $(OBJS) -o $@ $(LDLIBS) `cat md5lib` 94 95httpbench: httpbench.o 96bindbench: bindbench.o 97dl: dl.o 98ioerr: ioerr.o 99bench: bench.o 100getlinks: getlinks.o 101rellink: rellink.o 102matchiprange: matchiprange.o 103 104cgi: cgi.o 105 106version.h: CHANGES 107 (head -n 1 CHANGES | sed 's/\([^:]*\):/#define VERSION "\1"/') > version.h 108 109%.o: %.c 110 $(CC) -c $< -o $@ -I. $(CFLAGS) 111 112https.o: http.c 113 $(CC) -c $< -o $@ -I. $(CFLAGS) -DSUPPORT_HTTPS 114 115phttps.o: http.c 116 $(CC) -c $< -o $@ -I. $(CFLAGS) -DSUPPORT_HTTPS -DUSE_POLARSSL 117 118%: %.o 119 $(CC) $(LDFLAGS) $@.o -o $@ $(LDLIBS) 120 121hitprofile.o: referrer.c 122 $(CC) -c $< -o $@ -I. $(CFLAGS) -DALL 123 124libsocket: trysocket.c 125 if $(CC) $(CFLAGS) -o trysocket trysocket.c >/dev/null 2>&1; then echo ""; else \ 126 if $(CC) $(CFLAGS) -o trysocket trysocket.c -lsocket >/dev/null 2>&1; then echo "-lsocket"; else \ 127 if $(CC) $(CFLAGS) -o trysocket trysocket.c -lsocket -lnsl >/dev/null 2>&1; then echo "-lsocket -lnsl"; else \ 128 if $(CC) $(CFLAGS) -o trysocket trysocket.c -lwsock32 >/dev/null 2>&1; then echo "-lwsock32"; \ 129 fi; fi; fi; fi > libsocket 130 rm -f trysocket 131 132libiconv: tryiconv.c 133ifdef ICONV 134 if $(CC) $(CFLAGS) $(LDFLAGS) -o tryiconv tryiconv.c -liconv >/dev/null 2>&1; then echo "-L$(LDFLAGS) -liconv"; else \ 135 echo ""; \ 136 fi > libiconv 137else 138 echo "" > libiconv 139endif 140 rm -f tryiconv 141 142libcrypt: trycrypt.c 143 if $(CC) $(CFLAGS) -o trycrypt trycrypt.c >/dev/null 2>&1; then echo ""; else \ 144 if $(CC) $(CFLAGS) -o trycrypt trycrypt.c -lcrypt >/dev/null 2>&1; then echo "-lcrypt"; \ 145 fi; fi > libcrypt 146 rm -f trycrypt 147 148md5lib: trymd5.c 149 if $(CC) $(CFLAGS) -o trymd5 trymd5.c >/dev/null 2>&1; then echo ""; else \ 150 if $(CC) $(CFLAGS) -o trymd5 trymd5.c -lmd >/dev/null 2>&1; then echo "-lmd"; else \ 151 if $(CC) $(CFLAGS) -o trymd5 trymd5.c $(LDFLAGS) -lcrypto >/dev/null 2>&1; then echo "-lcrypto"; \ 152 fi; fi; fi > md5lib 153 rm -f trymd5 154 155 156libsslpthread: ssl.c 157 if $(CC) $(CFLAGS) -o tryssl ssl.c -DMAIN -lowfat -lssl -lcrypto >/dev/null 2>&1 ; then echo ""; else \ 158 if $(CC) $(CFLAGS) -o tryssl ssl.c -DMAIN -lowfat -lssl -lcrypto -lpthread >/dev/null 2>&1 ; then echo "-lpthread"; \ 159 fi; fi > $@ 160 rm -f tryssl 161 162havesetresuid.h: trysetresuid.c 163 -rm -f $@ 164 if $(CC) $(CFLAGS) -o tryresuid $^ >/dev/null 2>&1; then echo "#define LIBC_HAS_SETRESUID"; fi > $@ 165 -rm -f tryresuid 166 167dummy.c: 168 touch $@ 169 170libsocketkludge.a: libsocket libiconv dummy.o 171 ar q $@ dummy.o 172 -ranlib $@ 173 174LDLIBS+=`cat libsocket libiconv libcrypt` 175 176$(TARGETS): libsocketkludge.a libsocket libiconv libcrypt md5lib 177 178install: gatling dl getlinks 179 install -d $(DESTDIR)$(BINDIR) $(man1dir) 180 install $^ $(DESTDIR)$(BINDIR) 181 if test -f tlsgatling; then install tlsgatling $(DESTDIR)$(BINDIR); fi 182 install -m 644 gatling.1 bench.1 $(DESTDIR)$(man1dir) 183 184uninstall: 185 rm -f $(DESTDIR)$(BINDIR)/gatling $(DESTDIR)$(BINDIR)/tlsgatling $(DESTDIR)$(man1dir)/gatling.1 $(DESTDIR)$(man1dir)/bench.1 186 187clean: 188 rm -f $(ALLTARGETS) *.o version.h core *.core libsocket libsocketkludge.a dummy.c libiconv libcrypt havesetresuid.h md5lib havealloca.h tlsgatling ptlsgatling libsslpthread 189 190VERSION=gatling-$(shell head -n 1 CHANGES|sed 's/://') 191CURNAME=$(notdir $(shell pwd)) 192 193rename: 194 if test $(CURNAME) != $(VERSION); then cd .. && mv $(CURNAME) $(VERSION); fi 195 196tar: clean rename 197 rm -f dep libdep 198 cd ..; tar cvvf $(VERSION).tar.bz2 --use=bzip2 --exclude CVS --exclude default $(VERSION) 199 200cert: server.pem 201 202rand.dat: 203 -dd if=/dev/random of=rand.dat bs=1024 count=1 204 205cakey.key: rand.dat 206 openssl genrsa -out cakey.key -rand rand.dat 2048 207 208cakey.csr: cakey.key 209 openssl req -new -key cakey.key -out cakey.csr 210 211cakey.pem: cakey.key cakey.csr 212 openssl x509 -req -days 1780 -set_serial 1 -in cakey.csr \ 213 -signkey cakey.key -out $@ 214 215server.pem: cakey.key cakey.pem 216 cat cakey.key cakey.pem > server.pem 217 218windoze: 219 $(MAKE) DIET= CROSS=i686-mingw32- 220 221havealloca.h: tryalloca.c 222 -rm -f $@ 223 echo "#include <stdlib.h>" > $@ 224 if $(DIET) $(CC) $(CFLAGS) -c tryalloca.c -DA >/dev/null 2>&1; then echo "#include <alloca.h>"; fi >> $@ 225 if $(DIET) $(CC) $(CFLAGS) -c tryalloca.c -DB >/dev/null 2>&1; then echo "#include <malloc.h>"; fi >> $@ 226 -rm -f tryalloca.o 227 228bench.o bindbench.o common.o dl.o ftp.o gatling.o getlinks.o http.o \ 229httpbench.o ioerr.o rellink.o smb.o torrent.o: havealloca.h 230