build: remove autoconf generated files
[dahdi/tools.git] / Makefile
1 #
2 # Makefile for DAHDI tools
3 #
4 # Copyright (C) 2001-2010 Digium, Inc.
5 #
6 #
7
8 ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),)
9 endif
10
11 ifeq ($(strip $(foreach var,clean distclean dist-clean update,$(findstring $(var),$(MAKECMDGOALS)))),)
12  ifneq ($(wildcard makeopts),)
13   include makeopts
14  endif
15 endif
16
17 SUBDIRS_UTILS_ALL:= ppp
18 SUBDIRS_UTILS := xpp
19
20 OPTFLAGS=-O2
21 CFLAGS+=-I. $(OPTFLAGS) -g -fPIC -Wall -DBUILDING_TONEZONE #-DTONEZONE_DRIVER
22 ifneq (,$(findstring ppc,$(UNAME_M)))
23 CFLAGS+=-fsigned-char
24 endif
25 ifneq (,$(findstring x86_64,$(UNAME_M)))
26 CFLAGS+=-m64
27 endif
28
29 ifeq ($(DAHDI_DEVMODE),yes)
30   CFLAGS+=-Werror -Wunused -Wundef $(DAHDI_DECLARATION_AFTER_STATEMENT) -Wmissing-format-attribute -Wformat-security #-Wformat=2
31 endif
32
33 ROOT_PREFIX=
34
35 # extra cflags to build dependencies. Recursively expanded.
36 MAKE_DEPS= -MD -MT $@ -MF .$(subst /,_,$@).d -MP
37
38 CFLAGS+=$(DAHDI_INCLUDE)
39
40 CHKCONFIG       := $(wildcard /sbin/chkconfig)
41 UPDATE_RCD      := $(wildcard /usr/sbin/update-rc.d)
42 ifeq (,$(DESTDIR))
43   ifneq (,$(CHKCONFIG))
44     ADD_INITD   := $(CHKCONFIG) --add dahdi
45   else
46     ifneq (,$(UPDATE_RCD))
47       ADD_INITD := $(UPDATE_RCD) dahdi defaults 15 30
48     endif
49   endif
50 endif
51
52 INITRD_DIR      := $(firstword $(wildcard $(DESTDIR)/etc/rc.d/init.d $(DESTDIR)/etc/init.d))
53 ifneq (,$(INITRD_DIR))
54   INIT_TARGET   := $(INITRD_DIR)/dahdi
55   COPY_INITD    := install -D dahdi.init $(INIT_TARGET)
56 endif
57
58 RCCONF_FILE     = /etc/dahdi/init.conf
59 MODULES_FILE    = /etc/dahdi/modules
60 GENCONF_FILE    = /etc/dahdi/genconf_parameters
61 MODPROBE_FILE   = /etc/modprobe.d/dahdi.conf
62 BLACKLIST_FILE  = /etc/modprobe.d/dahdi.blacklist.conf
63 BASH_COMP_DIR   = /etc/bash_completion.d
64 BASH_COMP_FILE  = $(BASH_COMP_DIR)/dahdi
65
66 NETSCR_DIR      := $(firstword $(wildcard $(DESTDIR)/etc/sysconfig/network-scripts ))
67 ifneq (,$(NETSCR_DIR))
68   NETSCR_TARGET := $(NETSCR_DIR)/ifup-hdlc
69   COPY_NETSCR   := install -D ifup-hdlc $(NETSCR_TARGET)
70 endif
71
72 TOOLSVERSION=$(shell build_tools/make_version . dahdi/tools)
73
74 LTZ_A:=libtonezone.a
75 LTZ_A_OBJS:=zonedata.o tonezone.o version.o
76 LTZ_SO:=libtonezone.so
77 LTZ_SO_OBJS:=zonedata.lo tonezone.lo version.o
78 LTZ_SO_MAJOR_VER:=2
79 LTZ_SO_MINOR_VER:=0
80
81 # sbindir, libdir, includedir and mandir are defined in makeopts
82 # (from configure).
83 BIN_DIR:=$(sbindir)
84 LIB_DIR:=$(libdir)
85 INC_DIR:=$(includedir)/dahdi
86 MAN_DIR:=$(mandir)/man8
87 DATA_DIR:=${datadir}/dahdi
88 CONFIG_DIR:=$(sysconfdir)/dahdi
89 CONFIG_FILE:=$(CONFIG_DIR)/system.conf
90 UDEVRULES_DIR:=$(sysconfdir)/udev/rules.d
91
92 # Utilities we build with a standard build procedure:
93 UTILS           = dahdi_tool dahdi_test dahdi_monitor dahdi_speed sethdlc dahdi_cfg \
94                   fxstest fxotune dahdi_diag dahdi_scan
95
96 # some tests:
97 UTILS           += patgen pattest patlooptest hdlcstress hdlctest hdlcgen \
98                    hdlcverify timertest dahdi_maint
99
100
101 BINS:=fxotune dahdi_cfg dahdi_monitor dahdi_speed dahdi_test dahdi_scan dahdi_maint
102 ifeq    (1,$(PBX_NEWT))
103         BINS    += dahdi_tool
104 endif
105 ifeq    (1,$(PBX_HDLC))
106         BINS    += sethdlc
107 endif
108 ASSIGNED_DATA_SCRIPTS:=\
109         dahdi_handle_device     \
110         dahdi_span_config       \
111         dahdi_auto_assign_compat        \
112         span_config.d/10-dahdi-cfg      \
113         span_config.d/20-fxotune        \
114         span_config.d/50-asterisk       \
115         handle_device.d/10-span-types   \
116         handle_device.d/20-span-assignments
117
118 ASSIGNED_UTILS:=dahdi_span_assignments dahdi_span_types \
119         dahdi_waitfor_span_assignments
120 ASSIGNED_CONF:=assigned-spans.conf.sample span-types.conf.sample
121
122 MAN_PAGES:= \
123         $(wildcard $(BINS:%=doc/%.8)) \
124         $(wildcard $(ASSIGNED_UTILS:%=doc/%.8))
125
126 TEST_BINS:=patgen pattest patlooptest hdlcstress hdlctest hdlcgen hdlcverify timertest dahdi_maint
127 # All the man pages. Not just installed ones:
128 GROFF_PAGES     := $(wildcard doc/*.8 xpp/*.8)
129 GROFF_HTML      := $(GROFF_PAGES:%=%.html)
130
131 GENERATED_DOCS  := $(GROFF_HTML) README.html README.Astribank.html
132
133 all: prereq programs
134
135 libs: $(LTZ_SO) $(LTZ_A)
136
137 utils-subdirs:
138         @for dir in $(SUBDIRS_UTILS); do \
139                 $(MAKE) -C $$dir; \
140         done
141
142 programs: libs utils
143
144 utils: $(BINS) utils-subdirs
145
146 version.c: FORCE
147         @TOOLSVERSION="${TOOLSVERSION}" build_tools/make_version_c > $@.tmp
148         @if cmp -s $@.tmp $@ ; then :; else \
149                 mv $@.tmp $@ ; \
150         fi
151         @rm -f $@.tmp
152
153 tests: $(TEST_BINS)
154
155 $(UTILS): %: %.o
156
157 $(UTILS): version.o
158
159 %.o: %.c
160         $(CC) $(CFLAGS) $(MAKE_DEPS) -c -o $@ $<
161
162 %.lo: %.c
163         $(CC) $(CFLAGS) $(MAKE_DEPS) -c -o $@ $<
164
165 %: %.o
166         $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
167
168 prereq: config.status
169
170 dahdi_tool: CFLAGS+=$(NEWT_INCLUDE)
171 dahdi_tool: LIBS+=$(NEWT_LIB)
172
173 dahdi_speed: CFLAGS+=-O0
174
175 $(LTZ_A): $(LTZ_A_OBJS)
176         ar rcs $@ $^
177         ranlib $@
178
179 $(LTZ_SO): $(LTZ_SO_OBJS)
180         $(CC) $(CFLAGS) -shared -Wl,-soname,$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) -o $@ $^ -lm
181
182 dahdi_cfg: $(LTZ_A)
183 dahdi_cfg: LIBS+=-lm -lpthread
184 dahdi_pcap:
185         $(CC) $(CFLAGS) dahdi_pcap.c -lpcap -o $@ $<
186         
187
188 fxstest: $(LTZ_SO)
189 fxstest: LIBS+=-lm
190 fxotune: LIBS+=-lm
191
192 tonezones.txt: zonedata.c
193         perl -ne 'next unless (/\.(country|description) = *"([^"]*)/); \
194                 print (($$1 eq "country")? "* $$2\t":"$$2\n");' $<  \
195         >$@
196
197 %.asciidoc: %.sample
198         perl -n -e \
199                 'if (/^#($$|\s)(.*)/){ if (!$$in_doc){print "\n"}; $$in_doc=1; print "$$2\n" } else { if ($$in_doc){print "\n"}; $$in_doc=0; print "  $$_" }' \
200                 $< \
201         | perl -p -e 'if (/^  #?(\w+)=/ && ! exists $$cfgs{$$1}){my $$cfg = $$1; $$cfgs{$$cfg} = 1; s/^/\n[[cfg_$$cfg]]\n/}'  >$@
202
203 docs: $(GENERATED_DOCS)
204
205 genconf_parameters.sample: xpp/genconf_parameters
206         cp $< $@
207
208 README.html: README system.conf.asciidoc init.conf.asciidoc tonezones.txt \
209   UPGRADE.txt genconf_parameters.asciidoc assigned-spans.conf.asciidoc \
210   span-types.conf.asciidoc
211         $(ASCIIDOC) -n -a toc -a toclevels=4 $<
212
213 README.Astribank.html: xpp/README.Astribank
214         $(ASCIIDOC) -o $@ -n -a toc -a toclevels=4 $<
215
216 # on Debian: this requires the full groff, not just groff-base.
217 %.8.html: %.8
218         man -Thtml $^ >$@
219
220 htmlman: $(GROFF_HTML)
221
222 install: all install-programs
223         @echo "###################################################"
224         @echo "###"
225         @echo "### DAHDI tools installed successfully."
226         @echo "### If you have not done so before, install init scripts with:"
227         @echo "###"
228         @echo "###   make config"
229         @echo "###"
230         @echo "###################################################"
231
232 install-programs: install-utils install-libs
233
234 install-utils: utils install-utils-subdirs
235 ifneq (,$(BINS))
236         install -d $(DESTDIR)$(BIN_DIR)
237         install  $(BINS) $(DESTDIR)$(BIN_DIR)/
238         install -d $(DESTDIR)$(MAN_DIR)
239         install -m 644 $(MAN_PAGES) $(DESTDIR)$(MAN_DIR)/
240 endif
241 ifeq (,$(wildcard $(DESTDIR)$(CONFIG_FILE)))
242         $(INSTALL) -d $(DESTDIR)$(CONFIG_DIR)
243         $(INSTALL) -m 644 system.conf.sample $(DESTDIR)$(CONFIG_FILE)
244 endif
245         install -d $(DESTDIR)$(DATA_DIR)
246         tar cf - -C hotplug $(ASSIGNED_DATA_SCRIPTS) | tar xf - -C $(DESTDIR)$(DATA_DIR)/
247         install $(ASSIGNED_UTILS) $(DESTDIR)/$(BIN_DIR)/
248         install -m 644 $(ASSIGNED_CONF) $(DESTDIR)/$(CONFIG_DIR)/
249         install -d $(DESTDIR)$(BASH_COMP_DIR)
250         install -m 644 dahdi-bash-completion $(DESTDIR)$(BASH_COMP_FILE)
251
252 install-libs: libs
253         $(INSTALL) -d -m 755 $(DESTDIR)/$(LIB_DIR)
254         $(INSTALL) -m 755 $(LTZ_A) $(DESTDIR)$(LIB_DIR)/
255         $(INSTALL) -m 755 $(LTZ_SO) $(DESTDIR)$(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER)
256 ifeq (,$(DESTDIR))
257         if [ `id -u` = 0 ]; then \
258                 /sbin/ldconfig || : ;\
259         fi
260 endif
261         rm -f $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
262         $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
263                 $(DESTDIR)$(LIB_DIR)/$(LTZ_SO).$(LTZ_SO_MAJOR_VER)
264         $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
265                 $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
266         # Overwrite the 1.0 links out there.  dahdi-tools 2.0.0 installed
267         # 1.0 links but dahdi-tools changed them to 2.0 in order to explicitly
268         # break applications linked with zaptel.  But, this also meant that
269         # applications linked with libtonezone.so.1.0 broke when dahdi-tools
270         # 2.1.0 was installed.
271         $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
272                 $(DESTDIR)$(LIB_DIR)/$(LTZ_SO).1.0
273         $(LN) -sf $(LTZ_SO).$(LTZ_SO_MAJOR_VER).$(LTZ_SO_MINOR_VER) \
274                 $(DESTDIR)$(LIB_DIR)/$(LTZ_SO).1
275 ifneq (no,$(USE_SELINUX))
276   ifeq (,$(DESTDIR))
277         /sbin/restorecon -v $(DESTDIR)$(LIB_DIR)/$(LTZ_SO)
278   endif
279 endif
280         $(INSTALL) -d -m 755 $(DESTDIR)/$(INC_DIR)
281         $(INSTALL) -m 644 tonezone.h $(DESTDIR)$(INC_DIR)/
282
283 install-utils-subdirs:
284         @for dir in $(SUBDIRS_UTILS); do \
285                 $(MAKE) -C $$dir install; \
286         done
287
288 install-tests: tests
289 ifneq (,$(TEST_BINS))
290         install -d $(DESTDIR)$(BIN_DIR)
291         install  $(TEST_BINS) $(DESTDIR)$(BIN_DIR)/
292 endif
293
294 config:
295 ifneq (,$(COPY_INITD))
296         $(COPY_INITD)
297 endif
298 ifeq (,$(wildcard $(DESTDIR)$(RCCONF_FILE)))
299         $(INSTALL) -D -m 644 init.conf.sample $(DESTDIR)$(RCCONF_FILE)
300 endif
301 ifeq (,$(wildcard $(DESTDIR)$(MODULES_FILE)))
302         $(INSTALL) -D -m 644 modules.sample $(DESTDIR)$(MODULES_FILE)
303 endif
304 ifeq (,$(wildcard $(DESTDIR)$(GENCONF_FILE)))
305         $(INSTALL) -D -m 644 xpp/genconf_parameters $(DESTDIR)$(GENCONF_FILE)
306 endif
307 ifeq (,$(wildcard $(DESTDIR)$(MODPROBE_FILE)))
308         $(INSTALL) -D -m 644 modprobe.conf.sample $(DESTDIR)$(MODPROBE_FILE)
309 endif
310 ifeq (,$(wildcard $(DESTDIR)$(BLACKLIST_FILE)))
311         $(INSTALL) -D -m 644 blacklist.sample $(DESTDIR)$(BLACKLIST_FILE)
312 endif
313         $(INSTALL) -d $(DESTDIR)$(UDEVRULES_DIR)
314         $(INSTALL) -D -m 644 dahdi.rules $(DESTDIR)$(UDEVRULES_DIR)/
315 ifneq (,$(COPY_NETSCR))
316         $(COPY_NETSCR)
317 endif
318 ifneq (,$(ADD_INITD))
319         $(ADD_INITD)
320 endif
321         @echo "DAHDI has been configured."
322         @echo ""
323         @echo "List of detected DAHDI devices:"
324         @echo ""
325         @if [ `xpp/dahdi_hardware | tee /dev/stderr | wc -l` -eq 0 ]; then \
326                 echo "No hardware found"; \
327         else \
328                 echo ""; \
329                 echo "run 'dahdi_genconf modules' to load support for only " ;\
330                 echo "the DAHDI hardware installed in this system.  By "; \
331                 echo "default support for all DAHDI hardware is loaded at "; \
332                 echo "DAHDI start. "; \
333         fi
334
335 update:
336         @if [ -d .svn ]; then \
337                 echo "Updating from Subversion..." ; \
338                 svn update | tee update.out; \
339                 rm -f .version; \
340                 if [ `grep -c ^C update.out` -gt 0 ]; then \
341                         echo ; echo "The following files have conflicts:" ; \
342                         grep ^C update.out | cut -b4- ; \
343                 fi ; \
344                 rm -f update.out; \
345         else \
346                 echo "Not under version control";  \
347         fi
348
349 dist:
350         @./build_tools/make_dist "dahdi-tools" "$(TOOLSVERSION)"
351
352 clean:
353         rm -f $(BINS) $(TEST_BINS)
354         rm -f *.o dahdi_cfg tzdriver sethdlc
355         rm -f $(LTZ_SO) $(LTZ_A) *.lo
356         @for dir in $(SUBDIRS_UTILS_ALL); do \
357                 $(MAKE) -C $$dir clean; \
358         done
359         @for dir in $(SUBDIRS_UTILS); do \
360                 $(MAKE) -C $$dir clean; \
361         done
362         rm -f libtonezone*
363         rm -f fxotune
364         rm -f core
365         rm -f dahdi_cfg-shared fxstest
366         rm -rf $(GENERATED_DOCS) *.asciidoc tonezones.txt
367         rm -f dahdi_pcap
368
369 distclean: dist-clean
370
371 dist-clean: clean
372         rm -f makeopts
373         rm -f config.log config.status
374         rm -f .*.d
375
376 config.status: configure
377         @CFLAGS="" ./configure
378         @echo "****"
379         @echo "**** The configure script was just executed, so 'make' needs to be"
380         @echo "**** restarted."
381         @echo "****"
382         @exit 1
383
384 .PHONY: distclean dist-clean clean all install programs tests devel data config update install-programs install-libs install-utils-subdirs utils-subdirs prereq dist
385
386 FORCE:
387
388 ifneq ($(wildcard .*.d),)
389    include .*.d
390 endif