1 2# Note on my Mobile Pentium II, -march=pentium2 delivers twice the performance of i386 3#OptDbg=-O3 4#OptDbg=-O3 -march=pentium2 5OptDbg=-ggdb 6ifndef CWFLAGS 7CWFLAGS=-Wall -Werror -Wstrict-prototypes -Wextra -Wno-unused-parameter -Wno-missing-field-initializers 8endif 9CFLAGS=$(OptDbg) -I. $(CWFLAGS) 10 11PREFIX = /usr 12# STRIP = -s 13INSTALL = /usr/bin/install 14DESTDIR = 15BINDIR = $(PREFIX)/bin 16MANDIR = $(PREFIX)/share/man 17MAN1DIR = $(MANDIR)/man1 18MAN5DIR = $(MANDIR)/man5 19LDLIBS = -lncurses 20 21# Where to place intermediate objects 22O=O 23# Where to place final objects 24BIN=. 25DOC=. 26 27LIBOBJ= load.o parse.o split.o extract.o diff.o bestmatch.o merge2.o utils.o ccan/hash/hash.o 28OBJ=wiggle.o ReadMe.o vpatch.o 29 30BOBJ=$(patsubst %.o,$(O)/%.o,$(OBJ)) 31BLIBOBJ=$(patsubst %.o,$(O)/%.o,$(LIBOBJ)) 32 33all: $(BIN)/wiggle $(DOC)/wiggle.man test 34lib : $(O)/libwiggle.a 35 36# 37# Pretty print 38# 39V = @ 40Q = $(V:1=) 41QUIET_CC = $(Q:@=@echo ' CC '$@;) 42QUIET_AR = $(Q:@=@echo ' AR '$@;) 43QUIET_LINK = $(Q:@=@echo ' LINK '$@;) 44QUIET_MAN = $(Q:@=@echo ' MAN '$@;) 45QUIET_CLEAN = $(Q:@=@echo ' CLEAN '$@;) 46 47 48$(BIN)/wiggle : $(BOBJ) $(O)/libwiggle.a 49 $(QUIET_LINK)$(CC) $(CFLAGS) $^ $(LDLIBS) -o $@ 50 51$(O)/libwiggle.a : $(BLIBOBJ) 52 $(QUIET_AR)ar cr $@ $^ 53 54$(BOBJ) :: wiggle.h 55 56$(O)/split.o :: ccan/hash/hash.h config.h 57 58$(BOBJ) $(BLIBOBJ) :: $(O)/%.o : %.c 59 @mkdir -p $(dir $@) 60 $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $< 61 62VERSION = $(shell [ -d .git ] && git 2> /dev/null describe HEAD) 63VERS_DATE = $(shell [ -d .git ] && git 2> /dev/null log -n1 --format=format:%cd --date=short) 64DVERS = $(if $(VERSION),-DVERSION=\"$(VERSION)\",) 65DDATE = $(if $(VERS_DATE),-DVERS_DATE=\"$(VERS_DATE)\",) 66CFLAGS += $(DVERS) $(DDATE) 67 68test: wiggle dotest 69 bash ./dotest 70 71valgrind: wiggle dotest 72 bash ./dotest valgrind 73 74vtest: wiggle dovtest 75 ./dovtest 76 77$(DOC)/wiggle.man : wiggle.1 78 $(QUIET_MAN)nroff -man wiggle.1 > $@ 79 80clean: targets artifacts dirs 81targets: 82 $(QUIET_CLEAN)rm -f $(O)/*.[ao] $(O)/ccan/hash/*.o $(DOC)/*.man $(BIN)/wiggle .version* demo.patch version 83artifacts: 84 $(QUIET_CLEAN)find . -name core -o -name '*.tmp*' -o -name .tmp -o -name .time | xargs rm -f 85dirs : targets artifacts 86 $(QUIET_CLEAN)[ -d $(O)/ccan/hash ] && rmdir -p $(O)/ccan/hash || true 87 $(QUIET_CLEAN)[ -d $(O) ] && rmdir -p $(O) || true 88 89install : $(BIN)/wiggle wiggle.1 90 $(INSTALL) -d $(DESTDIR)$(BINDIR) $(DESTDIR)$(MAN1DIR) 91 $(INSTALL) $(STRIP) -m 755 $(BIN)/wiggle $(DESTDIR)$(BINDIR) 92 $(INSTALL) -m 644 wiggle.1 $(DESTDIR)$(MAN1DIR) 93 94version : ReadMe.c wiggle.1 95 @rm -f version 96 @sed -n -e 's/.*VERSION "\([0-9.]*\)".*/\1/p' ReadMe.c > .version-readme 97 @sed -n -e 's/.*WIGGLE 1 "" v\([0-9.]*\)$$/\1/p' wiggle.1 > .version-man 98 @cmp -s .version-readme .version-man && cat .version-man > version || { echo Inconsistant versions.; exit 1;} 99 100dist : test clean version 101 mkdir -p DIST 102 rm -f DIST/wiggle-`cat version` 103 git archive --prefix wiggle-`cat version`/ v`cat version` | gzip -9 > DIST/wiggle-`cat version`.tar.gz 104 105v : version 106 cat version 107 108demo.patch: force 109 diff -rup demo.orig demo.patched | sed 's/demo.patched/demo/' > demo.patch 110 111force: 112