]> git.ipfire.org Git - thirdparty/ccache.git/blob - dev.mk.in
Refactor conf item lookup code
[thirdparty/ccache.git] / dev.mk.in
1 # GNU make syntax reigns in this file.
2
3 all_cflags += -Werror @more_warnings@
4 all_cppflags += -MD -MP -MF .deps/$(subst .._,,$(subst /,_,$<)).d
5
6 A2X = a2x
7 ASCIIDOC = asciidoc
8 CPPCHECK = cppcheck
9 CPPCHECK_SUPPRESSIONS = misc/cppcheck-suppressions.txt
10 SHELLCHECK = shellcheck
11 SHELLCHECK_EXCLUDES = misc/shellcheck-excludes.txt
12 SCAN_BUILD = scan-build
13 DOCKER = docker
14 GPERF = gperf
15 TEST = test
16
17 version := \
18 $(shell (git --git-dir=$(srcdir)/.git describe --dirty || git --git-dir=$(srcdir)/.git describe || echo vunknown) \
19 2>/dev/null | sed -e 's/v//' -e 's/-/+/' -e 's/-/_/g')
20
21 dist_dir = ccache-$(version)
22 dist_archives = \
23 ccache-$(version).tar.bz2 \
24 ccache-$(version).tar.gz
25 ifneq ($(shell uname), Darwin)
26 dist_archives += ccache-$(version).tar.xz
27 endif
28
29 generated_docs = \
30 LICENSE.html \
31 doc/AUTHORS.html \
32 doc/MANUAL.html \
33 doc/NEWS.html \
34 doc/ccache.1
35 built_dist_files = $(generated_sources) $(generated_docs)
36
37 headers = \
38 src/ccache.h \
39 src/compopt.h \
40 src/conf.h \
41 src/confitems.h \
42 src/counters.h \
43 src/envtoconfitems.h \
44 src/getopt_long.h \
45 src/hash.h \
46 src/hashtable.h \
47 src/hashtable_itr.h \
48 src/hashtable_private.h \
49 src/hashutil.h \
50 src/language.h \
51 src/macroskip.h \
52 src/manifest.h \
53 src/mdfour.h \
54 src/murmurhashneutral2.h \
55 src/system.h \
56 src/unify.h \
57 unittest/framework.h \
58 unittest/util.h
59 generated_headers = \
60 unittest/suites.h
61
62 files_to_clean += *.tar.bz2 *.tar.gz *.tar.xz *.xml .deps/* perfdir.*
63 files_to_distclean += $(built_dist_files) src/version.c unittest/suites.h
64 files_to_distclean += .deps dev.mk
65
66 source_dist_files = \
67 $(non_3pp_sources) \
68 $(3pp_sources) \
69 $(headers) \
70 $(test_sources) \
71 CONTRIBUTING.md \
72 GPL-3.0.txt \
73 LICENSE.adoc \
74 Makefile.in \
75 README.md \
76 autogen.sh \
77 config.guess \
78 config.h.in \
79 config.sub \
80 configure \
81 configure.ac \
82 dev.mk.in \
83 doc/AUTHORS.adoc \
84 doc/MANUAL.adoc \
85 doc/NEWS.adoc \
86 install-sh \
87 m4 \
88 src/confitems.gperf \
89 src/confitems_lookup.c \
90 src/envtoconfitems.gperf \
91 src/envtoconfitems_lookup.c \
92 src/main.c \
93 src/zlib/*.c \
94 src/zlib/*.h \
95 test/run \
96 test/suites/*
97
98 dist_files = \
99 $(addprefix $(srcdir)/, $(source_dist_files)) \
100 $(built_dist_files)
101
102 uncrustify_exclude_files = \
103 src/getopt_long.c \
104 src/hashtable.c \
105 src/hashtable_itr.c \
106 src/snprintf.c
107
108 ifneq ($(shell sed 's/.*"\(.*\)".*/\1/' src/version.c 2>/dev/null),$(version))
109 $(shell echo 'extern const char CCACHE_VERSION[]; const char CCACHE_VERSION[] = "$(version)";' >src/version.c)
110 endif
111 src/version.o: src/version.c
112
113 %_lookup.c: %.gperf
114 $(if $(quiet),@echo " GPERF $@")
115 $(Q)$(GPERF) $< >$@
116 $(Q)echo "size_t $$(echo '$(notdir $*)_count(void)') { return $$(sed -nr 's/.*TOTAL_KEYWORDS = (.+),.*/\1/p' $@); }" >>$@
117
118 .PHONY: dist
119 dist: $(dist_archives)
120
121 $(dist_archives): $(dist_files)
122 tmpdir=$$(mktemp -d /tmp/tmp-ccache-dist.XXXXXX) && \
123 dir=$$tmpdir/$(dist_dir) && \
124 mkdir $$dir && \
125 (cd $(srcdir) && \
126 rsync -r --relative $(source_dist_files) $$dir) && \
127 cp $(srcdir)/doc/INSTALL-from-release-archive.md $$dir/INSTALL.md && \
128 (cd $(builddir) && \
129 rsync -r --relative $(built_dist_files) $$dir) && \
130 echo "Remove this file to enable developer mode." >$$dir/dev_mode_disabled && \
131 (cd $$tmpdir && \
132 tarcompression= && \
133 case $@ in \
134 *.bz2) tarcompression=-j ;; \
135 *.gz) tarcompression=-z ;; \
136 *.xz) tarcompression=-J ;; \
137 esac && \
138 tar -c $$tarcompression -f $(CURDIR)/$@ $(dist_dir)) && \
139 rm -rf $$tmpdir
140
141 # $(1): extra configure options
142 define do_distcheck
143 tmpdir=$$(mktemp -d /tmp/tmp-ccache-distcheck.XXXXXX) && \
144 (cd $$tmpdir && \
145 tar xf $(CURDIR)/$< && \
146 mkdir -p $(dist_dir)/build && \
147 chmod -R a-w $(dist_dir) && \
148 chmod u+w $(dist_dir)/build && \
149 cd $(dist_dir)/build && \
150 ../configure --enable-more-warnings --prefix=$$tmpdir/root $(1) && \
151 $(MAKE) install CFLAGS=-Werror V=1 && \
152 $(MAKE) installcheck) && \
153 chmod -R u+w $$tmpdir/$(dist_dir) && \
154 rm -rf $$tmpdir
155 endef
156
157 .PHONY: distcheck
158 distcheck: $(firstword $(dist_archives))
159 $(call do_distcheck, --without-bundled-zlib)
160 $(call do_distcheck, --with-bundled-zlib)
161 $(call do_distcheck, CC=clang)
162
163 .PHONY: docs
164 docs: $(generated_docs)
165
166 %.html: %.adoc
167 @mkdir -p $(@D)
168 $(if $(quiet),@echo " ASCIIDOC $@")
169 $(Q)$(ASCIIDOC) -o $@ -a revnumber=$(version) -a toc -b xhtml11 $<
170
171 %.xml: %.adoc
172 @mkdir -p $(@D)
173 # Make literals stand out as bold in the man page:
174 $(if $(quiet),@echo " ASCIIDOC $@")
175 $(Q)$(ASCIIDOC) -a revnumber=$(version) -d manpage -b docbook -o - $< | \
176 perl -pe 's!<literal>(.*?)</literal>!<emphasis role="strong">\1</emphasis>!g' >$@
177
178 doc/ccache.1: doc/MANUAL.xml
179 $(if $(quiet),@echo " A2X $@")
180 $(Q)$(A2X) --doctype manpage --format manpage $<
181
182 .PHONY: update-authors
183 update-authors:
184 git log --pretty=format:"* %aN <%aE>" \
185 | sort -u \
186 | perl -00 -p -i -e 's/^\*.*/<STDIN> . "\n"/es' doc/AUTHORS.adoc
187
188 .PHONY: check-syntax
189 check-syntax:
190 $(CC) $(all_cppflags) -I. $(all_cflags) -S -o /dev/null $(CHK_SOURCES)
191
192 .PHONY: cppcheck
193 cppcheck:
194 $(CPPCHECK) --suppressions-list=$(CPPCHECK_SUPPRESSIONS) \
195 --inline-suppr -q --enable=all --force -I . \
196 --template='cppcheck: warning: {id}:{file}:{line}: {message}' \
197 $(non_3pp_sources) src/main.c $(test_sources)
198
199 .PHONY: shellcheck
200 shellcheck: test/suites/*.bash
201 $(SHELLCHECK) --shell=bash --exclude=$(shell sed -e 's/:.*//' <$(SHELLCHECK_EXCLUDES) | grep -v '#' | tr '\n' ',' | sed -e 's/,$$//') $^
202
203 .PHONY: uncrustify
204 uncrustify:
205 uncrustify -c misc/uncrustify.cfg --no-backup --replace $(filter-out $(uncrustify_exclude_files), $(base_sources)) $(test_sources)
206
207 .PHONY: analyze
208 analyze:
209 $(SCAN_BUILD) --use-cc=$(CC) $(srcdir)/configure
210 $(SCAN_BUILD) --use-cc=$(CC) --status-bugs $(MAKE) -B
211
212 .PHONY: docker
213 docker: misc/Dockerfile
214 $(DOCKER) build -f $< $(srcdir)
215
216 .PHONY: travis
217 travis: .travis/Dockerfile
218 $(DOCKER) inspect travis-build >/dev/null || $(DOCKER) build -t travis-build .travis
219 $(DOCKER) run --rm --volume $(PWD):/src --tmpfs /dst:rw,exec --env ASAN_OPTIONS='$(ASAN_OPTIONS)' travis-build \
220 sh -c "cd /src && ./autogen.sh && cd /dst && CC=$(CC) CFLAGS='$(CFLAGS)' /src/configure $(HOST) && make && make $(TEST)"
221
222 -include .deps/*.d