1 # GNU make syntax reigns in this file.
3 all_cflags += -Werror @more_warnings@
4 all_cppflags += -MD -MP -MF .deps/$(subst .._,,$(subst /,_,$<)).d
9 CPPCHECK_SUPPRESSIONS = misc/cppcheck-suppressions.txt
10 SHELLCHECK = shellcheck
11 SHELLCHECK_EXCLUDES = misc/shellcheck-excludes.txt
12 SCAN_BUILD = scan-build
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')
21 dist_dir = ccache-$(version)
23 ccache-$(version).tar.bz2 \
24 ccache-$(version).tar.gz
25 ifneq ($(shell uname), Darwin)
26 dist_archives += ccache-$(version).tar.xz
35 built_dist_files = $(generated_sources) $(generated_docs)
43 src/envtoconfitems.h \
48 src/hashtable_private.h \
54 src/murmurhashneutral2.h \
57 unittest/framework.h \
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
89 src/confitems_lookup.c \
90 src/envtoconfitems.gperf \
91 src/envtoconfitems_lookup.c \
100 $(addprefix $(srcdir)/, $(source_dist_files)) \
103 uncrustify_exclude_files = \
106 src/hashtable_itr.c \
109 ifneq ($(shell sed 's/.*"\(.*\)".*/\1/' src/version.c 2>/dev/null),$(version))
110 $(shell echo 'extern const char CCACHE_VERSION[]; const char CCACHE_VERSION[] = "$(version)";' >src/version.c)
112 src/version.o: src/version.c
115 $(if $(quiet),@echo " GPERF $@")
117 $(Q)echo "size_t $$(echo '$(notdir $*)_count(void)') { return $$(sed -nr 's/.*TOTAL_KEYWORDS = (.+),.*/\1/p' $@); }" >>$@
120 dist: $(dist_archives)
122 $(dist_archives): $(dist_files)
123 tmpdir=$$(mktemp -d /tmp/tmp-ccache-dist.XXXXXX) && \
124 dir=$$tmpdir/$(dist_dir) && \
127 rsync -r --relative $(source_dist_files) $$dir) && \
128 cp $(srcdir)/doc/INSTALL-from-release-archive.md $$dir/INSTALL.md && \
130 rsync -r --relative $(built_dist_files) $$dir) && \
131 echo "Remove this file to enable developer mode." >$$dir/dev_mode_disabled && \
135 *.bz2) tarcompression=-j ;; \
136 *.gz) tarcompression=-z ;; \
137 *.xz) tarcompression=-J ;; \
139 tar -c $$tarcompression -f $(CURDIR)/$@ $(dist_dir)) && \
142 # $(1): extra configure options
144 tmpdir=$$(mktemp -d /tmp/tmp-ccache-distcheck.XXXXXX) && \
146 tar xf $(CURDIR)/$< && \
147 mkdir -p $(dist_dir)/build && \
148 chmod -R a-w $(dist_dir) && \
149 chmod u+w $(dist_dir)/build && \
150 cd $(dist_dir)/build && \
151 ../configure --enable-more-warnings --prefix=$$tmpdir/root $(1) && \
152 $(MAKE) install CFLAGS=-Werror V=1 && \
153 $(MAKE) installcheck) && \
154 chmod -R u+w $$tmpdir/$(dist_dir) && \
159 distcheck: $(firstword $(dist_archives))
160 $(call do_distcheck, --without-bundled-zlib)
161 $(call do_distcheck, --with-bundled-zlib)
162 $(call do_distcheck, CC=clang)
165 docs: $(generated_docs)
169 $(if $(quiet),@echo " ASCIIDOC $@")
170 $(Q)$(ASCIIDOC) -o $@ -a revnumber=$(version) -a toc -b xhtml11 $<
174 # Make literals stand out as bold in the man page:
175 $(if $(quiet),@echo " ASCIIDOC $@")
176 $(Q)$(ASCIIDOC) -a revnumber=$(version) -d manpage -b docbook -o - $< | \
177 perl -pe 's!<literal>(.*?)</literal>!<emphasis role="strong">\1</emphasis>!g' >$@
179 doc/ccache.1: doc/MANUAL.xml
180 $(if $(quiet),@echo " A2X $@")
181 $(Q)$(A2X) --doctype manpage --format manpage $<
183 .PHONY: update-authors
185 git log --pretty=format:"* %aN <%aE>" \
187 | perl -00 -p -i -e 's/^\*.*/<STDIN> . "\n"/es' doc/AUTHORS.adoc
191 $(CC) $(all_cppflags) -I. $(all_cflags) -S -o /dev/null $(CHK_SOURCES)
195 $(CPPCHECK) --suppressions-list=$(CPPCHECK_SUPPRESSIONS) \
196 --inline-suppr -q --enable=all --force -I . \
197 --template='cppcheck: warning: {id}:{file}:{line}: {message}' \
198 $(non_3pp_sources) src/main.c $(test_sources)
201 shellcheck: test/suites/*.bash
202 $(SHELLCHECK) --shell=bash --exclude=$(shell sed -e 's/:.*//' <$(SHELLCHECK_EXCLUDES) | grep -v '#' | tr '\n' ',' | sed -e 's/,$$//') $^
206 uncrustify -c misc/uncrustify.cfg --no-backup --replace $(filter-out $(uncrustify_exclude_files), $(base_sources)) $(test_sources)
210 $(SCAN_BUILD) --use-cc=$(CC) $(srcdir)/configure
211 $(SCAN_BUILD) --use-cc=$(CC) --status-bugs $(MAKE) -B
214 docker: misc/Dockerfile
215 $(DOCKER) build -f $< $(srcdir)
218 travis: .travis/Dockerfile
219 $(DOCKER) inspect travis-build >/dev/null || $(DOCKER) build -t travis-build .travis
220 $(DOCKER) run --rm --volume $(PWD):/src --tmpfs /dst:rw,exec --env ASAN_OPTIONS='$(ASAN_OPTIONS)' travis-build \
221 sh -c "cd /src && ./autogen.sh && cd /dst && CC=$(CC) CFLAGS='$(CFLAGS)' /src/configure $(HOST) && make && make $(TEST)"