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 \
99 $(addprefix $(srcdir)/, $(source_dist_files
)) \
102 uncrustify_exclude_files
= \
105 src
/hashtable_itr.c \
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
)
111 src
/version.o
: src
/version.c
114 $(if
$(quiet
),@echo
" GPERF $@")
116 $(Q
)echo
"size_t $$(echo '$(notdir $*)_count(void)') { return $$(sed -nr 's/.*TOTAL_KEYWORDS = (.+),.*/\1/p' $@); }" >>$@
119 dist: $(dist_archives
)
121 $(dist_archives
): $(dist_files
)
122 tmpdir
=$$(mktemp
-d
/tmp
/tmp-ccache-dist.XXXXXX
) && \
123 dir=$$tmpdir/$(dist_dir
) && \
126 rsync
-r
--relative
$(source_dist_files
) $$dir) && \
127 cp
$(srcdir)/doc
/INSTALL-from-release-archive.md
$$dir/INSTALL.md
&& \
129 rsync
-r
--relative
$(built_dist_files
) $$dir) && \
130 echo
"Remove this file to enable developer mode." >$$dir/dev_mode_disabled
&& \
134 *.bz2
) tarcompression
=-j
;; \
135 *.gz
) tarcompression
=-z
;; \
136 *.xz
) tarcompression
=-J
;; \
138 tar -c
$$tarcompression -f
$(CURDIR
)/$@
$(dist_dir
)) && \
141 # $(1): extra configure options
143 tmpdir
=$$(mktemp
-d
/tmp
/tmp-ccache-distcheck.XXXXXX
) && \
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
) && \
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
)
164 docs
: $(generated_docs
)
168 $(if
$(quiet
),@echo
" ASCIIDOC $@")
169 $(Q
)$(ASCIIDOC
) -o
$@
-a revnumber
=$(version
) -a toc
-b xhtml11
$<
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' >$@
178 doc
/ccache
.1: doc
/MANUAL.xml
179 $(if
$(quiet
),@echo
" A2X $@")
180 $(Q
)$(A2X
) --doctype manpage
--format manpage
$<
182 .PHONY
: update-authors
184 git log
--pretty
=format
:"* %aN <%aE>" \
186 | perl
-00 -p
-i
-e
's/^\*.*/<STDIN> . "\n"/es' doc
/AUTHORS.adoc
190 $(CC
) $(all_cppflags
) -I.
$(all_cflags) -S
-o
/dev
/null
$(CHK_SOURCES
)
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
)
200 shellcheck
: test/suites
/*.bash
201 $(SHELLCHECK
) --shell=bash
--exclude
=$(shell sed
-e
's/:.*//' <$(SHELLCHECK_EXCLUDES
) | grep
-v
'#' | tr
'\n' ',' | sed
-e
's/,$$//') $^
205 uncrustify
-c misc
/uncrustify.cfg
--no-backup
--replace
$(filter-out $(uncrustify_exclude_files
), $(base_sources
)) $(test_sources
)
209 $(SCAN_BUILD
) --use-cc
=$(CC
) $(srcdir)/configure
210 $(SCAN_BUILD
) --use-cc
=$(CC
) --status-bugs
$(MAKE
) -B
213 docker
: misc
/Dockerfile
214 $(DOCKER
) build
-f
$< $(srcdir)
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)"