Move refs helpers to refs module
[tig.git] / Makefile
blob50c899e69b1de80107cbcfe29fd3431c335791c4
1 ## Makefile for tig
3 # The last tagged version. Can be overridden either by the version from
4 # git or from the value of the DIST_VERSION environment variable.
5 VERSION = 1.2.1
7 all:
9 # Include kernel specific configuration
10 kernel_name := $(shell sh -c 'uname -s 2>/dev/null || echo unknown')
11 -include contrib/config.make-$(kernel_name)
13 # Include setting from the configure script
14 -include config.make
16 prefix ?= $(HOME)
17 bindir ?= $(prefix)/bin
18 datarootdir ?= $(prefix)/share
19 sysconfdir ?= $(prefix)/etc
20 docdir ?= $(datarootdir)/doc
21 mandir ?= $(datarootdir)/man
22 # DESTDIR=
24 ifneq (,$(wildcard .git))
25 GITDESC = $(subst tig-,,$(shell git describe))
26 WTDIRTY = $(if $(shell git diff-index HEAD 2>/dev/null),-dirty)
27 VERSION = $(GITDESC)$(WTDIRTY)
28 endif
29 ifdef DIST_VERSION
30 VERSION = $(DIST_VERSION)
31 endif
33 # Split the version "TAG-OFFSET-gSHA1-DIRTY" into "TAG OFFSET"
34 # and append 0 as a fallback offset for "exact" tagged versions.
35 RPM_VERLIST = $(filter-out g% dirty,$(subst -, ,$(VERSION))) 0
36 RPM_VERSION = $(word 1,$(RPM_VERLIST))
37 RPM_RELEASE = $(word 2,$(RPM_VERLIST))$(if $(WTDIRTY),.dirty)
39 LDLIBS ?= -lcurses
40 CFLAGS ?= -Wall -O2
41 DFLAGS = -g -DDEBUG -Werror -O0
42 EXE = src/tig
43 TOOLS = test/test-graph
44 TXTDOC = doc/tig.1.adoc doc/tigrc.5.adoc doc/manual.adoc NEWS.adoc README.adoc INSTALL.adoc
45 MANDOC = doc/tig.1 doc/tigrc.5 doc/tigmanual.7
46 HTMLDOC = doc/tig.1.html doc/tigrc.5.html doc/manual.html README.html INSTALL.html NEWS.html
47 ALLDOC = $(MANDOC) $(HTMLDOC) doc/manual.html-chunked doc/manual.pdf
49 # Never include the release number in the tarname for tagged
50 # versions.
51 ifneq ($(if $(DIST_VERSION),$(words $(RPM_VERLIST))),2)
52 TARNAME = tig-$(RPM_VERSION)-$(RPM_RELEASE)
53 else
54 TARNAME = tig-$(RPM_VERSION)
55 endif
57 override CPPFLAGS += '-DTIG_VERSION="$(VERSION)"'
58 override CPPFLAGS += '-DSYSCONFDIR="$(sysconfdir)"'
60 ASCIIDOC ?= asciidoc
61 ASCIIDOC_FLAGS = -aversion=$(VERSION) -asysconfdir=$(sysconfdir) -f doc/asciidoc.conf
62 XMLTO ?= xmlto
63 DOCBOOK2PDF ?= docbook2pdf
65 all: $(EXE) $(TOOLS)
66 all-debug: $(EXE) $(TOOLS)
67 all-debug: CFLAGS += $(DFLAGS)
68 doc: $(ALLDOC)
69 doc-man: $(MANDOC)
70 doc-html: $(HTMLDOC)
72 install: all
73 @mkdir -p $(DESTDIR)$(bindir)
74 install -p -m 0755 $(EXE) "$(DESTDIR)$(bindir)"
75 @mkdir -p $(DESTDIR)$(sysconfdir)
76 install -p -m 0444 tigrc "$(DESTDIR)$(sysconfdir)"
78 install-doc-man: doc-man
79 mkdir -p $(DESTDIR)$(mandir)/man1 \
80 $(DESTDIR)$(mandir)/man5 \
81 $(DESTDIR)$(mandir)/man7
82 for doc in $(MANDOC); do \
83 sed 's#++SYSCONFDIR++#$(sysconfdir)#' < "$$doc" > "$$doc+"; \
84 bdoc=$$(basename $$doc); \
85 case "$$doc" in \
86 *.1) install -p -m 0644 "$$doc+" "$(DESTDIR)$(mandir)/man1/$$bdoc" ;; \
87 *.5) install -p -m 0644 "$$doc+" "$(DESTDIR)$(mandir)/man5/$$bdoc" ;; \
88 *.7) install -p -m 0644 "$$doc+" "$(DESTDIR)$(mandir)/man7/$$bdoc" ;; \
89 esac; \
90 $(RM) "$$doc+"; \
91 done
93 install-release-doc-man:
94 GIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release
95 GIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(MANDOC)
96 rm -f .tmp-doc-index
97 $(MAKE) install-doc-man
99 install-doc-html: doc-html
100 mkdir -p $(DESTDIR)$(docdir)/tig
101 for doc in $(HTMLDOC); do \
102 sed 's#++SYSCONFDIR++#$(sysconfdir)#' < "$$doc" > "$$doc+"; \
103 bdoc=$$(basename $$doc); \
104 case "$$doc" in \
105 *.html) install -p -m 0644 "$$doc+" "$(DESTDIR)$(docdir)/tig/$$bdoc" ;; \
106 esac; \
107 $(RM) "$$doc+"; \
108 done
110 install-release-doc-html:
111 GIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release
112 GIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(HTMLDOC)
113 rm -f .tmp-doc-index
114 $(MAKE) install-doc-html
116 install-doc: install-doc-man install-doc-html
117 install-release-doc: install-release-doc-man install-release-doc-html
119 clean:
120 $(RM) -r $(TARNAME) *.spec tig-*.tar.gz tig-*.tar.gz.md5 .deps
121 $(RM) $(EXE) $(TOOLS) $(OBJS) core doc/*.xml src/builtin-config.c
123 distclean: clean
124 $(RM) -r doc/manual.html-chunked autom4te.cache release-docs
125 $(RM) doc/*.toc $(ALLDOC) aclocal.m4 configure
126 $(RM) config.h config.log config.make config.status config.h.in
128 spell-check:
129 for file in $(TXTDOC) src/tig.c; do \
130 aspell --lang=en --dont-backup \
131 --personal=./tools/aspell.dict check $$file; \
132 done
134 strip: $(EXE)
135 strip $(EXE)
137 update-headers:
138 @for file in *.[ch]; do \
139 grep -q '/* Copyright' "$$file" && \
140 sed '0,/.*\*\//d' < "$$file" | \
141 grep -v '/* vim: set' > "$$file.tmp"; \
142 { cat tools/header.h "$$file.tmp"; \
143 echo "/* vim: set ts=8 sw=8 noexpandtab: */"; } > "$$file"; \
144 rm "$$file.tmp"; \
145 echo "Updated $$file"; \
146 done
148 dist: configure tig.spec
149 @mkdir -p $(TARNAME) && \
150 cp Makefile tig.spec configure config.h.in aclocal.m4 $(TARNAME) && \
151 sed -i "s/VERSION\s\+=\s\+[0-9]\+\([.][0-9]\+\)\+/VERSION = $(VERSION)/" $(TARNAME)/Makefile
152 git archive --format=tar --prefix=$(TARNAME)/ HEAD | \
153 tar --delete $(TARNAME)/Makefile > $(TARNAME).tar && \
154 tar rf $(TARNAME).tar `find $(TARNAME)/*` && \
155 gzip -f -9 $(TARNAME).tar && \
156 md5sum $(TARNAME).tar.gz > $(TARNAME).tar.gz.md5
157 @$(RM) -r $(TARNAME)
159 rpm: dist
160 rpmbuild -ta $(TARNAME).tar.gz
162 test: $(TOOLS)
163 test/unit-test-graph.sh
165 # Other autoconf-related rules are hidden in config.make.in so that
166 # they don't confuse Make when we aren't actually using ./configure
167 configure: configure.ac acinclude.m4 tools/*.m4
168 ./autogen.sh
170 .PHONY: all all-debug doc doc-man doc-html install install-doc \
171 install-doc-man install-doc-html clean spell-check dist rpm test
173 ifdef NO_MKSTEMPS
174 COMPAT_CPPFLAGS += -DNO_MKSTEMPS
175 COMPAT_OBJS += compat/mkstemps.o
176 endif
178 ifdef NO_SETENV
179 COMPAT_CPPFLAGS += -DNO_SETENV
180 COMPAT_OBJS += compat/setenv.o
181 endif
183 COMPAT_OBJS += compat/hashtab.o
185 override CPPFLAGS += $(COMPAT_CPPFLAGS)
187 TIG_OBJS = \
188 src/tig.o \
189 src/types.o \
190 src/util.o \
191 src/io.o \
192 src/graph.o \
193 src/refs.o \
194 src/builtin-config.o \
195 src/request.o \
196 src/line.o \
197 src/keys.o \
198 src/repo.o \
199 $(COMPAT_OBJS)
201 src/tig: $(TIG_OBJS)
203 TEST_GRAPH_OBJS = test/test-graph.o src/util.o src/io.o src/graph.o $(COMPAT_OBJS)
204 test/test-graph: $(TEST_GRAPH_OBJS)
206 OBJS = $(sort $(TIG_OBJS) $(TEST_GRAPH_OBJS))
208 DEPS_CFLAGS ?= -MMD -MP -MF .deps/$*.d
210 %: %.o
211 $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
213 %.o: %.c
214 @mkdir -p $(abspath .deps/$(*D))
215 $(CC) -I. -Iinclude $(CFLAGS) $(DEPS_CFLAGS) $(CPPFLAGS) -c -o $@ $<
217 -include $(OBJS:%.o=.deps/%.d)
219 src/builtin-config.c: tigrc tools/make-builtin-config.sh
220 tools/make-builtin-config.sh $< > $@
222 tig.spec: contrib/tig.spec.in
223 sed -e 's/@@VERSION@@/$(RPM_VERSION)/g' \
224 -e 's/@@RELEASE@@/$(RPM_RELEASE)/g' < $< > $@
226 doc/manual.html: doc/manual.toc
227 doc/manual.html: ASCIIDOC_FLAGS += -ainclude-manual-toc
228 %.toc: %.adoc
229 sed -n '/^\[\[/,/\(---\|~~~\)/p' < $< | while read line; do \
230 case "$$line" in \
231 "----"*) echo ". <<$$ref>>"; ref= ;; \
232 "~~~~"*) echo "- <<$$ref>>"; ref= ;; \
233 "[["*"]]") ref="$$line" ;; \
234 *) ref="$$ref, $$line" ;; \
235 esac; done | sed 's/\[\[\(.*\)\]\]/\1/' > $@
237 README.html: README.adoc doc/asciidoc.conf
238 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -a readme $<
240 INSTALL.html: INSTALL.adoc doc/asciidoc.conf
241 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<
243 NEWS.html: NEWS.adoc doc/asciidoc.conf
244 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<
246 doc/tigmanual.7: doc/manual.adoc
248 %.1.html : %.1.adoc doc/asciidoc.conf
249 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<
251 %.1.xml : %.1.adoc doc/asciidoc.conf
252 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
254 %.5.html : %.5.adoc doc/asciidoc.conf
255 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<
257 %.5.xml : %.5.adoc doc/asciidoc.conf
258 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
260 %.7.xml : %.7.adoc doc/asciidoc.conf
261 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
263 %.html: ASCIIDOC_FLAGS += -adocext=html
264 %.html : %.adoc doc/asciidoc.conf
265 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -n $<
267 %.xml : %.adoc doc/asciidoc.conf
268 $(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d article $<
270 % : %.xml
271 $(XMLTO) man -o doc $<
273 %.html-chunked : %.xml
274 $(XMLTO) html -o $@ $<
276 %.pdf : %.xml
277 $(DOCBOOK2PDF) -o doc $<