Add option to hide console connect messages
[asterisk/asterisk.git] / Makefile
1 #
2 # Asterisk -- A telephony toolkit for Linux.
3
4 # Top level Makefile
5 #
6 # Copyright (C) 1999-2006, Digium, Inc.
7 #
8 # Mark Spencer <markster@digium.com>
9 #
10 # This program is free software, distributed under the terms of
11 # the GNU General Public License
12 #
13
14 # All Makefiles use the following variables:
15 #
16 # ASTCFLAGS - compiler options
17 # ASTLDFLAGS - linker flags (not libraries)
18 # LIBS - additional libraries, at top-level for all links,
19 #      on a single object just for that object
20 # SOLINK - linker flags used only for creating shared objects (.so files),
21 #      used for all .so links
22 #
23 # Initial values for ASTCFLAGS and ASTLDFLAGS can be specified in the
24 # environment when running make, as follows:
25 #
26 #       $ ASTCFLAGS="-Werror" make ...
27 #
28 # note that this is different from
29 #
30 #       $ make ASTCFLAGS="-Werror" ...
31 #
32 # If you need to pass compiler/linker flags as 'make' variables, please use
33 #
34 #       $ make COPTS="..." LDOPTS="..." ...
35 #
36 #
37 # You can add the path of local module subdirs from the command line with
38 #   make LOCAL_MOD_SUBDIRS= ....
39
40 export ASTTOPDIR                # Top level dir, used in subdirs' Makefiles
41 export ASTERISKVERSION
42 export ASTERISKVERSIONNUM
43
44 #--- values used for default paths
45
46 # DESTDIR is the staging (or final) directory where files are copied
47 # during the install process. Define it before 'export', otherwise
48 # export will set it to the empty string making ?= fail.
49 # WARNING: do not put spaces or comments after the value.
50 DESTDIR?=$(INSTALL_PATH)
51 export DESTDIR
52
53 export INSTALL_PATH     # Additional prefix for the following paths
54 export ASTETCDIR                # Path for config files
55 export ASTVARRUNDIR
56 export MODULES_DIR
57 export ASTSPOOLDIR
58 export ASTVARLIBDIR
59 export ASTDATADIR
60 export ASTDBDIR
61 export ASTLOGDIR
62 export ASTLIBDIR
63 export ASTMANDIR
64 export ASTHEADERDIR
65 export ASTBINDIR
66 export ASTSBINDIR
67 export AGI_DIR
68 export ASTCONFPATH
69
70 export OSARCH                   # Operating system
71 export PROC                     # Processor type
72
73 export NOISY_BUILD              # Used in Makefile.rules
74 export MENUSELECT_CFLAGS        # Options selected in menuselect.
75 export AST_DEVMODE              # Set to "yes" for additional compiler
76                                 # and runtime checks
77
78 export SOLINK                   # linker flags for shared objects
79 export STATIC_BUILD             # Additional cflags, set to -static
80                                 # for static builds. Probably
81                                 # should go directly to ASTLDFLAGS
82
83 #--- paths to various commands
84 export CC
85 export CXX
86 export AR
87 export RANLIB
88 export HOST_CC
89 export INSTALL
90 export STRIP
91 export DOWNLOAD
92 export AWK
93 export GREP
94 export ID
95 export MD5
96
97 # even though we could use '-include makeopts' here, use a wildcard
98 # lookup anyway, so that make won't try to build makeopts if it doesn't
99 # exist (other rules will force it to be built if needed)
100 ifneq ($(wildcard makeopts),)
101   include makeopts
102 endif
103
104 # Some build systems, such as the one in openwrt, like to pass custom target
105 # CFLAGS and LDFLAGS in the COPTS and LDOPTS variables.
106 ASTCFLAGS+=$(COPTS)
107 ASTLDFLAGS+=$(LDOPTS)
108
109 # libxml2 cflags
110 ASTCFLAGS+=$(LIBXML2_INCLUDE)
111
112 #Uncomment this to see all build commands instead of 'quiet' output
113 #NOISY_BUILD=yes
114
115 empty:=
116 space:=$(empty) $(empty)
117 ASTTOPDIR:=$(subst $(space),\$(space),$(CURDIR))
118
119 # Overwite config files on "make samples"
120 OVERWRITE=y
121
122 # Include debug and macro symbols in the executables (-g) and profiling info (-pg)
123 DEBUG=-g3
124
125
126 # Define standard directories for various platforms
127 # These apply if they are not redefined in asterisk.conf 
128 ifeq ($(OSARCH),SunOS)
129   ASTETCDIR=/var/etc/asterisk
130   ASTLIBDIR=/opt/asterisk/lib
131   ASTVARLIBDIR=/var/opt/asterisk
132   ASTDBDIR=$(ASTVARLIBDIR)
133   ASTKEYDIR=$(ASTVARLIBDIR)
134   ASTSPOOLDIR=/var/spool/asterisk
135   ASTLOGDIR=/var/log/asterisk
136   ASTHEADERDIR=/opt/asterisk/include
137   ASTBINDIR=/opt/asterisk/bin
138   ASTSBINDIR=/opt/asterisk/sbin
139   ASTVARRUNDIR=/var/run/asterisk
140   ASTMANDIR=/opt/asterisk/man
141 else
142   ASTETCDIR=$(sysconfdir)/asterisk
143   ASTLIBDIR=$(libdir)/asterisk
144   ASTHEADERDIR=$(includedir)/asterisk
145   ASTBINDIR=$(bindir)
146   ASTSBINDIR=$(sbindir)
147   ASTSPOOLDIR=$(localstatedir)/spool/asterisk
148   ASTLOGDIR=$(localstatedir)/log/asterisk
149   ASTVARRUNDIR=$(localstatedir)/run
150   ASTMANDIR=$(mandir)
151 ifneq ($(findstring BSD,$(OSARCH)),)
152   ASTVARLIBDIR=$(prefix)/share/asterisk
153   ASTVARRUNDIR=$(localstatedir)/run/asterisk
154   ASTDBDIR=$(localstatedir)/db/asterisk
155 else
156   ASTVARLIBDIR=$(localstatedir)/lib/asterisk
157   ASTDBDIR=$(ASTVARLIBDIR)
158 endif
159   ASTKEYDIR=$(ASTVARLIBDIR)
160 endif
161 ifeq ($(ASTDATADIR),)
162   ASTDATADIR:=$(ASTVARLIBDIR)
163 endif
164
165 # Asterisk.conf is located in ASTETCDIR or by using the -C flag
166 # when starting Asterisk
167 ASTCONFPATH=$(ASTETCDIR)/asterisk.conf
168 MODULES_DIR=$(ASTLIBDIR)/modules
169 AGI_DIR=$(ASTDATADIR)/agi-bin
170
171 # If you use Apache, you may determine by a grep 'DocumentRoot' of your httpd.conf file
172 HTTP_DOCSDIR=/var/www/html
173 # Determine by a grep 'ScriptAlias' of your Apache httpd.conf file
174 HTTP_CGIDIR=/var/www/cgi-bin
175
176 # Uncomment this to use the older DSP routines
177 #ASTCFLAGS+=-DOLD_DSP_ROUTINES
178
179 # If the file .asterisk.makeopts is present in your home directory, you can
180 # include all of your favorite menuselect options so that every time you download
181 # a new version of Asterisk, you don't have to run menuselect to set them. 
182 # The file /etc/asterisk.makeopts will also be included but can be overridden
183 # by the file in your home directory.
184
185 GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
186 USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)
187
188 MOD_SUBDIR_CFLAGS=-I$(ASTTOPDIR)/include
189 OTHER_SUBDIR_CFLAGS=-I$(ASTTOPDIR)/include
190
191 # Create OPTIONS variable, but probably we can assign directly to ASTCFLAGS
192 OPTIONS=
193
194 ifeq ($(OSARCH),linux-gnu)
195   ifeq ($(PROC),x86_64)
196     # You must have GCC 3.4 to use k8, otherwise use athlon
197     PROC=k8
198     #PROC=athlon
199   endif
200
201   ifeq ($(PROC),sparc64)
202     #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
203     #This works for even old (2.96) versions of gcc and provides a small boost either way.
204     #A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn't support it.
205     #So we go lowest common available by gcc and go a step down, still a step up from
206     #the default as we now have a better instruction set to work with. - Belgarath
207     PROC=ultrasparc
208     OPTIONS+=$(shell if $(CC) -mtune=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mtune=$(PROC)"; fi)
209     OPTIONS+=$(shell if $(CC) -mcpu=v8 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mcpu=v8"; fi)
210     OPTIONS+=-fomit-frame-pointer
211   endif
212
213   ifeq ($(PROC),arm)
214     # The Cirrus logic is the only heavily shipping arm processor with a real floating point unit
215     ifeq ($(SUB_PROC),maverick)
216       OPTIONS+=-fsigned-char -mcpu=ep9312
217     else
218       ifeq ($(SUB_PROC),xscale)
219         OPTIONS+=-fsigned-char -mcpu=xscale
220       else
221         OPTIONS+=-fsigned-char 
222       endif
223     endif
224   endif
225 endif
226
227 ifeq ($(findstring -save-temps,$(ASTCFLAGS)),)
228   ifeq ($(findstring -pipe,$(ASTCFLAGS)),)
229     ASTCFLAGS+=-pipe
230   endif
231 endif
232
233 ifeq ($(findstring -Wall,$(ASTCFLAGS)),)
234   ASTCFLAGS+=-Wall
235 endif
236
237 ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG)
238
239 ifeq ($(AST_DEVMODE),yes)
240   ASTCFLAGS+=-Werror
241   ASTCFLAGS+=-Wunused
242   ASTCFLAGS+=$(AST_DECLARATION_AFTER_STATEMENT)
243   ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
244   ASTCFLAGS+=-Wundef 
245   ASTCFLAGS+=-Wmissing-format-attribute
246   ASTCFLAGS+=-Wformat=2
247 endif
248
249 ifneq ($(findstring BSD,$(OSARCH)),)
250   ASTCFLAGS+=-I/usr/local/include
251   ASTLDFLAGS+=-L/usr/local/lib
252 endif
253
254 ifeq ($(findstring -march,$(ASTCFLAGS)),)
255   ifneq ($(PROC),ultrasparc)
256     ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
257   endif
258 endif
259
260 ifeq ($(PROC),ppc)
261   ASTCFLAGS+=-fsigned-char
262 endif
263
264 ifeq ($(OSARCH),FreeBSD)
265   # -V is understood by BSD Make, not by GNU make.
266   BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
267   ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
268 endif
269
270 ifeq ($(OSARCH),NetBSD)
271   ASTCFLAGS+=-pthread -I/usr/pkg/include
272 endif
273
274 ifeq ($(OSARCH),OpenBSD)
275   ASTCFLAGS+=-pthread -ftrampolines
276 endif
277
278 ifeq ($(OSARCH),SunOS)
279   ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2
280 endif
281
282 ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) build_tools/make_version .)
283
284 ifneq ($(wildcard .version),)
285   ASTERISKVERSIONNUM:=$(shell $(AWK) -F. '{printf "%01d%02d%02d", $$1, $$2, $$3}' .version)
286 endif
287
288 ifneq ($(wildcard .svn),)
289   ASTERISKVERSIONNUM:=999999
290 endif
291
292 # XXX MALLOC_DEBUG is probably unused, Makefile.moddir_rules adds the
293 #       value directly to ASTCFLAGS
294 ASTCFLAGS+=$(MALLOC_DEBUG)$(OPTIONS)
295
296 MOD_SUBDIRS:=channels pbx apps codecs formats cdr funcs tests main res $(LOCAL_MOD_SUBDIRS)
297 OTHER_SUBDIRS:=utils agi
298 SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
299 SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
300 SUBDIRS_CLEAN:=$(SUBDIRS:%=%-clean)
301 SUBDIRS_DIST_CLEAN:=$(SUBDIRS:%=%-dist-clean)
302 SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
303 MOD_SUBDIRS_EMBED_LDSCRIPT:=$(MOD_SUBDIRS:%=%-embed-ldscript)
304 MOD_SUBDIRS_EMBED_LDFLAGS:=$(MOD_SUBDIRS:%=%-embed-ldflags)
305 MOD_SUBDIRS_EMBED_LIBS:=$(MOD_SUBDIRS:%=%-embed-libs)
306 MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree)
307
308 ifneq ($(findstring darwin,$(OSARCH)),)
309   ASTCFLAGS+=-D__Darwin__ -fnested-functions
310   SOLINK=-dynamic -bundle -undefined suppress -force_flat_namespace
311 else
312 # These are used for all but Darwin
313   SOLINK=-shared
314   ifneq ($(findstring BSD,$(OSARCH)),)
315     LDFLAGS+=-L/usr/local/lib
316   endif
317 endif
318
319 ifeq ($(OSARCH),SunOS)
320   SOLINK=-shared -fpic -L/usr/local/ssl/lib -lrt
321 endif
322
323 ifeq ($(OSARCH),OpenBSD)
324   SOLINK=-shared -fpic
325 endif
326
327 # comment to print directories during submakes
328 #PRINT_DIR=yes
329
330 SILENTMAKE:=$(MAKE) --quiet --no-print-directory
331 ifneq ($(PRINT_DIR)$(NOISY_BUILD),)
332 SUBMAKE:=$(MAKE)
333 else
334 SUBMAKE:=$(MAKE) --quiet --no-print-directory
335 endif
336
337 # This is used when generating the doxygen documentation
338 ifneq ($(DOT),:)
339   HAVEDOT=yes
340 else
341   HAVEDOT=no
342 endif
343
344 # $(MAKE) is printed in several places, and we want it to be a
345 # fixed size string. Define a variable whose name has also the
346 # same size, so we can easily align text.
347 ifeq ($(MAKE), gmake)
348         mK="gmake"
349 else
350         mK=" make"
351 endif
352
353 all: _all
354         @echo " +--------- Asterisk Build Complete ---------+"  
355         @echo " + Asterisk has successfully been built, and +"  
356         @echo " + can be installed by running:              +"
357         @echo " +                                           +"
358         @echo " +               $(mK) install               +"  
359         @echo " +-------------------------------------------+"  
360
361 _all: cleantest makeopts $(SUBDIRS) doc/core-en_US.xml
362
363 makeopts: configure
364         @echo "****"
365         @echo "**** The configure script must be executed before running '$(MAKE)'." 
366         @echo "****               Please run \"./configure\"."
367         @echo "****"
368         @exit 1
369
370 menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts
371         menuselect/menuselect --check-deps menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
372
373 $(MOD_SUBDIRS_EMBED_LDSCRIPT):
374         @echo "EMBED_LDSCRIPTS+="`$(SILENTMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
375
376 $(MOD_SUBDIRS_EMBED_LDFLAGS):
377         @echo "EMBED_LDFLAGS+="`$(SILENTMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
378
379 $(MOD_SUBDIRS_EMBED_LIBS):
380         @echo "EMBED_LIBS+="`$(SILENTMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
381
382 $(MOD_SUBDIRS_MENUSELECT_TREE):
383         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
384         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
385
386 makeopts.embed_rules: menuselect.makeopts
387         @echo "Generating embedded module rules ..."
388         @rm -f $@
389         @$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
390         @$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDFLAGS)
391         @$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LIBS)
392
393 $(SUBDIRS): main/version.c include/asterisk/version.h include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
394
395 ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
396     # Non-windows:
397     # ensure that all module subdirectories are processed before 'main' during
398     # a parallel build, since if there are modules selected to be embedded the
399     # directories containing them must be completed before the main Asterisk
400     # binary can be built
401 main: $(filter-out main,$(MOD_SUBDIRS))
402 else
403     # Windows: we need to build main (i.e. the asterisk dll) first,
404     # followed by res, followed by the other directories, because
405     # dll symbols must be resolved during linking and not at runtime.
406 D1:= $(filter-out main,$(MOD_SUBDIRS))
407 D1:= $(filter-out res,$(D1))
408
409 $(D1): res
410 res:    main
411 endif
412
413 $(MOD_SUBDIRS):
414         @ASTCFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all
415
416 $(OTHER_SUBDIRS):
417         @ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all
418
419 defaults.h: makeopts
420         @build_tools/make_defaults_h > $@.tmp
421         @cmp -s $@.tmp $@ || mv $@.tmp $@
422         @rm -f $@.tmp
423
424 main/version.c: FORCE
425         @build_tools/make_version_c > $@.tmp
426         @cmp -s $@.tmp $@ || mv $@.tmp $@
427         @rm -f $@.tmp
428
429 include/asterisk/version.h: FORCE
430         @build_tools/make_version_h > $@.tmp
431         @cmp -s $@.tmp $@ || mv $@.tmp $@
432         @rm -f $@.tmp
433
434 include/asterisk/buildopts.h: menuselect.makeopts
435         @build_tools/make_buildopts_h > $@.tmp
436         @cmp -s $@.tmp $@ || mv $@.tmp $@
437         @rm -f $@.tmp
438
439 include/asterisk/build.h:
440         @build_tools/make_build_h > $@.tmp
441         @cmp -s $@.tmp $@ || mv $@.tmp $@
442         @rm -f $@.tmp
443
444 $(SUBDIRS_CLEAN):
445         @$(SUBMAKE) -C $(@:-clean=) clean
446
447 $(SUBDIRS_DIST_CLEAN):
448         @$(SUBMAKE) -C $(@:-dist-clean=) dist-clean
449
450 clean: $(SUBDIRS_CLEAN) _clean
451
452 _clean:
453         rm -f defaults.h
454         rm -f include/asterisk/build.h
455         rm -f main/version.c
456         rm -f include/asterisk/version.h
457         @$(MAKE) -C menuselect clean
458         cp -f .cleancount .lastclean
459
460 dist-clean: distclean
461
462 distclean: $(SUBDIRS_DIST_CLEAN) _clean
463         @$(MAKE) -C menuselect dist-clean
464         @$(MAKE) -C sounds dist-clean
465         rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
466         rm -f makeopts.embed_rules
467         rm -f config.log config.status config.cache
468         rm -rf autom4te.cache
469         rm -f include/asterisk/autoconfig.h
470         rm -f include/asterisk/buildopts.h
471         rm -rf doc/api
472         rm -f build_tools/menuselect-deps
473
474 datafiles: _all
475         if [ x`$(ID) -un` = xroot ]; then CFLAGS="$(ASTCFLAGS)" sh build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; fi
476 # Should static HTTP be installed during make samples or even with its own target ala
477 # webvoicemail?  There are portions here that *could* be customized but might also be
478 # improved a lot.  I'll put it here for now.
479         mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http
480         for x in static-http/*; do \
481                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
482         done
483         if [ -d doc/tex/asterisk ] ; then \
484                         mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \
485                         for n in doc/tex/asterisk/* ; do \
486                                 $(INSTALL) -m 644 $$n $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \
487                         done \
488         fi
489         mkdir -p $(DESTDIR)$(ASTDATADIR)/images
490         for x in images/*.jpg; do \
491                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \
492         done
493         mkdir -p $(DESTDIR)$(AGI_DIR)
494         $(MAKE) -C sounds install
495
496 doc/core-en_US.xml: $(foreach dir,$(MOD_SUBDIRS),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) 
497         @echo -n "Building Documentation For: "
498         @echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
499         @echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
500         @echo "<docs>" >> $@
501         @for x in $(MOD_SUBDIRS); do \
502                 echo -n "$$x " ; \
503                 for i in $$x/*.c; do \
504                         $(AWK) -f build_tools/get_documentation $$i >> $@ ; \
505                 done ; \
506         done
507         @echo
508         @echo "</docs>" >> $@
509
510 validate-docs: doc/core-en_US.xml
511 ifeq ($(XMLSTARLET),:)
512         @echo "---------------------------------------------------------------"
513         @echo "--- Please install xmlstarlet to validate the documentation ---"
514         @echo "---------------------------------------------------------------"
515 else
516         $(XMLSTARLET) val -d doc/appdocsxml.dtd $<
517 endif
518
519 update: 
520         @if [ -d .svn ]; then \
521                 echo "Updating from Subversion..." ; \
522                 fromrev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \
523                 svn update | tee update.out; \
524                 torev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \
525                 echo "`date`  Updated from revision $${fromrev} to $${torev}." >> update.log; \
526                 rm -f .version; \
527                 if [ `grep -c ^C update.out` -gt 0 ]; then \
528                         echo ; echo "The following files have conflicts:" ; \
529                         grep ^C update.out | cut -b4- ; \
530                 fi ; \
531                 rm -f update.out; \
532         else \
533                 echo "Not under version control";  \
534         fi
535
536 NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h))
537 OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h)))
538
539 installdirs:
540         mkdir -p $(DESTDIR)$(MODULES_DIR)
541         mkdir -p $(DESTDIR)$(ASTSBINDIR)
542         mkdir -p $(DESTDIR)$(ASTETCDIR)
543         mkdir -p $(DESTDIR)$(ASTBINDIR)
544         mkdir -p $(DESTDIR)$(ASTVARRUNDIR)
545         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail
546         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate
547         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system
548         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp
549         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme
550         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor
551
552 bininstall: _all installdirs $(SUBDIRS_INSTALL)
553         $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/
554         $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
555         $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
556         $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/
557         if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \
558                 cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\
559                 chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\
560         fi
561         $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR)
562         $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir)
563         $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR)
564         if [ -n "$(OLDHEADERS)" ]; then \
565                 rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
566         fi
567         mkdir -p $(DESTDIR)$(ASTDATADIR)/documentation
568         mkdir -p $(DESTDIR)$(ASTDATADIR)/documentation/thirdparty
569         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv
570         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom
571         mkdir -p $(DESTDIR)$(ASTDATADIR)/keys
572         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware
573         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax
574         mkdir -p $(DESTDIR)$(ASTMANDIR)/man8
575         $(INSTALL) -m 644 doc/core-*.xml $(DESTDIR)$(ASTDATADIR)/documentation
576         $(INSTALL) -m 644 doc/appdocsxml.dtd $(DESTDIR)$(ASTVARLIBDIR)/documentation
577         $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys
578         $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys
579         $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
580         $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
581         $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
582         $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
583         if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
584                 $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
585         fi
586
587 $(SUBDIRS_INSTALL):
588         @DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
589
590 NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
591 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
592
593 oldmodcheck:
594         @if [ -n "$(OLDMODS)" ]; then \
595                 echo " WARNING WARNING WARNING" ;\
596                 echo "" ;\
597                 echo " Your Asterisk modules directory, located at" ;\
598                 echo " $(DESTDIR)$(MODULES_DIR)" ;\
599                 echo " contains modules that were not installed by this " ;\
600                 echo " version of Asterisk. Please ensure that these" ;\
601                 echo " modules are compatible with this version before" ;\
602                 echo " attempting to run Asterisk." ;\
603                 echo "" ;\
604                 for f in $(OLDMODS); do \
605                         echo "    $$f" ;\
606                 done ;\
607                 echo "" ;\
608                 echo " WARNING WARNING WARNING" ;\
609         fi
610
611 badshell:
612 ifneq ($(findstring ~,$(DESTDIR)),)
613         @echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
614         @echo "Try replacing ~ with \$$HOME, as in \"make install DESTDIR=\$$HOME/path\"."
615         @exit 1
616 endif
617
618 install: badshell datafiles bininstall
619         @if [ -x /usr/sbin/asterisk-post-install ]; then \
620                 /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
621         fi
622         @echo " +---- Asterisk Installation Complete -------+"  
623         @echo " +                                           +"
624         @echo " +    YOU MUST READ THE SECURITY DOCUMENT    +"
625         @echo " +                                           +"
626         @echo " + Asterisk has successfully been installed. +"  
627         @echo " + If you would like to install the sample   +"  
628         @echo " + configuration files (overwriting any      +"
629         @echo " + existing config files), run:              +"  
630         @echo " +                                           +"
631         @echo " +               $(mK) samples               +"
632         @echo " +                                           +"
633         @echo " +-----------------  or ---------------------+"
634         @echo " +                                           +"
635         @echo " + You can go ahead and install the asterisk +"
636         @echo " + program documentation now or later run:   +"
637         @echo " +                                           +"
638         @echo " +              $(mK) progdocs               +"
639         @echo " +                                           +"
640         @echo " + **Note** This requires that you have      +"
641         @echo " + doxygen installed on your local system    +"
642         @echo " +-------------------------------------------+"
643         @$(MAKE) -s oldmodcheck
644
645 isntall: install
646
647 upgrade: bininstall
648
649 # XXX why *.adsi is installed first ?
650 adsi:
651         @echo Installing adsi config files...
652         @mkdir -p $(DESTDIR)$(ASTETCDIR)
653         @for x in configs/*.adsi; do \
654                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
655                 if [ -f $${dst} ] ; then \
656                         echo "Overwriting $$x" ; \
657                 else \
658                         echo "Installing $$x" ; \
659                 fi ; \
660                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \
661         done
662
663 samples: adsi
664         @echo Installing other config files...
665         @mkdir -p $(DESTDIR)$(ASTETCDIR)
666         @for x in configs/*.sample; do \
667                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ;        \
668                 if [ -f $${dst} ]; then \
669                         if [ "$(OVERWRITE)" = "y" ]; then \
670                                 if cmp -s $${dst} $$x ; then \
671                                         echo "Config file $$x is unchanged"; \
672                                         continue; \
673                                 fi ; \
674                                 mv -f $${dst} $${dst}.old ; \
675                         else \
676                                 echo "Skipping config file $$x"; \
677                                 continue; \
678                         fi ;\
679                 fi ; \
680                 echo "Installing file $$x"; \
681                 $(INSTALL) -m 644 $$x $${dst} ;\
682         done
683         @if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \
684                 echo "Creating asterisk.conf"; \
685                 ( \
686                 echo "[directories](!) ; remove the (!) to enable this" ; \
687                 echo "astetcdir => $(ASTETCDIR)" ; \
688                 echo "astmoddir => $(MODULES_DIR)" ; \
689                 echo "astvarlibdir => $(ASTVARLIBDIR)" ; \
690                 echo "astdbdir => $(ASTDBDIR)" ; \
691                 echo "astkeydir => $(ASTKEYDIR)" ; \
692                 echo "astdatadir => $(ASTDATADIR)" ; \
693                 echo "astagidir => $(AGI_DIR)" ; \
694                 echo "astspooldir => $(ASTSPOOLDIR)" ; \
695                 echo "astrundir => $(ASTVARRUNDIR)" ; \
696                 echo "astlogdir => $(ASTLOGDIR)" ; \
697                 echo "" ; \
698                 echo "[options]" ; \
699                 echo ";verbose = 3" ; \
700                 echo ";debug = 3" ; \
701                 echo ";alwaysfork = yes ; same as -F at startup" ; \
702                 echo ";nofork = yes ; same as -f at startup" ; \
703                 echo ";quiet = yes ; same as -q at startup" ; \
704                 echo ";timestamp = yes ; same as -T at startup" ; \
705                 echo ";execincludes = yes ; support #exec in config files" ; \
706                 echo ";console = yes ; Run as console (same as -c at startup)" ; \
707                 echo ";highpriority = yes ; Run realtime priority (same as -p at startup)" ; \
708                 echo ";initcrypto = yes ; Initialize crypto keys (same as -i at startup)" ; \
709                 echo ";nocolor = yes ; Disable console colors" ; \
710                 echo ";dontwarn = yes ; Disable some warnings" ; \
711                 echo ";dumpcore = yes ; Dump core on crash (same as -g at startup)" ; \
712                 echo ";languageprefix = yes ; Use the new sound prefix path syntax" ; \
713                 echo ";internal_timing = yes" ; \
714                 echo ";systemname = my_system_name ; prefix uniqueid with a system name for global uniqueness issues" ; \
715                 echo ";autosystemname = yes ; automatically set systemname to hostname - uses 'localhost' on failure, or systemname if set" ; \
716                 echo ";maxcalls = 10 ; Maximum amount of calls allowed" ; \
717                 echo ";maxload = 0.9 ; Asterisk stops accepting new calls if the load average exceed this limit" ; \
718                 echo ";maxfiles = 1000 ; Maximum amount of openfiles" ; \
719                 echo ";minmemfree = 1 ; in MBs, Asterisk stops accepting new calls if the amount of free memory falls below this watermark" ; \
720                 echo ";cache_record_files = yes ; Cache recorded sound files to another directory during recording" ; \
721                 echo ";record_cache_dir = /tmp ; Specify cache directory (used in cnjunction with cache_record_files)" ; \
722                 echo ";transmit_silence_during_record = yes ; Transmit SLINEAR silence while a channel is being recorded" ; \
723                 echo ";transmit_silence = yes ; Transmit SLINEAR silence while a channel is being recorded or DTMF is being generated" ; \
724                 echo ";transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of directly" ; \
725                 echo ";runuser = asterisk ; The user to run as" ; \
726                 echo ";rungroup = asterisk ; The group to run as" ; \
727                 echo ";lightbackground = yes ; If your terminal is set for a light-colored background" ; \
728                 echo "documentation_language = en_US ; Set the Language you want Documentation displayed in. Value is in the same format as locale names" ; \
729                 echo ";hideconnect = yes ; Hide messages displayed when a remote console connects and disconnects" ; \
730                 echo "" ; \
731                 echo "; Changing the following lines may compromise your security." ; \
732                 echo ";[files]" ; \
733                 echo ";astctlpermissions = 0660" ; \
734                 echo ";astctlowner = root" ; \
735                 echo ";astctlgroup = apache" ; \
736                 echo ";astctl = asterisk.ctl" ; \
737                 echo "" ; \
738                 echo "[compat]" ; \
739                 echo "pbx_realtime=1.6" ; \
740                 echo "res_agi=1.6" ; \
741                 echo "app_set=1.6" ; \
742                 ) > $(DESTDIR)$(ASTCONFPATH) ; \
743         else \
744                 echo "Skipping asterisk.conf creation"; \
745         fi
746         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
747         build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
748         @mkdir -p $(DESTDIR)$(ASTDATADIR)/phoneprov
749         @for x in phoneprov/*; do \
750                 dst="$(DESTDIR)$(ASTDATADIR)/$$x" ;     \
751                 if [ -f $${dst} ]; then \
752                         if [ "$(OVERWRITE)" = "y" ]; then \
753                                 if cmp -s $${dst} $$x ; then \
754                                         echo "Config file $$x is unchanged"; \
755                                         continue; \
756                                 fi ; \
757                                 mv -f $${dst} $${dst}.old ; \
758                         else \
759                                 echo "Skipping config file $$x"; \
760                                 continue; \
761                         fi ;\
762                 fi ; \
763                 echo "Installing file $$x"; \
764                 $(INSTALL) -m 644 $$x $${dst} ;\
765         done
766
767 webvmail:
768         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
769         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
770         $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
771         mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
772         for x in images/*.gif; do \
773                 $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
774         done
775         @echo " +--------- Asterisk Web Voicemail ----------+"  
776         @echo " +                                           +"
777         @echo " + Asterisk Web Voicemail is installed in    +"
778         @echo " + your cgi-bin directory:                   +"
779         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
780         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
781         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
782         @echo " +                                           +"
783         @echo " + Other static items have been stored in:   +"
784         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
785         @echo " +                                           +"
786         @echo " + If these paths do not match your httpd    +"
787         @echo " + installation, correct the definitions     +"
788         @echo " + in your Makefile of HTTP_CGIDIR and       +"
789         @echo " + HTTP_DOCSDIR                              +"
790         @echo " +                                           +"
791         @echo " +-------------------------------------------+"  
792
793 progdocs:
794         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
795         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
796
797 install-logrotate:
798         if [ ! -d $(ASTETCDIR)/../logrotate.d ]; then \
799                 mkdir $(ASTETCDIR)/../logrotate.d ; \
800         fi
801         sed 's#__LOGDIR__#$(ASTLOGDIR)#g' < contrib/scripts/asterisk.logrotate | sed 's#__SBINDIR__#$(ASTSBINDIR)#g' > contrib/scripts/asterisk.logrotate.tmp
802         install -m 0644 contrib/scripts/asterisk.logrotate.tmp $(ASTETCDIR)/../logrotate.d/asterisk
803         rm -f contrib/scripts/asterisk.logrotate.tmp
804
805 config:
806         @if [ "${OSARCH}" = "linux-gnu" ]; then \
807                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
808                         $(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
809                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
810                 elif [ -f /etc/debian_version ]; then \
811                         $(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk $(DESTDIR)/etc/init.d/asterisk; \
812                         if [ -z "$(DESTDIR)" ]; then /usr/sbin/update-rc.d asterisk start 50 2 3 4 5 . stop 91 2 3 4 5 .; fi; \
813                 elif [ -f /etc/gentoo-release ]; then \
814                         $(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk $(DESTDIR)/etc/init.d/asterisk; \
815                         if [ -z "$(DESTDIR)" ]; then /sbin/rc-update add asterisk default; fi; \
816                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ]; then \
817                         $(INSTALL) -m 755 contrib/init.d/rc.mandriva.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
818                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
819                 elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
820                         $(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \
821                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
822                 elif [ -f /etc/arch-release -o -f /etc/arch-release ]; then \
823                         $(INSTALL) -m 755 contrib/init.d/rc.archlinux.asterisk $(DESTDIR)/etc/rc.d/asterisk; \
824                 elif [ -f /etc/slackware-version ]; then \
825                         echo "Slackware is not currently supported, although an init script does exist for it." \
826                 else \
827                         echo "We could not install init scripts for your distribution."; \
828                 fi \
829         else \
830                 echo "We could not install init scripts for your operating system."; \
831         fi
832
833 sounds:
834         $(MAKE) -C sounds all
835
836 # If the cleancount has been changed, force a make clean.
837 # .cleancount is the global clean count, and .lastclean is the 
838 # last clean count we had
839
840 cleantest:
841         @cmp -s .cleancount .lastclean || $(MAKE) clean
842
843 $(SUBDIRS_UNINSTALL):
844         @$(SUBMAKE) -C $(@:-uninstall=) uninstall
845
846 _uninstall: $(SUBDIRS_UNINSTALL)
847         rm -f $(DESTDIR)$(MODULES_DIR)/*
848         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
849         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
850         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
851         rm -rf $(DESTDIR)$(ASTHEADERDIR)
852         rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
853         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
854         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
855         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
856         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
857         $(MAKE) -C sounds uninstall
858
859 uninstall: _uninstall
860         @echo " +--------- Asterisk Uninstall Complete -----+"  
861         @echo " + Asterisk binaries, sounds, man pages,     +"  
862         @echo " + headers, modules, and firmware builds,    +"  
863         @echo " + have all been uninstalled.                +"  
864         @echo " +                                           +"
865         @echo " + To remove ALL traces of Asterisk,         +"
866         @echo " + including configuration, spool            +"
867         @echo " + directories, and logs, run the following  +"
868         @echo " + command:                                  +"
869         @echo " +                                           +"
870         @echo " +            $(mK) uninstall-all            +"  
871         @echo " +-------------------------------------------+"  
872
873 uninstall-all: _uninstall
874         rm -rf $(DESTDIR)$(ASTLIBDIR)
875         rm -rf $(DESTDIR)$(ASTVARLIBDIR)
876         rm -rf $(DESTDIR)$(ASTDATADIR)
877         rm -rf $(DESTDIR)$(ASTSPOOLDIR)
878         rm -rf $(DESTDIR)$(ASTETCDIR)
879         rm -rf $(DESTDIR)$(ASTLOGDIR)
880
881 menuconfig: menuselect
882
883 cmenuconfig: cmenuselect
884
885 gmenuconfig: gmenuselect
886
887 nmenuconfig: nmenuselect
888
889 menuselect: menuselect/cmenuselect menuselect/nmenuselect menuselect/gmenuselect
890         @if [ -x menuselect/nmenuselect ]; then \
891                 $(MAKE) nmenuselect; \
892         elif [ -x menuselect/cmenuselect ]; then \
893                 $(MAKE) cmenuselect; \
894         elif [ -x menuselect/gmenuselect ]; then \
895                 $(MAKE) gmenuselect; \
896         else \
897                 echo "No menuselect user interface found. Install ncurses,"; \
898                 echo "newt or GTK libraries to build one and re-rerun"; \
899                 echo "'make menuselect'."; \
900         fi
901
902 cmenuselect: menuselect/cmenuselect menuselect-tree
903         -@menuselect/cmenuselect menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
904
905 gmenuselect: menuselect/gmenuselect menuselect-tree
906         -@menuselect/gmenuselect menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
907
908 nmenuselect: menuselect/nmenuselect menuselect-tree
909         -@menuselect/nmenuselect menuselect.makeopts $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
910
911 # options for make in menuselect/
912 MAKE_MENUSELECT=CC="$(HOST_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
913
914 menuselect/menuselect: menuselect/makeopts
915         $(MAKE_MENUSELECT) menuselect
916
917 menuselect/cmenuselect: menuselect/makeopts
918         $(MAKE_MENUSELECT) cmenuselect
919
920 menuselect/gmenuselect: menuselect/makeopts
921         $(MAKE_MENUSELECT) gmenuselect
922
923 menuselect/nmenuselect: menuselect/makeopts
924         $(MAKE_MENUSELECT) nmenuselect
925
926 menuselect/makeopts: makeopts
927         $(MAKE_MENUSELECT) makeopts
928
929 menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml build_tools/embed_modules.xml configure
930         @echo "Generating input for menuselect ..."
931         @echo "<?xml version=\"1.0\"?>" > $@
932         @echo >> $@
933         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
934         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
935         @cat build_tools/cflags.xml >> $@
936         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
937         @if [ "${AST_DEVMODE}" = "yes" ]; then \
938                 cat build_tools/cflags-devmode.xml >> $@; \
939         fi
940         @cat build_tools/embed_modules.xml >> $@
941         @cat sounds/sounds.xml >> $@
942         @echo "</menu>" >> $@
943
944 pdf: asterisk.pdf
945 asterisk.pdf:
946         $(MAKE) -C doc/tex asterisk.pdf
947
948 .PHONY: menuselect menuselect.makeopts main sounds clean dist-clean distclean all prereqs cleantest uninstall _uninstall uninstall-all pdf dont-optimize $(SUBDIRS_INSTALL) $(SUBDIRS_DIST_CLEAN) $(SUBDIRS_CLEAN) $(SUBDIRS_UNINSTALL) $(SUBDIRS) $(MOD_SUBDIRS_EMBED_LDSCRIPT) $(MOD_SUBDIRS_EMBED_LDFLAGS) $(MOD_SUBDIRS_EMBED_LIBS) badshell installdirs validate-docs _clean
949
950 FORCE:
951