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