blame: improve handling of file name visibility
[tig.git] / Makefile
blob98494afef9fe656a702a6ce21f1c08ebcd052a1c
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 2>/dev/null))
26 COMMIT := $(if $(GITDESC),$(GITDESC),$(VERSION)-g$(shell git describe --always))
27 WTDIRTY = $(if $(shell git diff-index HEAD 2>/dev/null),-dirty)
28 VERSION = $(COMMIT)$(WTDIRTY)
29 endif
30 ifdef DIST_VERSION
31 VERSION = $(DIST_VERSION)
32 endif
34 # Split the version "TAG-OFFSET-gSHA1-DIRTY" into "TAG OFFSET"
35 # and append 0 as a fallback offset for "exact" tagged versions.
36 RPM_VERLIST = $(filter-out g% dirty,$(subst -, ,$(VERSION))) 0
37 RPM_VERSION = $(word 1,$(RPM_VERLIST))
38 RPM_RELEASE = $(word 2,$(RPM_VERLIST))$(if $(WTDIRTY),.dirty)
40 LDLIBS ?= -lcurses
41 CFLAGS ?= -Wall -O2
42 DFLAGS = -g -DDEBUG -Werror -O0
43 EXE = src/tig
44 TOOLS = test/test-graph tools/doc-gen
45 TXTDOC = doc/tig.1.adoc doc/tigrc.5.adoc doc/manual.adoc NEWS.adoc README.adoc INSTALL.adoc
46 MANDOC = doc/tig.1 doc/tigrc.5 doc/tigmanual.7
47 HTMLDOC = doc/tig.1.html doc/tigrc.5.html doc/manual.html README.html INSTALL.html NEWS.html
48 ALLDOC = $(MANDOC) $(HTMLDOC) doc/manual.html-chunked doc/manual.pdf
50 # Never include the release number in the tarname for tagged
51 # versions.
52 ifneq ($(if $(DIST_VERSION),$(words $(RPM_VERLIST))),2)
53 TARNAME = tig-$(RPM_VERSION)-$(RPM_RELEASE)
54 else
55 TARNAME = tig-$(RPM_VERSION)
56 endif
58 override CPPFLAGS += '-DTIG_VERSION="$(VERSION)"'
59 override CPPFLAGS += '-DSYSCONFDIR="$(sysconfdir)"'
61 ASCIIDOC ?= asciidoc
62 ASCIIDOC_FLAGS = -aversion=$(VERSION) -asysconfdir=$(sysconfdir) -f doc/asciidoc.conf
63 XMLTO ?= xmlto
64 DOCBOOK2PDF ?= docbook2pdf
66 all: $(EXE) $(TOOLS)
67 all-debug: $(EXE) $(TOOLS)
68 all-debug: CFLAGS += $(DFLAGS)
69 doc: $(ALLDOC)
70 doc-man: $(MANDOC)
71 doc-html: $(HTMLDOC)
73 export sysconfdir
75 install: all
76 $(QUIET_INSTALL)tools/install.sh bin $(EXE) "$(DESTDIR)$(bindir)"
77 $(QUIET_INSTALL)tools/install.sh data tigrc "$(DESTDIR)$(sysconfdir)"
79 install-doc-man: doc-man
80 $(Q)$(foreach doc, $(filter %.1, $(MANDOC)), \
81 $(QUIET_INSTALL_EACH)tools/install.sh data $(doc) "$(DESTDIR)$(mandir)/man1";)
82 $(Q)$(foreach doc, $(filter %.5, $(MANDOC)), \
83 $(QUIET_INSTALL_EACH)tools/install.sh data $(doc) "$(DESTDIR)$(mandir)/man5";)
84 $(Q)$(foreach doc, $(filter %.7, $(MANDOC)), \
85 $(QUIET_INSTALL_EACH)tools/install.sh data $(doc) "$(DESTDIR)$(mandir)/man7";)
87 install-release-doc-man:
88 GIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release
89 GIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(MANDOC)
90 rm -f .tmp-doc-index
91 $(MAKE) install-doc-man
93 install-doc-html: doc-html
94 $(Q)$(foreach doc, $(HTMLDOC), \
95 $(QUIET_INSTALL_EACH)tools/install.sh data $(doc) "$(DESTDIR)$(docdir)/tig";)
97 install-release-doc-html:
98 GIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release
99 GIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(HTMLDOC)
100 rm -f .tmp-doc-index
101 $(MAKE) install-doc-html
103 install-doc: install-doc-man install-doc-html
104 install-release-doc: install-release-doc-man install-release-doc-html
106 clean:
107 $(RM) -r $(TARNAME) *.spec tig-*.tar.gz tig-*.tar.gz.md5 .deps
108 $(RM) $(EXE) $(TOOLS) $(OBJS) core doc/*.xml src/builtin-config.c
110 distclean: clean
111 $(RM) -r doc/manual.html-chunked autom4te.cache release-docs
112 $(RM) doc/*.toc $(ALLDOC) aclocal.m4 configure
113 $(RM) config.h config.log config.make config.status config.h.in
115 spell-check:
116 for file in $(TXTDOC) src/tig.c; do \
117 aspell --lang=en --dont-backup \
118 --personal=./tools/aspell.dict check $$file; \
119 done
121 strip: $(EXE)
122 strip $(EXE)
124 update-headers:
125 @for file in include/*.h src/*.c tools/*.c; do \
126 grep -q '/* Copyright' "$$file" && \
127 sed '0,/.*\*\//d' < "$$file" | \
128 grep -v '/* vim: set' > "$$file.tmp"; \
129 { cat tools/header.h "$$file.tmp"; \
130 echo "/* vim: set ts=8 sw=8 noexpandtab: */"; } > "$$file"; \
131 rm "$$file.tmp"; \
132 echo "Updated $$file"; \
133 done
135 update-docs: tools/doc-gen
136 doc="doc/tigrc.5.adoc"; \
137 sed -n '0,/ifndef::DOC_GEN_ACTIONS/p' < "$$doc" > "$$doc.gen"; \
138 ./tools/doc-gen actions >> "$$doc.gen"; \
139 sed -n '/endif::DOC_GEN_ACTIONS/,$$p' < "$$doc" >> "$$doc.gen" ; \
140 mv "$$doc.gen" "$$doc"
142 dist: configure tig.spec
143 $(Q)mkdir -p $(TARNAME) && \
144 cp Makefile tig.spec configure config.h.in aclocal.m4 $(TARNAME) && \
145 sed -i "s/VERSION\s\+=\s\+[0-9]\+\([.][0-9]\+\)\+/VERSION = $(VERSION)/" $(TARNAME)/Makefile
146 git archive --format=tar --prefix=$(TARNAME)/ HEAD | \
147 tar --delete $(TARNAME)/Makefile > $(TARNAME).tar && \
148 tar rf $(TARNAME).tar `find $(TARNAME)/*` && \
149 gzip -f -9 $(TARNAME).tar && \
150 md5sum $(TARNAME).tar.gz > $(TARNAME).tar.gz.md5
151 $(Q)$(RM) -r $(TARNAME)
153 rpm: dist
154 rpmbuild -ta $(TARNAME).tar.gz
156 test: $(TOOLS)
157 test/unit-test-graph.sh
159 # Other autoconf-related rules are hidden in config.make.in so that
160 # they don't confuse Make when we aren't actually using ./configure
161 configure: configure.ac acinclude.m4 tools/*.m4
162 ./autogen.sh
164 .PHONY: all all-debug doc doc-man doc-html install install-doc \
165 install-doc-man install-doc-html clean spell-check dist rpm test
167 ifdef NO_MKSTEMPS
168 COMPAT_CPPFLAGS += -DNO_MKSTEMPS
169 COMPAT_OBJS += compat/mkstemps.o
170 endif
172 ifdef NO_SETENV
173 COMPAT_CPPFLAGS += -DNO_SETENV
174 COMPAT_OBJS += compat/setenv.o
175 endif
177 COMPAT_OBJS += compat/hashtab.o
179 override CPPFLAGS += $(COMPAT_CPPFLAGS)
181 TIG_OBJS = \
182 src/tig.o \
183 src/types.o \
184 src/string.o \
185 src/util.o \
186 src/argv.o \
187 src/io.o \
188 src/graph.o \
189 src/refdb.o \
190 src/builtin-config.o \
191 src/request.o \
192 src/line.o \
193 src/keys.o \
194 src/repo.o \
195 src/options.o \
196 src/draw.o \
197 src/prompt.o \
198 src/display.o \
199 src/view.o \
200 src/parse.o \
201 src/pager.o \
202 src/log.o \
203 src/diff.o \
204 src/help.o \
205 src/tree.o \
206 src/blob.o \
207 src/blame.o \
208 src/refs.o \
209 src/status.o \
210 src/stage.o \
211 src/main.o \
212 src/stash.o \
213 src/grep.o \
214 $(COMPAT_OBJS)
216 src/tig: $(TIG_OBJS)
218 TEST_GRAPH_OBJS = test/test-graph.o src/string.o src/util.o src/io.o src/graph.o $(COMPAT_OBJS)
219 test/test-graph: $(TEST_GRAPH_OBJS)
221 DOC_GEN_OBJS = tools/doc-gen.o src/string.o src/types.o src/util.o src/request.o
222 tools/doc-gen: $(DOC_GEN_OBJS)
224 OBJS = $(sort $(TIG_OBJS) $(TEST_GRAPH_OBJS) $(DOC_GEN_OBJS))
226 DEPS_CFLAGS ?= -MMD -MP -MF .deps/$*.d
228 %: %.o
229 $(QUIET_LINK)$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
231 %.o: %.c
232 @mkdir -p $(abspath .deps/$(*D))
233 $(QUIET_CC)$(CC) -I. -Iinclude $(CFLAGS) $(DEPS_CFLAGS) $(CPPFLAGS) -c -o $@ $<
235 -include $(OBJS:%.o=.deps/%.d)
237 src/builtin-config.c: tigrc tools/make-builtin-config.sh
238 $(QUIET_GEN)tools/make-builtin-config.sh $< > $@
240 tig.spec: contrib/tig.spec.in
241 $(QUIET_GEN)sed -e 's/@@VERSION@@/$(RPM_VERSION)/g' \
242 -e 's/@@RELEASE@@/$(RPM_RELEASE)/g' < $< > $@
244 doc/manual.html: doc/manual.toc
245 doc/manual.html: ASCIIDOC_FLAGS += -ainclude-manual-toc
246 %.toc: %.adoc
247 $(QUIET_GEN)sed -n '/^\[\[/,/\(---\|~~~\)/p' < $< | while read line; do \
248 case "$$line" in \
249 "----"*) echo ". <<$$ref>>"; ref= ;; \
250 "~~~~"*) echo "- <<$$ref>>"; ref= ;; \
251 "[["*"]]") ref="$$line" ;; \
252 *) ref="$$ref, $$line" ;; \
253 esac; done | sed 's/\[\[\(.*\)\]\]/\1/' > $@
255 README.html: README.adoc doc/asciidoc.conf
256 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -a readme $<
258 INSTALL.html: INSTALL.adoc doc/asciidoc.conf
259 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<
261 NEWS.html: NEWS.adoc doc/asciidoc.conf
262 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<
264 doc/tigmanual.7: doc/manual.adoc
266 %.1.html : %.1.adoc doc/asciidoc.conf
267 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<
269 %.1.xml : %.1.adoc doc/asciidoc.conf
270 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
272 %.5.html : %.5.adoc doc/asciidoc.conf
273 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<
275 %.5.xml : %.5.adoc doc/asciidoc.conf
276 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
278 %.7.xml : %.7.adoc doc/asciidoc.conf
279 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<
281 %.html: ASCIIDOC_FLAGS += -adocext=html
282 %.html : %.adoc doc/asciidoc.conf
283 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -n $<
285 %.xml : %.adoc doc/asciidoc.conf
286 $(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d article $<
288 % : %.xml
289 $(QUIET_XMLTO)$(XMLTO) man -o doc $<
291 %.html-chunked : %.xml
292 $(QUIET_XMLTO)$(XMLTO) html -o $@ $<
294 %.pdf : %.xml
295 $(QUIET_DB2PDF)$(DOCBOOK2PDF) -o doc $<
297 #############################################################################
298 # Quiet make
299 #############################################################################
301 ifneq ($(findstring $(MAKEFLAGS),s),s)
302 V = @
303 Q = $(V:1=)
304 QUIET_CC = $(Q:@=@echo ' CC '$@;)
305 QUIET_LINK = $(Q:@=@echo ' LINK '$@;)
306 QUIET_GEN = $(Q:@=@echo ' GEN '$@;)
307 QUIET_ASCIIDOC = $(Q:@=@echo ' ASCIIDOC '$@;)
308 QUIET_XMLTO = $(Q:@=@echo ' XMLTO '$@;)
309 QUIET_DB2PDF = $(Q:@=@echo ' DB2PDF '$@;)
310 # tools/install.sh will print 'file -> $install_dir/file'
311 QUIET_INSTALL = $(Q:@=@printf ' INSTALL ';)
312 QUIET_INSTALL_EACH = $(Q:@=printf ' INSTALL ';)
314 export V
315 endif