1 # GNU make syntax reigns in this file.
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
)
46 src
/hashtable_private.h \
52 src
/murmurhashneutral2.h \
55 unittest
/framework.h \
60 files_to_clean
+= *.
tar.bz2
*.
tar.gz
*.
tar.xz
*.xml .deps
/* perfdir.
*
61 files_to_distclean
+= $(built_dist_files
) src
/version.c unittest
/suites.h
62 files_to_distclean
+= .deps dev.mk
87 src
/confitems_lookup.c \
88 src
/envtoconfitems.gperf \
89 src
/envtoconfitems_lookup.c \
97 $(addprefix $(srcdir)/, $(source_dist_files
)) \
100 uncrustify_exclude_files
= \
103 src
/hashtable_itr.c \
106 ifneq ($(shell sed
's/.*"\(.*\)".*/\1/' src
/version.c
2>/dev
/null
),$(version
))
107 $(shell echo
'extern const char CCACHE_VERSION[]; const char CCACHE_VERSION[] = "$(version)";' >src
/version.c
)
109 src
/version.o
: src
/version.c
112 $(GPERF
) $< | awk
'/#ifdef __GNUC__/ { ++i; if (i == 2) { print "static"; }} {print}' >$@
113 echo
"static const size_t $$(echo $(notdir $*) | tr a-z A-Z)_TOTAL_KEYWORDS = $$(sed -nr 's/.*TOTAL_KEYWORDS = ([0-9]+).*/\1/p' $@);" >>$@
116 dist: $(dist_archives
)
118 $(dist_archives
): $(dist_files
)
119 tmpdir
=$$(mktemp
-d
/tmp
/tmp-ccache-dist.XXXXXX
) && \
120 dir=$$tmpdir/$(dist_dir
) && \
123 rsync
-r
--relative
$(source_dist_files
) $$dir) && \
124 cp
$(srcdir)/doc
/INSTALL-from-release-archive.md
$$dir/INSTALL.md
&& \
126 rsync
-r
--relative
$(built_dist_files
) $$dir) && \
127 echo
"Remove this file to enable developer mode." >$$dir/dev_mode_disabled
&& \
131 *.bz2
) tarcompression
=-j
;; \
132 *.gz
) tarcompression
=-z
;; \
133 *.xz
) tarcompression
=-J
;; \
135 tar -c
$$tarcompression -f
$(CURDIR
)/$@
$(dist_dir
)) && \
139 distcheck
: $(firstword $(dist_archives
))
140 tmpdir
=$$(mktemp
-d
/tmp
/tmp-ccache-distcheck.XXXXXX
) && \
142 tar xf
$(CURDIR
)/$< && \
143 mkdir
-p
$(dist_dir
)/build
&& \
144 chmod
-R a-w
$(dist_dir
) && \
145 chmod u
+w
$(dist_dir
)/build
&& \
146 cd
$(dist_dir
)/build
&& \
147 ..
/configure
--prefix=$$tmpdir/root
&& \
149 $(MAKE
) installcheck) && \
150 chmod
-R u
+w
$$tmpdir/$(dist_dir
) && \
153 tmpdir
=$$(mktemp
-d
/tmp
/tmp-ccache-distcheck.XXXXXX
) && \
155 tar xf
$(CURDIR
)/$< && \
156 mkdir
-p
$(dist_dir
)/build
&& \
157 chmod
-R a-w
$(dist_dir
) && \
158 chmod u
+w
$(dist_dir
)/build
&& \
159 cd
$(dist_dir
)/build
&& \
160 ..
/configure
--prefix=$$tmpdir/root
--with-bundled-zlib
&& \
162 $(MAKE
) installcheck) && \
163 chmod
-R u
+w
$$tmpdir/$(dist_dir
) && \
167 docs
: $(generated_docs
)
171 $(ASCIIDOC
) -o
$@
-a revnumber
=$(version
) -a toc
-b xhtml11
$<
175 # Make literals stand out as bold in the man page:
176 $(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 $(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 \
196 $(non_3pp_sources
) src
/main.c
$(test_sources
)
199 shellcheck
: test/suites
/*.bash
200 $(SHELLCHECK
) --shell=bash
--exclude
=$(shell sed
-e
's/:.*//' <$(SHELLCHECK_EXCLUDES
) | grep
-v
'#' | tr
'\n' ',' | sed
-e
's/,$$//') $^
204 uncrustify
-c misc
/uncrustify.cfg
--no-backup
--replace
$(filter-out $(uncrustify_exclude_files
), $(base_sources
)) $(test_sources
)
208 $(SCAN_BUILD
) --use-cc
=$(CC
) $(srcdir)/configure
209 $(SCAN_BUILD
) --use-cc
=$(CC
) --status-bugs
$(MAKE
) -B
212 docker
: misc
/Dockerfile
213 $(DOCKER
) build
-f
$< $(srcdir)
216 travis
: .travis
/Dockerfile
217 $(DOCKER
) inspect travis-build
>/dev
/null ||
$(DOCKER
) build
-t travis-build .travis
218 $(DOCKER
) run
--rm --volume
$(PWD
):/src
--tmpfs
/dst
:rw
,exec
--env ASAN_OPTIONS
='$(ASAN_OPTIONS)' travis-build \
219 sh
-c
"cd /src && ./autogen.sh && cd /dst && CC=$(CC) CFLAGS='$(CFLAGS)' /src/configure $(HOST) && make && make $(TEST)"