incorporates r159808 from branches/1.4:
[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 "" ; \
730                 echo "; Changing the following lines may compromise your security." ; \
731                 echo ";[files]" ; \
732                 echo ";astctlpermissions = 0660" ; \
733                 echo ";astctlowner = root" ; \
734                 echo ";astctlgroup = apache" ; \
735                 echo ";astctl = asterisk.ctl" ; \
736                 echo "" ; \
737                 echo "[compat]" ; \
738                 echo "pbx_realtime=1.6" ; \
739                 echo "res_agi=1.6" ; \
740                 echo "app_set=1.6" ; \
741                 ) > $(DESTDIR)$(ASTCONFPATH) ; \
742         else \
743                 echo "Skipping asterisk.conf creation"; \
744         fi
745         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
746         build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
747         @mkdir -p $(DESTDIR)$(ASTDATADIR)/phoneprov
748         @for x in phoneprov/*; do \
749                 dst="$(DESTDIR)$(ASTDATADIR)/$$x" ;     \
750                 if [ -f $${dst} ]; then \
751                         if [ "$(OVERWRITE)" = "y" ]; then \
752                                 if cmp -s $${dst} $$x ; then \
753                                         echo "Config file $$x is unchanged"; \
754                                         continue; \
755                                 fi ; \
756                                 mv -f $${dst} $${dst}.old ; \
757                         else \
758                                 echo "Skipping config file $$x"; \
759                                 continue; \
760                         fi ;\
761                 fi ; \
762                 echo "Installing file $$x"; \
763                 $(INSTALL) -m 644 $$x $${dst} ;\
764         done
765
766 webvmail:
767         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
768         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
769         $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
770         mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
771         for x in images/*.gif; do \
772                 $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
773         done
774         @echo " +--------- Asterisk Web Voicemail ----------+"  
775         @echo " +                                           +"
776         @echo " + Asterisk Web Voicemail is installed in    +"
777         @echo " + your cgi-bin directory:                   +"
778         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
779         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
780         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
781         @echo " +                                           +"
782         @echo " + Other static items have been stored in:   +"
783         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
784         @echo " +                                           +"
785         @echo " + If these paths do not match your httpd    +"
786         @echo " + installation, correct the definitions     +"
787         @echo " + in your Makefile of HTTP_CGIDIR and       +"
788         @echo " + HTTP_DOCSDIR                              +"
789         @echo " +                                           +"
790         @echo " +-------------------------------------------+"  
791
792 progdocs:
793         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
794         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
795
796 install-logrotate:
797         if [ ! -d $(ASTETCDIR)/../logrotate.d ]; then \
798                 mkdir $(ASTETCDIR)/../logrotate.d ; \
799         fi
800         sed 's#__LOGDIR__#$(ASTLOGDIR)#g' < contrib/scripts/asterisk.logrotate | sed 's#__SBINDIR__#$(ASTSBINDIR)#g' > contrib/scripts/asterisk.logrotate.tmp
801         install -m 0644 contrib/scripts/asterisk.logrotate.tmp $(ASTETCDIR)/../logrotate.d/asterisk
802         rm -f contrib/scripts/asterisk.logrotate.tmp
803
804 config:
805         @if [ "${OSARCH}" = "linux-gnu" ]; then \
806                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
807                         $(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
808                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
809                 elif [ -f /etc/debian_version ]; then \
810                         $(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk $(DESTDIR)/etc/init.d/asterisk; \
811                         if [ -z "$(DESTDIR)" ]; then /usr/sbin/update-rc.d asterisk start 50 2 3 4 5 . stop 91 2 3 4 5 .; fi; \
812                 elif [ -f /etc/gentoo-release ]; then \
813                         $(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk $(DESTDIR)/etc/init.d/asterisk; \
814                         if [ -z "$(DESTDIR)" ]; then /sbin/rc-update add asterisk default; fi; \
815                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ]; then \
816                         $(INSTALL) -m 755 contrib/init.d/rc.mandriva.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
817                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
818                 elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
819                         $(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \
820                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
821                 elif [ -f /etc/arch-release -o -f /etc/arch-release ]; then \
822                         $(INSTALL) -m 755 contrib/init.d/rc.archlinux.asterisk $(DESTDIR)/etc/rc.d/asterisk; \
823                 elif [ -f /etc/slackware-version ]; then \
824                         echo "Slackware is not currently supported, although an init script does exist for it." \
825                 else \
826                         echo "We could not install init scripts for your distribution."; \
827                 fi \
828         else \
829                 echo "We could not install init scripts for your operating system."; \
830         fi
831
832 sounds:
833         $(MAKE) -C sounds all
834
835 # If the cleancount has been changed, force a make clean.
836 # .cleancount is the global clean count, and .lastclean is the 
837 # last clean count we had
838
839 cleantest:
840         @cmp -s .cleancount .lastclean || $(MAKE) clean
841
842 $(SUBDIRS_UNINSTALL):
843         @$(SUBMAKE) -C $(@:-uninstall=) uninstall
844
845 _uninstall: $(SUBDIRS_UNINSTALL)
846         rm -f $(DESTDIR)$(MODULES_DIR)/*
847         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
848         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
849         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
850         rm -rf $(DESTDIR)$(ASTHEADERDIR)
851         rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
852         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
853         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
854         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
855         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
856         $(MAKE) -C sounds uninstall
857
858 uninstall: _uninstall
859         @echo " +--------- Asterisk Uninstall Complete -----+"  
860         @echo " + Asterisk binaries, sounds, man pages,     +"  
861         @echo " + headers, modules, and firmware builds,    +"  
862         @echo " + have all been uninstalled.                +"  
863         @echo " +                                           +"
864         @echo " + To remove ALL traces of Asterisk,         +"
865         @echo " + including configuration, spool            +"
866         @echo " + directories, and logs, run the following  +"
867         @echo " + command:                                  +"
868         @echo " +                                           +"
869         @echo " +            $(mK) uninstall-all            +"  
870         @echo " +-------------------------------------------+"  
871
872 uninstall-all: _uninstall
873         rm -rf $(DESTDIR)$(ASTLIBDIR)
874         rm -rf $(DESTDIR)$(ASTVARLIBDIR)
875         rm -rf $(DESTDIR)$(ASTDATADIR)
876         rm -rf $(DESTDIR)$(ASTSPOOLDIR)
877         rm -rf $(DESTDIR)$(ASTETCDIR)
878         rm -rf $(DESTDIR)$(ASTLOGDIR)
879
880 menuconfig: menuselect
881
882 cmenuconfig: cmenuselect
883
884 gmenuconfig: gmenuselect
885
886 nmenuconfig: nmenuselect
887
888 menuselect: menuselect/cmenuselect menuselect/nmenuselect menuselect/gmenuselect
889         @if [ -x menuselect/nmenuselect ]; then \
890                 $(MAKE) nmenuselect; \
891         elif [ -x menuselect/cmenuselect ]; then \
892                 $(MAKE) cmenuselect; \
893         elif [ -x menuselect/gmenuselect ]; then \
894                 $(MAKE) gmenuselect; \
895         else \
896                 echo "No menuselect user interface found. Install ncurses,"; \
897                 echo "newt or GTK libraries to build one and re-rerun"; \
898                 echo "'make menuselect'."; \
899         fi
900
901 cmenuselect: menuselect/cmenuselect menuselect-tree
902         -@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!"
903
904 gmenuselect: menuselect/gmenuselect menuselect-tree
905         -@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!"
906
907 nmenuselect: menuselect/nmenuselect menuselect-tree
908         -@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!"
909
910 # options for make in menuselect/
911 MAKE_MENUSELECT=CC="$(HOST_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
912
913 menuselect/menuselect: menuselect/makeopts
914         $(MAKE_MENUSELECT) menuselect
915
916 menuselect/cmenuselect: menuselect/makeopts
917         $(MAKE_MENUSELECT) cmenuselect
918
919 menuselect/gmenuselect: menuselect/makeopts
920         $(MAKE_MENUSELECT) gmenuselect
921
922 menuselect/nmenuselect: menuselect/makeopts
923         $(MAKE_MENUSELECT) nmenuselect
924
925 menuselect/makeopts: makeopts
926         $(MAKE_MENUSELECT) makeopts
927
928 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
929         @echo "Generating input for menuselect ..."
930         @echo "<?xml version=\"1.0\"?>" > $@
931         @echo >> $@
932         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
933         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
934         @cat build_tools/cflags.xml >> $@
935         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
936         @if [ "${AST_DEVMODE}" = "yes" ]; then \
937                 cat build_tools/cflags-devmode.xml >> $@; \
938         fi
939         @cat build_tools/embed_modules.xml >> $@
940         @cat sounds/sounds.xml >> $@
941         @echo "</menu>" >> $@
942
943 pdf: asterisk.pdf
944 asterisk.pdf:
945         $(MAKE) -C doc/tex asterisk.pdf
946
947 .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
948
949 FORCE:
950