Start splitting up miscellaneous doxygen documentation into separate files.
[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/asterisk
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 bridges 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) -d $(DESTDIR)$(ASTHEADERDIR)/doxygen
563         $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir)
564         $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR)
565         $(INSTALL) -m 644 include/asterisk/doxygen/*.h $(DESTDIR)$(ASTHEADERDIR)/doxygen
566         if [ -n "$(OLDHEADERS)" ]; then \
567                 rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
568         fi
569         mkdir -p $(DESTDIR)$(ASTDATADIR)/documentation
570         mkdir -p $(DESTDIR)$(ASTDATADIR)/documentation/thirdparty
571         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv
572         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom
573         mkdir -p $(DESTDIR)$(ASTDATADIR)/keys
574         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware
575         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax
576         mkdir -p $(DESTDIR)$(ASTMANDIR)/man8
577         $(INSTALL) -m 644 doc/core-*.xml $(DESTDIR)$(ASTDATADIR)/documentation
578         $(INSTALL) -m 644 doc/appdocsxml.dtd $(DESTDIR)$(ASTVARLIBDIR)/documentation
579         $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys
580         $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys
581         $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
582         $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
583         $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
584         $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
585         if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
586                 $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
587         fi
588
589 $(SUBDIRS_INSTALL):
590         @DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
591
592 NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
593 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
594
595 oldmodcheck:
596         @if [ -n "$(OLDMODS)" ]; then \
597                 echo " WARNING WARNING WARNING" ;\
598                 echo "" ;\
599                 echo " Your Asterisk modules directory, located at" ;\
600                 echo " $(DESTDIR)$(MODULES_DIR)" ;\
601                 echo " contains modules that were not installed by this " ;\
602                 echo " version of Asterisk. Please ensure that these" ;\
603                 echo " modules are compatible with this version before" ;\
604                 echo " attempting to run Asterisk." ;\
605                 echo "" ;\
606                 for f in $(OLDMODS); do \
607                         echo "    $$f" ;\
608                 done ;\
609                 echo "" ;\
610                 echo " WARNING WARNING WARNING" ;\
611         fi
612
613 badshell:
614 ifneq ($(findstring ~,$(DESTDIR)),)
615         @echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
616         @echo "Try replacing ~ with \$$HOME, as in \"make install DESTDIR=\$$HOME/path\"."
617         @exit 1
618 endif
619
620 install: badshell datafiles bininstall
621         @if [ -x /usr/sbin/asterisk-post-install ]; then \
622                 /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
623         fi
624         @echo " +---- Asterisk Installation Complete -------+"  
625         @echo " +                                           +"
626         @echo " +    YOU MUST READ THE SECURITY DOCUMENT    +"
627         @echo " +                                           +"
628         @echo " + Asterisk has successfully been installed. +"  
629         @echo " + If you would like to install the sample   +"  
630         @echo " + configuration files (overwriting any      +"
631         @echo " + existing config files), run:              +"  
632         @echo " +                                           +"
633         @echo " +               $(mK) samples               +"
634         @echo " +                                           +"
635         @echo " +-----------------  or ---------------------+"
636         @echo " +                                           +"
637         @echo " + You can go ahead and install the asterisk +"
638         @echo " + program documentation now or later run:   +"
639         @echo " +                                           +"
640         @echo " +              $(mK) progdocs               +"
641         @echo " +                                           +"
642         @echo " + **Note** This requires that you have      +"
643         @echo " + doxygen installed on your local system    +"
644         @echo " +-------------------------------------------+"
645         @$(MAKE) -s oldmodcheck
646
647 isntall: install
648
649 upgrade: bininstall
650
651 # XXX why *.adsi is installed first ?
652 adsi:
653         @echo Installing adsi config files...
654         @mkdir -p $(DESTDIR)$(ASTETCDIR)
655         @for x in configs/*.adsi; do \
656                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
657                 if [ -f $${dst} ] ; then \
658                         echo "Overwriting $$x" ; \
659                 else \
660                         echo "Installing $$x" ; \
661                 fi ; \
662                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \
663         done
664
665 samples: adsi
666         @echo Installing other config files...
667         @mkdir -p $(DESTDIR)$(ASTETCDIR)
668         @for x in configs/*.sample; do \
669                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ;        \
670                 if [ -f $${dst} ]; then \
671                         if [ "$(OVERWRITE)" = "y" ]; then \
672                                 if cmp -s $${dst} $$x ; then \
673                                         echo "Config file $$x is unchanged"; \
674                                         continue; \
675                                 fi ; \
676                                 mv -f $${dst} $${dst}.old ; \
677                         else \
678                                 echo "Skipping config file $$x"; \
679                                 continue; \
680                         fi ;\
681                 fi ; \
682                 echo "Installing file $$x"; \
683                 $(INSTALL) -m 644 $$x $${dst} ;\
684         done
685         @if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \
686                 echo "Creating asterisk.conf"; \
687                 ( \
688                 echo "[directories](!) ; remove the (!) to enable this" ; \
689                 echo "astetcdir => $(ASTETCDIR)" ; \
690                 echo "astmoddir => $(MODULES_DIR)" ; \
691                 echo "astvarlibdir => $(ASTVARLIBDIR)" ; \
692                 echo "astdbdir => $(ASTDBDIR)" ; \
693                 echo "astkeydir => $(ASTKEYDIR)" ; \
694                 echo "astdatadir => $(ASTDATADIR)" ; \
695                 echo "astagidir => $(AGI_DIR)" ; \
696                 echo "astspooldir => $(ASTSPOOLDIR)" ; \
697                 echo "astrundir => $(ASTVARRUNDIR)" ; \
698                 echo "astlogdir => $(ASTLOGDIR)" ; \
699                 echo "" ; \
700                 echo "[options]" ; \
701                 echo ";verbose = 3" ; \
702                 echo ";debug = 3" ; \
703                 echo ";alwaysfork = yes ; same as -F at startup" ; \
704                 echo ";nofork = yes ; same as -f at startup" ; \
705                 echo ";quiet = yes ; same as -q at startup" ; \
706                 echo ";timestamp = yes ; same as -T at startup" ; \
707                 echo ";execincludes = yes ; support #exec in config files" ; \
708                 echo ";console = yes ; Run as console (same as -c at startup)" ; \
709                 echo ";highpriority = yes ; Run realtime priority (same as -p at startup)" ; \
710                 echo ";initcrypto = yes ; Initialize crypto keys (same as -i at startup)" ; \
711                 echo ";nocolor = yes ; Disable console colors" ; \
712                 echo ";dontwarn = yes ; Disable some warnings" ; \
713                 echo ";dumpcore = yes ; Dump core on crash (same as -g at startup)" ; \
714                 echo ";languageprefix = yes ; Use the new sound prefix path syntax" ; \
715                 echo ";internal_timing = yes" ; \
716                 echo ";systemname = my_system_name ; prefix uniqueid with a system name for global uniqueness issues" ; \
717                 echo ";autosystemname = yes ; automatically set systemname to hostname - uses 'localhost' on failure, or systemname if set" ; \
718                 echo ";maxcalls = 10 ; Maximum amount of calls allowed" ; \
719                 echo ";maxload = 0.9 ; Asterisk stops accepting new calls if the load average exceed this limit" ; \
720                 echo ";maxfiles = 1000 ; Maximum amount of openfiles" ; \
721                 echo ";minmemfree = 1 ; in MBs, Asterisk stops accepting new calls if the amount of free memory falls below this watermark" ; \
722                 echo ";cache_record_files = yes ; Cache recorded sound files to another directory during recording" ; \
723                 echo ";record_cache_dir = /tmp ; Specify cache directory (used in cnjunction with cache_record_files)" ; \
724                 echo ";transmit_silence_during_record = yes ; Transmit SLINEAR silence while a channel is being recorded" ; \
725                 echo ";transmit_silence = yes ; Transmit SLINEAR silence while a channel is being recorded or DTMF is being generated" ; \
726                 echo ";transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of directly" ; \
727                 echo ";runuser = asterisk ; The user to run as" ; \
728                 echo ";rungroup = asterisk ; The group to run as" ; \
729                 echo ";lightbackground = yes ; If your terminal is set for a light-colored background" ; \
730                 echo "documentation_language = en_US ; Set the Language you want Documentation displayed in. Value is in the same format as locale names" ; \
731                 echo ";hideconnect = yes ; Hide messages displayed when a remote console connects and disconnects" ; \
732                 echo "" ; \
733                 echo "; Changing the following lines may compromise your security." ; \
734                 echo ";[files]" ; \
735                 echo ";astctlpermissions = 0660" ; \
736                 echo ";astctlowner = root" ; \
737                 echo ";astctlgroup = apache" ; \
738                 echo ";astctl = asterisk.ctl" ; \
739                 echo "" ; \
740                 echo "[compat]" ; \
741                 echo "pbx_realtime=1.6" ; \
742                 echo "res_agi=1.6" ; \
743                 echo "app_set=1.6" ; \
744                 ) > $(DESTDIR)$(ASTCONFPATH) ; \
745         else \
746                 echo "Skipping asterisk.conf creation"; \
747         fi
748         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
749         build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
750         @mkdir -p $(DESTDIR)$(ASTDATADIR)/phoneprov
751         @for x in phoneprov/*; do \
752                 dst="$(DESTDIR)$(ASTDATADIR)/$$x" ;     \
753                 if [ -f $${dst} ]; then \
754                         if [ "$(OVERWRITE)" = "y" ]; then \
755                                 if cmp -s $${dst} $$x ; then \
756                                         echo "Config file $$x is unchanged"; \
757                                         continue; \
758                                 fi ; \
759                                 mv -f $${dst} $${dst}.old ; \
760                         else \
761                                 echo "Skipping config file $$x"; \
762                                 continue; \
763                         fi ;\
764                 fi ; \
765                 echo "Installing file $$x"; \
766                 $(INSTALL) -m 644 $$x $${dst} ;\
767         done
768
769 webvmail:
770         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
771         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
772         $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
773         mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
774         for x in images/*.gif; do \
775                 $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
776         done
777         @echo " +--------- Asterisk Web Voicemail ----------+"  
778         @echo " +                                           +"
779         @echo " + Asterisk Web Voicemail is installed in    +"
780         @echo " + your cgi-bin directory:                   +"
781         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
782         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
783         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
784         @echo " +                                           +"
785         @echo " + Other static items have been stored in:   +"
786         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
787         @echo " +                                           +"
788         @echo " + If these paths do not match your httpd    +"
789         @echo " + installation, correct the definitions     +"
790         @echo " + in your Makefile of HTTP_CGIDIR and       +"
791         @echo " + HTTP_DOCSDIR                              +"
792         @echo " +                                           +"
793         @echo " +-------------------------------------------+"  
794
795 progdocs:
796         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
797         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
798
799 install-logrotate:
800         if [ ! -d $(ASTETCDIR)/../logrotate.d ]; then \
801                 mkdir $(ASTETCDIR)/../logrotate.d ; \
802         fi
803         sed 's#__LOGDIR__#$(ASTLOGDIR)#g' < contrib/scripts/asterisk.logrotate | sed 's#__SBINDIR__#$(ASTSBINDIR)#g' > contrib/scripts/asterisk.logrotate.tmp
804         install -m 0644 contrib/scripts/asterisk.logrotate.tmp $(ASTETCDIR)/../logrotate.d/asterisk
805         rm -f contrib/scripts/asterisk.logrotate.tmp
806
807 config:
808         @if [ "${OSARCH}" = "linux-gnu" ]; then \
809                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
810                         cat contrib/init.d/rc.redhat.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/rc.d/init.d/asterisk ;\
811                         chmod 755 $(DESTDIR)/etc/rc.d/init.d/asterisk;\
812                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
813                 elif [ -f /etc/debian_version ]; then \
814                         cat contrib/init.d/rc.debian.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/init.d/asterisk ;\
815                         chmod 755 $(DESTDIR)/etc/init.d/asterisk;\
816                         if [ -z "$(DESTDIR)" ]; then /usr/sbin/update-rc.d asterisk start 50 2 3 4 5 . stop 91 2 3 4 5 .; fi; \
817                 elif [ -f /etc/gentoo-release ]; then \
818                         cat contrib/init.d/rc.gentoo.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/init.d/asterisk ;\
819                         chmod 755 $(DESTDIR)/etc/init.d/asterisk;\
820                         if [ -z "$(DESTDIR)" ]; then /sbin/rc-update add asterisk default; fi; \
821                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ]; then \
822                         cat contrib/init.d/rc.mandriva.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/rc.d/init.d/asterisk ;\
823                         chmod 755 $(DESTDIR)/etc/rc.d/init.d/asterisk;\
824                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
825                 elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
826                         cat contrib/init.d/rc.suse.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/init.d/asterisk ;\
827                         chmod 755 $(DESTDIR)/etc/init.d/asterisk;\
828                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
829                 elif [ -f /etc/arch-release -o -f /etc/arch-release ]; then \
830                         cat contrib/init.d/rc.archlinux.asterisk | sed 's|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;s|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)/etc/rc.d/asterisk ;\
831                         chmod 755 $(DESTDIR)/etc/rc.d/asterisk;\
832                 elif [ -f /etc/slackware-version ]; then \
833                         echo "Slackware is not currently supported, although an init script does exist for it." \
834                 else \
835                         echo "We could not install init scripts for your distribution."; \
836                 fi \
837         else \
838                 echo "We could not install init scripts for your operating system."; \
839         fi
840
841 sounds:
842         $(MAKE) -C sounds all
843
844 # If the cleancount has been changed, force a make clean.
845 # .cleancount is the global clean count, and .lastclean is the 
846 # last clean count we had
847
848 cleantest:
849         @cmp -s .cleancount .lastclean || $(MAKE) clean
850
851 $(SUBDIRS_UNINSTALL):
852         @$(SUBMAKE) -C $(@:-uninstall=) uninstall
853
854 _uninstall: $(SUBDIRS_UNINSTALL)
855         rm -f $(DESTDIR)$(MODULES_DIR)/*
856         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
857         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
858         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
859         rm -rf $(DESTDIR)$(ASTHEADERDIR)
860         rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
861         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
862         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
863         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
864         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
865         $(MAKE) -C sounds uninstall
866
867 uninstall: _uninstall
868         @echo " +--------- Asterisk Uninstall Complete -----+"  
869         @echo " + Asterisk binaries, sounds, man pages,     +"  
870         @echo " + headers, modules, and firmware builds,    +"  
871         @echo " + have all been uninstalled.                +"  
872         @echo " +                                           +"
873         @echo " + To remove ALL traces of Asterisk,         +"
874         @echo " + including configuration, spool            +"
875         @echo " + directories, and logs, run the following  +"
876         @echo " + command:                                  +"
877         @echo " +                                           +"
878         @echo " +            $(mK) uninstall-all            +"  
879         @echo " +-------------------------------------------+"  
880
881 uninstall-all: _uninstall
882         rm -rf $(DESTDIR)$(ASTLIBDIR)
883         rm -rf $(DESTDIR)$(ASTVARLIBDIR)
884         rm -rf $(DESTDIR)$(ASTDATADIR)
885         rm -rf $(DESTDIR)$(ASTSPOOLDIR)
886         rm -rf $(DESTDIR)$(ASTETCDIR)
887         rm -rf $(DESTDIR)$(ASTLOGDIR)
888
889 menuconfig: menuselect
890
891 cmenuconfig: cmenuselect
892
893 gmenuconfig: gmenuselect
894
895 nmenuconfig: nmenuselect
896
897 menuselect: menuselect/cmenuselect menuselect/nmenuselect menuselect/gmenuselect
898         @if [ -x menuselect/nmenuselect ]; then \
899                 $(MAKE) nmenuselect; \
900         elif [ -x menuselect/cmenuselect ]; then \
901                 $(MAKE) cmenuselect; \
902         elif [ -x menuselect/gmenuselect ]; then \
903                 $(MAKE) gmenuselect; \
904         else \
905                 echo "No menuselect user interface found. Install ncurses,"; \
906                 echo "newt or GTK libraries to build one and re-rerun"; \
907                 echo "'make menuselect'."; \
908         fi
909
910 cmenuselect: menuselect/cmenuselect menuselect-tree
911         -@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!"
912
913 gmenuselect: menuselect/gmenuselect menuselect-tree
914         -@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!"
915
916 nmenuselect: menuselect/nmenuselect menuselect-tree
917         -@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!"
918
919 # options for make in menuselect/
920 MAKE_MENUSELECT=CC="$(HOST_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
921
922 menuselect/menuselect: menuselect/makeopts
923         $(MAKE_MENUSELECT) menuselect
924
925 menuselect/cmenuselect: menuselect/makeopts
926         $(MAKE_MENUSELECT) cmenuselect
927
928 menuselect/gmenuselect: menuselect/makeopts
929         $(MAKE_MENUSELECT) gmenuselect
930
931 menuselect/nmenuselect: menuselect/makeopts
932         $(MAKE_MENUSELECT) nmenuselect
933
934 menuselect/makeopts: makeopts
935         $(MAKE_MENUSELECT) makeopts
936
937 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
938         @echo "Generating input for menuselect ..."
939         @echo "<?xml version=\"1.0\"?>" > $@
940         @echo >> $@
941         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
942         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
943         @cat build_tools/cflags.xml >> $@
944         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
945         @if [ "${AST_DEVMODE}" = "yes" ]; then \
946                 cat build_tools/cflags-devmode.xml >> $@; \
947         fi
948         @cat build_tools/embed_modules.xml >> $@
949         @cat sounds/sounds.xml >> $@
950         @echo "</menu>" >> $@
951
952 pdf: asterisk.pdf
953 asterisk.pdf:
954         $(MAKE) -C doc/tex asterisk.pdf
955
956 .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
957
958 FORCE:
959