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