]> git.ipfire.org Git - thirdparty/ccache.git/blob - dev.mk.in
Use memcpy instead of strncpy in append_log
[thirdparty/ccache.git] / dev.mk.in
1 # GNU make syntax reigns in this file.
2
3 all_cflags += -Werror
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/counters.h \
42 src/getopt_long.h \
43 src/hash.h \
44 src/hashtable.h \
45 src/hashtable_itr.h \
46 src/hashtable_private.h \
47 src/hashutil.h \
48 src/language.h \
49 src/macroskip.h \
50 src/manifest.h \
51 src/mdfour.h \
52 src/murmurhashneutral2.h \
53 src/system.h \
54 src/unify.h \
55 unittest/framework.h \
56 unittest/util.h
57 generated_headers = \
58 unittest/suites.h
59
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
63
64 source_dist_files = \
65 $(non_3pp_sources) \
66 $(3pp_sources) \
67 $(headers) \
68 $(test_sources) \
69 CONTRIBUTING.md \
70 GPL-3.0.txt \
71 LICENSE.adoc \
72 Makefile.in \
73 README.md \
74 autogen.sh \
75 config.guess \
76 config.h.in \
77 config.sub \
78 configure \
79 configure.ac \
80 dev.mk.in \
81 doc/AUTHORS.adoc \
82 doc/MANUAL.adoc \
83 doc/NEWS.adoc \
84 install-sh \
85 m4 \
86 src/confitems.gperf \
87 src/confitems_lookup.c \
88 src/envtoconfitems.gperf \
89 src/envtoconfitems_lookup.c \
90 src/main.c \
91 src/zlib/*.c \
92 src/zlib/*.h \
93 test/run \
94 test/suites/*
95
96 dist_files = \
97 $(addprefix $(srcdir)/, $(source_dist_files)) \
98 $(built_dist_files)
99
100 uncrustify_exclude_files = \
101 src/getopt_long.c \
102 src/hashtable.c \
103 src/hashtable_itr.c \
104 src/snprintf.c
105
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)
108 endif
109 src/version.o: src/version.c
110
111 %_lookup.c: %.gperf
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' $@);" >>$@
114
115 .PHONY: dist
116 dist: $(dist_archives)
117
118 $(dist_archives): $(dist_files)
119 tmpdir=$$(mktemp -d /tmp/tmp-ccache-dist.XXXXXX) && \
120 dir=$$tmpdir/$(dist_dir) && \
121 mkdir $$dir && \
122 (cd $(srcdir) && \
123 rsync -r --relative $(source_dist_files) $$dir) && \
124 cp $(srcdir)/doc/INSTALL-from-release-archive.md $$dir/INSTALL.md && \
125 (cd $(builddir) && \
126 rsync -r --relative $(built_dist_files) $$dir) && \
127 echo "Remove this file to enable developer mode." >$$dir/dev_mode_disabled && \
128 (cd $$tmpdir && \
129 tarcompression= && \
130 case $@ in \
131 *.bz2) tarcompression=-j ;; \
132 *.gz) tarcompression=-z ;; \
133 *.xz) tarcompression=-J ;; \
134 esac && \
135 tar -c $$tarcompression -f $(CURDIR)/$@ $(dist_dir)) && \
136 rm -rf $$tmpdir
137
138 .PHONY: distcheck
139 distcheck: $(firstword $(dist_archives))
140 tmpdir=$$(mktemp -d /tmp/tmp-ccache-distcheck.XXXXXX) && \
141 (cd $$tmpdir && \
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 && \
148 $(MAKE) install && \
149 $(MAKE) installcheck) && \
150 chmod -R u+w $$tmpdir/$(dist_dir) && \
151 rm -rf $$tmpdir
152
153 tmpdir=$$(mktemp -d /tmp/tmp-ccache-distcheck.XXXXXX) && \
154 (cd $$tmpdir && \
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 && \
161 $(MAKE) install && \
162 $(MAKE) installcheck) && \
163 chmod -R u+w $$tmpdir/$(dist_dir) && \
164 rm -rf $$tmpdir
165
166 .PHONY: docs
167 docs: $(generated_docs)
168
169 %.html: %.adoc
170 @mkdir -p $(@D)
171 $(ASCIIDOC) -o $@ -a revnumber=$(version) -a toc -b xhtml11 $<
172
173 %.xml: %.adoc
174 @mkdir -p $(@D)
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' >$@
178
179 doc/ccache.1: doc/MANUAL.xml
180 $(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 \
196 $(non_3pp_sources) src/main.c $(test_sources)
197
198 .PHONY: shellcheck
199 shellcheck: test/suites/*.bash
200 $(SHELLCHECK) --shell=bash --exclude=$(shell sed -e 's/:.*//' <$(SHELLCHECK_EXCLUDES) | grep -v '#' | tr '\n' ',' | sed -e 's/,$$//') $^
201
202 .PHONY: uncrustify
203 uncrustify:
204 uncrustify -c misc/uncrustify.cfg --no-backup --replace $(filter-out $(uncrustify_exclude_files), $(base_sources)) $(test_sources)
205
206 .PHONY: analyze
207 analyze:
208 $(SCAN_BUILD) --use-cc=$(CC) $(srcdir)/configure
209 $(SCAN_BUILD) --use-cc=$(CC) --status-bugs $(MAKE) -B
210
211 .PHONY: docker
212 docker: misc/Dockerfile
213 $(DOCKER) build -f $< $(srcdir)
214
215 .PHONY: travis
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)"
220
221 -include .deps/*.d