1srcdir = @srcdir@
2builddir = @builddir@
3VPATH = @srcdir@
4
5prefix = @prefix@
6exec_prefix = @exec_prefix@
7bindir = @bindir@
8mandir = @mandir@
9datarootdir = @datarootdir@
10sysconfdir = @sysconfdir@
11installcmd = @INSTALL@
12
13AR = @AR@
14BASH = @BASH@
15CC = @CC@
16CFLAGS = @CFLAGS@
17CPPFLAGS = @CPPFLAGS@
18EXEEXT = @EXEEXT@
19LDFLAGS = @LDFLAGS@
20LIBS = @LIBS@
21RANLIB = @RANLIB@
22
23all_cflags = $(CFLAGS)
24all_cppflags = @DEFS@ -DSYSCONFDIR=$(sysconfdir) -I. -I$(srcdir)/src -I$(builddir)/unittest $(CPPFLAGS)
25extra_libs = @extra_libs@
26
27v_at_0 = yes
28v_at_ = $(v_at_0)
29quiet := $(v_at_$(V))
30Q=$(if $(quiet),@)
31
32non_3pp_sources = \
33    src/args.c \
34    src/ccache.c \
35    src/cleanup.c \
36    src/compopt.c \
37    src/conf.c \
38    src/confitems.c \
39    src/counters.c \
40    src/execute.c \
41    src/exitfn.c \
42    src/hash.c \
43    src/hashutil.c \
44    src/language.c \
45    src/lockfile.c \
46    src/manifest.c \
47    src/mdfour.c \
48    src/stats.c \
49    src/util.c
50generated_sources = \
51    src/confitems_lookup.c \
52    src/envtoconfitems_lookup.c \
53    src/version.c
543pp_sources = \
55    src/getopt_long.c \
56    src/hashtable.c \
57    src/hashtable_itr.c \
58    src/murmurhashneutral2.c \
59    src/snprintf.c
60extra_sources = @extra_sources@
61base_sources = $(non_3pp_sources) $(generated_sources) $(3pp_sources) $(extra_sources)
62base_objs = $(base_sources:.c=.o)
63
64non_3pp_objs = $(non_3pp_sources:.c=.o)
65
66ccache_sources = src/main.c $(base_sources)
67ccache_objs = $(ccache_sources:.c=.o)
68
69zlib_sources = \
70    src/zlib/adler32.c \
71    src/zlib/crc32.c \
72    src/zlib/deflate.c \
73    src/zlib/gzclose.c \
74    src/zlib/gzlib.c \
75    src/zlib/gzread.c \
76    src/zlib/gzwrite.c \
77    src/zlib/inffast.c \
78    src/zlib/inflate.c \
79    src/zlib/inftrees.c \
80    src/zlib/trees.c \
81    src/zlib/zutil.c
82
83zlib_objs = $(zlib_sources:.c=.o)
84
85test_suites = @test_suites@
86test_sources = unittest/main.c unittest/framework.c unittest/util.c
87test_sources += $(test_suites)
88test_objs = $(test_sources:.c=.o)
89
90all_sources = $(ccache_sources) $(test_sources)
91all_objs = $(ccache_objs) $(test_objs) $(zlib_objs)
92
93files_to_clean = \
94    $(all_objs) \
95    ccache$(EXEEXT) \
96    src/*~ \
97    src/zlib/libz.a \
98    testdir.* \
99    unittest/run$(EXEEXT) \
100    *~
101
102files_to_distclean = Makefile config.h config.log config.status
103
104.PHONY: all
105all: ccache$(EXEEXT)
106
107ccache$(EXEEXT): $(ccache_objs) $(extra_libs)
108	$(if $(quiet),@echo "  LD       $@")
109	$(Q)$(CC) -o $@ $(ccache_objs) $(LDFLAGS) $(extra_libs) $(LIBS)
110
111ccache.1: doc/ccache.1
112	$(if $(quiet),@echo "  CP       $@")
113	$(Q)cp $< $@
114
115.PHONY: install
116install: ccache$(EXEEXT) @disable_man@ccache.1
117	$(if $(quiet),@echo "  INSTALL  ccache$(EXEEXT)")
118	$(Q)$(installcmd) -d $(DESTDIR)$(bindir)
119	$(Q)$(installcmd) -m 755 ccache$(EXEEXT) $(DESTDIR)$(bindir)
120@disable_man@	$(if $(quiet),@echo "  INSTALL  ccache.1")
121@disable_man@	$(Q)$(installcmd) -d $(DESTDIR)$(mandir)/man1
122@disable_man@	$(Q)-$(installcmd) -m 644 ccache.1 $(DESTDIR)$(mandir)/man1/
123
124.PHONY: clean
125clean:
126	rm -rf $(files_to_clean)
127
128src/zlib/libz.a: $(zlib_objs)
129	$(if $(quiet),@echo "  AR       $@")
130	$(Q)$(AR) cr $@ $(zlib_objs)
131	$(if $(quiet),@echo "  RANLIB   $@")
132	$(Q)$(RANLIB) $@
133
134.PHONY: performance
135performance: ccache$(EXEEXT)
136	$(srcdir)/misc/performance --ccache ccache$(EXEEXT) $(CC) $(all_cppflags) $(all_cflags) $(srcdir)/src/ccache.c
137
138.PHONY: test
139test: ccache$(EXEEXT) unittest/run$(EXEEXT)
140	$(if $(quiet),@echo "  TEST     unittest/run$(EXEEXT)")
141	$(Q)unittest/run$(EXEEXT)
142	$(if $(quiet),@echo "  TEST     $(srcdir)/test/run")
143	$(Q)CC='$(CC)' $(BASH) $(srcdir)/test/run
144
145.PHONY: unittest
146unittest: unittest/run$(EXEEXT)
147	$(if $(quiet),@echo "  TEST     $@")
148	$(Q)unittest/run$(EXEEXT)
149
150unittest/run$(EXEEXT): $(base_objs) $(test_objs) $(extra_libs)
151	$(if $(quiet),@echo "  LD       $@")
152	$(Q)$(CC) -o $@ $(base_objs) $(test_objs) $(LDFLAGS) $(extra_libs) $(LIBS)
153
154unittest/main.o: unittest/suites.h
155
156unittest/suites.h: $(test_suites) Makefile
157	$(if $(quiet),@echo "  GEN      $@")
158	$(Q)ls $^ | grep -v Makefile | xargs sed -n 's/TEST_SUITE(\(.*\))/SUITE(\1)/p' >$@
159
160.PHONY: check
161check: test
162
163.PHONY: distclean
164distclean: clean
165	rm -rf $(files_to_distclean)
166
167.PHONY: installcheck
168installcheck: ccache$(EXEEXT) unittest/run$(EXEEXT)
169	unittest/run$(EXEEXT)
170	CCACHE=$(bindir)/ccache CC='$(CC)' $(BASH) $(srcdir)/test/run
171
172.c.o:
173	$(if $(quiet),@echo "  CC       $@")
174	$(Q)$(CC) $(all_cppflags) $(all_cflags) -c -o $@ $<
175
176@include_dev_mk@
177