d141b78509f5d44c2a223d97d4016d096ee29332
[platform/upstream/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 ASCIIDOC = asciidoc
7 CPPCHECK = cppcheck
8 CPPCHECK_SUPPRESSIONS = cppcheck-suppressions.txt
9 GPERF = gperf
10 XSLTPROC = xsltproc
11 MANPAGE_XSL = $(shell if [ -e /usr/local/etc/asciidoc/docbook-xsl/manpage.xsl ]; \
12                 then echo /usr/local/etc/asciidoc/docbook-xsl/manpage.xsl; \
13                 else echo /etc/asciidoc/docbook-xsl/manpage.xsl; fi)
14
15
16 version := \
17     $(shell (git --git-dir=$(srcdir)/.git describe --dirty || git --git-dir=$(srcdir)/.git describe || echo vunknown) \
18             2>/dev/null | sed -e 's/v//' -e 's/-/+/' -e 's/-/_/g')
19
20 dist_dir = ccache-$(version)
21 dist_archives = \
22     ccache-$(version).tar.bz2 \
23     ccache-$(version).tar.gz
24 ifneq ($(shell uname), Darwin)
25     dist_archives += ccache-$(version).tar.xz
26 endif
27
28 generated_docs = ccache.1 AUTHORS.html LICENSE.html MANUAL.html NEWS.html
29 built_dist_files = $(generated_docs)
30
31 headers = \
32     ccache.h \
33     compopt.h \
34     conf.h \
35     counters.h \
36     getopt_long.h \
37     hashtable.h \
38     hashtable_itr.h \
39     hashtable_private.h \
40     hashutil.h \
41     language.h \
42     macroskip.h \
43     manifest.h \
44     mdfour.h \
45     murmurhashneutral2.h \
46     system.h \
47     test/framework.h \
48     test/suites.h \
49     test/util.h
50
51 files_to_clean += *.tar.bz2 *.tar.gz *.tar.xz *.xml .deps/* perfdir.*
52 files_to_distclean += $(built_dist_files) version.c test/suites.h
53 files_to_distclean += .deps version.c dev.mk
54
55 source_dist_files = \
56     $(base_sources) \
57     $(headers) \
58     $(test_sources) \
59     AUTHORS.txt \
60     GPL-3.0.txt \
61     HACKING.txt \
62     LICENSE.txt \
63     MANUAL.txt \
64     Makefile.in \
65     NEWS.txt \
66     README.md \
67     autogen.sh \
68     config.guess \
69     config.h.in \
70     config.sub \
71     configure \
72     configure.ac \
73     confitems.gperf \
74     confitems_lookup.c \
75     dev.mk.in \
76     envtoconfitems.gperf \
77     envtoconfitems_lookup.c \
78     install-sh \
79     m4 \
80     main.c \
81     test.sh \
82     zlib/*.c \
83     zlib/*.h
84
85 dist_files = \
86     $(addprefix $(srcdir)/, $(source_dist_files)) \
87     $(built_dist_files)
88
89 uncrustify_exclude_files = \
90     getopt_long.c \
91     hashtable.c \
92     hashtable_itr.c \
93     snprintf.c
94
95 ifneq ($(shell sed 's/.*"\(.*\)".*/\1/' version.c 2>/dev/null),$(version))
96   $(shell echo 'const char CCACHE_VERSION[] = "$(version)";' >version.c)
97 endif
98 version.o: version.c
99
100 %_lookup.c: %.gperf
101         $(GPERF) $< | awk '/#ifdef __GNUC__/ { ++i; if (i == 2) { print "static"; }} {print}' >$@
102         echo "static const size_t `echo $* | tr a-z A-Z`_TOTAL_KEYWORDS = `sed -nr 's/.*TOTAL_KEYWORDS = ([0-9]+).*/\1/p' $@`;" >>$@
103
104 .PHONY: dist
105 dist: $(dist_archives)
106
107 $(dist_archives): $(dist_files)
108         tmpdir=$$(mktemp -d /tmp/tmp-ccache-dist.XXXXXX) && \
109         dir=$$tmpdir/$(dist_dir) && \
110         mkdir $$dir && \
111         (cd $(srcdir) && \
112          rsync -r --relative $(source_dist_files) $$dir) && \
113         cp $(srcdir)/INSTALL-from-release-archive.md $$dir/INSTALL.md && \
114         cp $(built_dist_files) $$dir && \
115         echo "Remove this file to enable developer mode." >$$dir/dev_mode_disabled && \
116         (cd $$tmpdir && \
117          tarcompression= && \
118          case $@ in \
119              *.bz2) tarcompression=-j ;; \
120              *.gz) tarcompression=-z ;; \
121              *.xz) tarcompression=-J ;; \
122          esac && \
123          tar -c $$tarcompression -f $(CURDIR)/$@ $(dist_dir)) && \
124         rm -rf $$tmpdir
125
126 .PHONY: distcheck
127 distcheck: $(firstword $(dist_archives))
128         tmpdir=$$(mktemp -d /tmp/tmp-ccache-distcheck.XXXXXX) && \
129         (cd $$tmpdir && \
130          tar xjf $(CURDIR)/$< && \
131          mkdir -p $(dist_dir)/build && \
132          cd $(dist_dir)/build && \
133          ../configure --prefix=$$tmpdir/root && \
134          $(MAKE) install && \
135          $(MAKE) installcheck) && \
136         rm -rf $$tmpdir
137
138 .PHONY: docs
139 docs: $(generated_docs)
140
141 %.html: %.txt
142         $(ASCIIDOC) -a revnumber=$(version) -a toc -b xhtml11 $<
143
144 %.xml: %.txt
145         $(ASCIIDOC) -a revnumber=$(version) -d manpage -b docbook $<
146
147 ccache.1: MANUAL.xml
148         $(XSLTPROC) --nonet $(MANPAGE_XSL) $<
149
150 .PHONY: check-syntax
151 check-syntax:
152         $(CC) $(all_cppflags) -I. $(all_cflags) -S -o /dev/null $(CHK_SOURCES)
153
154 .PHONY: cppcheck
155 cppcheck:
156         $(CPPCHECK) --suppressions-list=$(CPPCHECK_SUPPRESSIONS) \
157           --inline-suppr -q --enable=all \
158           $(non_3pp_sources) main.c $(test_sources)
159
160 .PHONY: uncrustify
161 uncrustify:
162         uncrustify -c uncrustify.cfg --no-backup --replace $(filter-out $(uncrustify_exclude_files), $(base_sources)) $(test_sources)
163
164 -include .deps/*.d