# # Written by Tony Finch # at the University of Cambridge Computing Service. # You may do anything with this, at your own risk. # # $Cambridge: users/fanf2/selog/Makefile,v 1.41 2008/04/10 13:19:54 fanf2 Exp $ # .POSIX: # The ELF shared object targets require that CFLAGS is set so that # the default .c.o double-suffix rule builds position-independent # code (though this slightly pessimizes the static librares). # The default settings below assume the compiler is gcc and # therefore pass the -fpic option. CFLAGS=-O -pipe -std=gnu99 -fpic ${EXTRAFLAGS} LDFLAGS=-shared -fpic SOFLAG=-Wl,-soname, DEVCFLAGS=${CFLAGS} -I../lua/src -g -pedantic -Werror -Wall -Wextra \ -Wbad-function-cast -Wcast-align -Wcast-qual -Winline \ -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \ -Wold-style-definition -Wpointer-arith -Wredundant-decls \ -Wshadow -Wstrict-prototypes -Wno-unreachable-code -Wwrite-strings PREFIX=/usr/local BINDIR=${PREFIX}/bin LIBDIR=${PREFIX}/lib MANDIR=${PREFIX}/man LUADIR=${PREFIX}/lib/lua/5.1 DOCSRC= selog-cmd.man selog-lua.man selog-prog.man selog-user.man DOCS= ${DOCSRC:.man=.txt} ${DOCSRC:.man=.html} \ ${DOCSRC:.man=.ps} ${DOCSRC:.man=.pdf} \ selog.${MAN_CMD} selog.${MAN_LIB} selog.${MAN_MISC} MAN_CMD=1 MAN_LIB=3 MAN_MISC=7 MAN_SED=sed "s/@cmd@/${MAN_CMD}/;s/@lib@/${MAN_LIB}/;s/@misc@/${MAN_MISC}/" .SUFFIXES: .o .c .man .txt .html .ps .pdf # utility targets intro: all clean: rm -f selog *.a *.o *.so *.so.1 rm -f Test/[a-z]* test-harness test-fuzzer realclean: clean rm -rf ${DOCS} Web/selog-snap* all: static elf selog dev: docs ${MAKE} CFLAGS="${DEVCFLAGS}" all lua-dev testers # install install: ./install.sh 0755 ${BINDIR} selog ./install.sh 0755 ${LIBDIR} lib*.so.1 ./install.sh 0755 ${LIBDIR} lib*.so ./install.sh 0644 ${LIBDIR} lib*.a ./install.sh 0644 ${MANDIR}/man${MAN_CMD} selog.${MAN_CMD} ./install.sh 0644 ${MANDIR}/man${MAN_LIB} selog.${MAN_LIB} ./install.sh 0644 ${MANDIR}/man${MAN_MISC} selog.${MAN_MISC} # releases release: Web/selog-8.4.10.tar.gz \ Web/selog-8.4.9.tar.gz \ Web/selog-snap.tar.gz upload: realclean release scp -rp Web/* fanf@chiark.greenend.org.uk:public-html/prog/selog Web/selog-8.4.10.tar.gz: ./release.sh "2008-04-10 23:00:00" 8.4.10 Web/selog-8.4.9.tar.gz: ./release.sh "2008-04-09 23:00:00" 8.4.9 Web/selog-snap.tar.gz: ./release.sh now snap # testing test: testers @sh test-script testers: test-harness test-fuzzer test-harness: test-harness.c libselog.a libselog_err.a ${CC} ${DEVCFLAGS} -o test-harness test-harness.c libselog.a libselog_err.a test-fuzzer: test-fuzzer.c ${CC} ${DEVCFLAGS} -o test-fuzzer test-fuzzer.c fuzz: test-fuzzer for i in `jot 50`; do \ echo '../test-harness "@stderr;'"`./test-fuzzer`"'"'; \ done >fuzz # preformatted documentation docs: ${DOCS} selog.${MAN_CMD}: selog-cmd.man ${MAN_SED} $@ selog.${MAN_LIB}: selog-prog.man ${MAN_SED} $@ selog.${MAN_MISC}: selog-user.man ${MAN_SED} $@ selog-prog.txt selog-prog.html selog-prog.ps selog-prog.pdf: selog-prog.man selog-user.txt selog-user.html selog-user.ps selog-user.pdf: selog-user.man selog-lua.txt selog-lua.html selog-lua.ps selog-lua.pdf: selog-lua.man .man.txt: ${MAN_SED} $< | groff -t -man -Tascii | col -bx >$@ .man.html: ${MAN_SED} $< | rman -Sb -f html -r '' | \ sed 's/squo;/dquo;/g;s/rdquo;s/rsquo;s/g' >$@ .man.ps: ${MAN_SED} $< | groff -t -man -Tps -P-pa4 -dpaper=a4 >$@ .ps.pdf: ps2pdf $< $@ # command-line tool selog: selog.c selog.h static elf ${CC} ${CFLAGS} -o selog selog.c -L. -lselog # traditional static libraries static: libselog.a libselog_err.a libselog_syslog.a libselog.a: selog_api.o selog_unix.o $(AR) $(ARFLAGS) libselog.a selog_api.o selog_unix.o libselog_err.a: selog_err.o $(AR) $(ARFLAGS) libselog_err.a selog_err.o libselog_syslog.a: selog_syslog.o $(AR) $(ARFLAGS) libselog_syslog.a selog_syslog.o # ELF shared objects elf: libselog.so libselog_err.so libselog_syslog.so libselog.so: libselog.so.1 ln -s libselog.so.1 libselog.so libselog_err.so: libselog_err.so.1 ln -s libselog_err.so.1 libselog_err.so libselog_syslog.so: libselog_syslog.so.1 ln -s libselog_syslog.so.1 libselog_syslog.so libselog.so.1: selog_api.o selog_unix.o ${CC} ${LDFLAGS} ${SOFLAG}$@ -o $@ selog_api.o selog_unix.o ${LIBS} libselog_err.so.1: selog_err.o libselog.so ${CC} ${LDFLAGS} ${SOFLAG}$@ -o $@ selog_err.o -L. -lselog libselog_syslog.so.1: selog_syslog.o libselog.so ${CC} ${LDFLAGS} ${SOFLAG}$@ -o $@ selog_syslog.o -L. -lselog # lua is optional so is separate from the rest lua: luaselog.so lua-dev: lua ln -s luaselog.so selog.so lua-install: lua-elf cp luaselog.so ${LUADIR}/selog.so luaselog.so: selog_lua.o libselog.so ${CC} ${LDFLAGS} -o $@ selog_lua.o -L. -lselog # dependencies selog_api.o: selog_api.c selog.h selog_err.o: selog_err.c selog.h selog_lua.o: selog_lua.c selog.h selog_syslog.o: selog_syslog.c selog.h selog_unix.o: selog_unix.c selog.h # EOF