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