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