Merged revisions 317058 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 ADDL_TARGETS=
209
210 ifeq ($(AST_DEVMODE),yes)
211   _ASTCFLAGS+=-Werror
212   _ASTCFLAGS+=-Wunused
213   _ASTCFLAGS+=$(AST_DECLARATION_AFTER_STATEMENT)
214   _ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
215   _ASTCFLAGS+=-Wundef 
216   _ASTCFLAGS+=-Wmissing-format-attribute
217   _ASTCFLAGS+=-Wformat=2
218   ADDL_TARGETS+=validate-docs
219 endif
220
221 ifneq ($(findstring BSD,$(OSARCH)),)
222   _ASTCFLAGS+=-isystem /usr/local/include
223 endif
224
225 ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
226   ifneq ($(AST_MARCH_NATIVE),)
227     _ASTCFLAGS+=$(AST_MARCH_NATIVE)
228   else
229     ifneq ($(PROC),ultrasparc)
230       _ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
231     endif
232   endif
233 endif
234
235 ifeq ($(PROC),ppc)
236   _ASTCFLAGS+=-fsigned-char
237 endif
238
239 ifeq ($(OSARCH),FreeBSD)
240   ifeq ($(findstring -march,$(_ASTCFLAGS) $(ASTCFLAGS)),)
241     ifeq ($(PROC),i386)
242       _ASTCFLAGS+=-march=i686
243     endif
244   endif
245   # -V is understood by BSD Make, not by GNU make.
246   BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
247   _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
248 endif
249
250 ifeq ($(OSARCH),NetBSD)
251   _ASTCFLAGS+=-pthread -I/usr/pkg/include
252 endif
253
254 ifeq ($(OSARCH),OpenBSD)
255   _ASTCFLAGS+=-pthread -ftrampolines
256 endif
257
258 ifeq ($(OSARCH),SunOS)
259   _ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2 -D__EXTENSIONS__
260 endif
261
262 ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) build_tools/make_version .)
263
264 ifneq ($(wildcard .version),)
265   ASTERISKVERSIONNUM:=$(shell $(AWK) -F. '{printf "%01d%02d%02d", $$1, $$2, $$3}' .version)
266 endif
267
268 ifneq ($(wildcard .svn),)
269   ASTERISKVERSIONNUM:=999999
270 endif
271
272 _ASTCFLAGS+=$(OPTIONS)
273
274 MOD_SUBDIRS:=channels pbx apps codecs formats cdr cel bridges funcs tests main res addons $(LOCAL_MOD_SUBDIRS)
275 OTHER_SUBDIRS:=utils agi
276 SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
277 SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
278 SUBDIRS_CLEAN:=$(SUBDIRS:%=%-clean)
279 SUBDIRS_DIST_CLEAN:=$(SUBDIRS:%=%-dist-clean)
280 SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
281 MOD_SUBDIRS_EMBED_LDSCRIPT:=$(MOD_SUBDIRS:%=%-embed-ldscript)
282 MOD_SUBDIRS_EMBED_LDFLAGS:=$(MOD_SUBDIRS:%=%-embed-ldflags)
283 MOD_SUBDIRS_EMBED_LIBS:=$(MOD_SUBDIRS:%=%-embed-libs)
284 MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree)
285
286 ifneq ($(findstring darwin,$(OSARCH)),)
287   _ASTCFLAGS+=-D__Darwin__
288   SOLINK=-bundle -Xlinker -macosx_version_min -Xlinker 10.4 -Xlinker -undefined -Xlinker dynamic_lookup -force_flat_namespace
289   ifeq ($(shell /usr/bin/sw_vers -productVersion | cut -c1-4),10.6)
290     SOLINK+=/usr/lib/bundle1.o
291   endif
292   _ASTLDFLAGS+=-L/usr/local/lib
293 else
294 # These are used for all but Darwin
295   SOLINK=-shared
296   ifneq ($(findstring BSD,$(OSARCH)),)
297     _ASTLDFLAGS+=-L/usr/local/lib
298   endif
299 endif
300
301 ifeq ($(OSARCH),SunOS)
302   SOLINK=-shared -fpic -L/usr/local/ssl/lib -lrt
303 endif
304
305 ifeq ($(OSARCH),OpenBSD)
306   SOLINK=-shared -fpic
307 endif
308
309 # comment to print directories during submakes
310 #PRINT_DIR=yes
311
312 ifneq ($(INSIDE_EMACS),)
313 PRINT_DIR=yes
314 endif
315
316 SILENTMAKE:=$(MAKE) --quiet --no-print-directory
317 ifneq ($(PRINT_DIR)$(NOISY_BUILD),)
318 SUBMAKE:=$(MAKE)
319 else
320 SUBMAKE:=$(MAKE) --quiet --no-print-directory
321 endif
322
323 # This is used when generating the doxygen documentation
324 ifneq ($(DOT),:)
325   HAVEDOT=yes
326 else
327   HAVEDOT=no
328 endif
329
330 # $(MAKE) is printed in several places, and we want it to be a
331 # fixed size string. Define a variable whose name has also the
332 # same size, so we can easily align text.
333 ifeq ($(MAKE), gmake)
334         mK="gmake"
335 else
336         mK=" make"
337 endif
338
339 all: _all
340         @echo " +--------- Asterisk Build Complete ---------+"  
341         @echo " + Asterisk has successfully been built, and +"  
342         @echo " + can be installed by running:              +"
343         @echo " +                                           +"
344         @echo " +               $(mK) install               +"  
345         @echo " +-------------------------------------------+"  
346
347 _all: cleantest makeopts $(SUBDIRS) doc/core-en_US.xml $(ADDL_TARGETS)
348
349 makeopts: configure
350         @echo "****"
351         @echo "**** The configure script must be executed before running '$(MAKE)'." 
352         @echo "****               Please run \"./configure\"."
353         @echo "****"
354         @exit 1
355
356 menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts build_tools/menuselect-deps $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
357 ifeq ($(filter %menuselect,$(MAKECMDGOALS)),)
358         menuselect/menuselect --check-deps $@
359         menuselect/menuselect --check-deps $@ $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
360 endif
361
362 $(MOD_SUBDIRS_EMBED_LDSCRIPT):
363         +@echo "EMBED_LDSCRIPTS+="`$(SILENTMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
364
365 $(MOD_SUBDIRS_EMBED_LDFLAGS):
366         +@echo "EMBED_LDFLAGS+="`$(SILENTMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
367
368 $(MOD_SUBDIRS_EMBED_LIBS):
369         +@echo "EMBED_LIBS+="`$(SILENTMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
370
371 $(MOD_SUBDIRS_MENUSELECT_TREE):
372         +@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
373         +@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
374
375 makeopts.embed_rules: menuselect.makeopts
376         @echo "Generating embedded module rules ..."
377         @rm -f $@
378         +@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
379         +@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDFLAGS)
380         +@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LIBS)
381
382 $(SUBDIRS): main/version.c include/asterisk/version.h include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
383
384 ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
385     # Non-windows:
386     # ensure that all module subdirectories are processed before 'main' during
387     # a parallel build, since if there are modules selected to be embedded the
388     # directories containing them must be completed before the main Asterisk
389     # binary can be built
390 main: $(filter-out main,$(MOD_SUBDIRS))
391 else
392     # Windows: we need to build main (i.e. the asterisk dll) first,
393     # followed by res, followed by the other directories, because
394     # dll symbols must be resolved during linking and not at runtime.
395 D1:= $(filter-out main,$(MOD_SUBDIRS))
396 D1:= $(filter-out res,$(D1))
397
398 $(D1): res
399 res:    main
400 endif
401
402 $(MOD_SUBDIRS):
403         +@_ASTCFLAGS="$(MOD_SUBDIR_CFLAGS) $(_ASTCFLAGS)" ASTCFLAGS="$(ASTCFLAGS)" _ASTLDFLAGS="$(_ASTLDFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all
404
405 $(OTHER_SUBDIRS):
406         +@_ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(_ASTCFLAGS)" ASTCFLAGS="$(ASTCFLAGS)" _ASTLDFLAGS="$(_ASTLDFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(SUBMAKE) --no-builtin-rules -C $@ SUBDIR=$@ all
407
408 defaults.h: makeopts
409         @build_tools/make_defaults_h > $@.tmp
410         @cmp -s $@.tmp $@ || mv $@.tmp $@
411         @rm -f $@.tmp
412
413 main/version.c: FORCE
414         @build_tools/make_version_c > $@.tmp
415         @cmp -s $@.tmp $@ || mv $@.tmp $@
416         @rm -f $@.tmp
417
418 include/asterisk/version.h: FORCE
419         @build_tools/make_version_h > $@.tmp
420         @cmp -s $@.tmp $@ || mv $@.tmp $@
421         @rm -f $@.tmp
422
423 include/asterisk/buildopts.h: menuselect.makeopts
424         @build_tools/make_buildopts_h > $@.tmp
425         @cmp -s $@.tmp $@ || mv $@.tmp $@
426         @rm -f $@.tmp
427
428 include/asterisk/build.h:
429         @build_tools/make_build_h > $@.tmp
430         @cmp -s $@.tmp $@ || mv $@.tmp $@
431         @rm -f $@.tmp
432
433 $(SUBDIRS_CLEAN):
434         +@$(SUBMAKE) -C $(@:-clean=) clean
435
436 $(SUBDIRS_DIST_CLEAN):
437         +@$(SUBMAKE) -C $(@:-dist-clean=) dist-clean
438
439 clean: $(SUBDIRS_CLEAN) _clean
440
441 _clean:
442         rm -f defaults.h
443         rm -f include/asterisk/build.h
444         rm -f main/version.c
445         rm -f include/asterisk/version.h
446         @$(MAKE) -C menuselect clean
447         cp -f .cleancount .lastclean
448
449 dist-clean: distclean
450
451 distclean: $(SUBDIRS_DIST_CLEAN) _clean
452         @$(MAKE) -C menuselect dist-clean
453         @$(MAKE) -C sounds dist-clean
454         rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
455         rm -f makeopts.embed_rules
456         rm -f config.log config.status config.cache
457         rm -rf autom4te.cache
458         rm -f include/asterisk/autoconfig.h
459         rm -f include/asterisk/buildopts.h
460         rm -rf doc/api
461         rm -f build_tools/menuselect-deps
462
463 datafiles: _all doc/core-en_US.xml
464         CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig $(DESTDIR)$(libdir)/pkgconfig;
465 # Should static HTTP be installed during make samples or even with its own target ala
466 # webvoicemail?  There are portions here that *could* be customized but might also be
467 # improved a lot.  I'll put it here for now.
468
469         for x in static-http/*; do \
470                 $(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/static-http" ; \
471         done
472         $(INSTALL) -m 644 doc/core-en_US.xml "$(DESTDIR)$(ASTDATADIR)/static-http";
473         if [ -d doc/tex/asterisk ] ; then \
474                 $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
475                 for n in doc/tex/asterisk/* ; do \
476                         $(INSTALL) -m 644 $$n "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
477                 done \
478         fi
479         for x in images/*.jpg; do \
480                 $(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/images" ; \
481         done
482         $(MAKE) -C sounds install
483
484 doc/core-en_US.xml: $(foreach dir,$(MOD_SUBDIRS),$(shell $(GREP) -l "language=\"en_US\"" $(dir)/*.c $(dir)/*.cc 2>/dev/null))
485         @printf "Building Documentation For: "
486         @echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
487         @echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
488         @echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
489         @for x in $(MOD_SUBDIRS); do \
490                 printf "$$x " ; \
491                 for i in $$x/*.c; do \
492                         $(AWK) -f build_tools/get_documentation $$i >> $@ ; \
493                 done ; \
494         done
495         @echo
496         @echo "</docs>" >> $@
497
498 validate-docs: doc/core-en_US.xml
499 ifeq ($(XMLSTARLET)$(XMLLINT),::)
500         @echo "--------------------------------------------------------------------------"
501         @echo "--- Please install xmllint or xmlstarlet to validate the documentation ---"
502         @echo "--------------------------------------------------------------------------"
503 else
504   ifneq ($(XMLLINT),:)
505         $(XMLLINT) --dtdvalid doc/appdocsxml.dtd --noout $<
506   else
507         $(XMLSTARLET) val -d doc/appdocsxml.dtd $<
508   endif
509 endif
510
511 update: 
512         @if [ -d .svn ]; then \
513                 echo "Updating from Subversion..." ; \
514                 fromrev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \
515                 svn update | tee update.out; \
516                 torev="`svn info | $(AWK) '/Revision: / {print $$2}'`"; \
517                 echo "`date`  Updated from revision $${fromrev} to $${torev}." >> update.log; \
518                 rm -f .version; \
519                 if [ `grep -c ^C update.out` -gt 0 ]; then \
520                         echo ; echo "The following files have conflicts:" ; \
521                         grep ^C update.out | cut -b4- ; \
522                 fi ; \
523                 rm -f update.out; \
524         else \
525                 echo "Not under version control";  \
526         fi
527
528 NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h))
529 OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h)))
530
531 installdirs:
532         $(INSTALL) -d "$(DESTDIR)$(MODULES_DIR)"
533         $(INSTALL) -d "$(DESTDIR)$(ASTSBINDIR)"
534         $(INSTALL) -d "$(DESTDIR)$(ASTETCDIR)"
535         $(INSTALL) -d "$(DESTDIR)$(ASTVARRUNDIR)"
536         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)"
537         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/dictate"
538         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/meetme"
539         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/monitor"
540         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/system"
541         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/tmp"
542         $(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail"
543         $(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)"
544         $(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
545         $(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)"
546         $(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cdr-csv"
547         $(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cdr-custom"
548         $(INSTALL) -d "$(DESTDIR)$(ASTLOGDIR)/cel-custom"
549         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)"
550         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/documentation"
551         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/documentation/thirdparty"
552         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/firmware"
553         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/firmware/iax"
554         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/images"
555         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/keys"
556         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/phoneprov"
557         $(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http"
558         $(INSTALL) -d "$(DESTDIR)$(ASTMANDIR)/man8"
559         $(INSTALL) -d "$(DESTDIR)$(AGI_DIR)"
560
561 bininstall: _all installdirs $(SUBDIRS_INSTALL)
562         $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/
563         $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
564         $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
565         $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/
566         if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk -a ! -f /sbin/launchd ]; then \
567                 cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;s|__ASTERISK_LOG_DIR__|$(ASTLOGDIR)|;' > contrib/scripts/safe.tmp ; \
568                 $(INSTALL) -m 755 contrib/scripts/safe.tmp $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ; \
569                 rm -f contrib/scripts/safe.tmp ; \
570         fi
571         $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir)
572         $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR)
573         $(INSTALL) -m 644 include/asterisk/doxygen/*.h $(DESTDIR)$(ASTHEADERDIR)/doxygen
574         if [ -n "$(OLDHEADERS)" ]; then \
575                 rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
576         fi
577
578         $(INSTALL) -m 644 doc/core-*.xml "$(DESTDIR)$(ASTDATADIR)/documentation"
579         $(INSTALL) -m 644 doc/appdocsxml.dtd "$(DESTDIR)$(ASTDATADIR)/documentation"
580         $(INSTALL) -m 644 doc/asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
581         $(INSTALL) -m 644 contrib/scripts/astgenkey.8 "$(DESTDIR)$(ASTMANDIR)/man8"
582         $(INSTALL) -m 644 contrib/scripts/autosupport.8 "$(DESTDIR)$(ASTMANDIR)/man8"
583         $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
584         if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
585                 $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin "$(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin"; \
586         fi
587
588 $(SUBDIRS_INSTALL):
589         +@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install 
590
591 NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
592 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard "$(DESTDIR)$(MODULES_DIR)/*.so")))
593
594 oldmodcheck:
595         @if [ -n "$(OLDMODS)" ]; then \
596                 echo " WARNING WARNING WARNING" ;\
597                 echo "" ;\
598                 echo " Your Asterisk modules directory, located at" ;\
599                 echo " $(DESTDIR)$(MODULES_DIR)" ;\
600                 echo " contains modules that were not installed by this " ;\
601                 echo " version of Asterisk. Please ensure that these" ;\
602                 echo " modules are compatible with this version before" ;\
603                 echo " attempting to run Asterisk." ;\
604                 echo "" ;\
605                 for f in $(OLDMODS); do \
606                         echo "    $$f" ;\
607                 done ;\
608                 echo "" ;\
609                 echo " WARNING WARNING WARNING" ;\
610         fi
611
612 badshell:
613 ifneq ($(findstring ~,$(DESTDIR)),)
614         @echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
615         @echo "Try replacing ~ with \$$HOME, as in \"make install DESTDIR=\$$HOME/path\"."
616         @exit 1
617 endif
618
619 install: badshell bininstall datafiles
620         @if [ -x /usr/sbin/asterisk-post-install ]; then \
621                 /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
622         fi
623         @echo " +---- Asterisk Installation Complete -------+"  
624         @echo " +                                           +"
625         @echo " +    YOU MUST READ THE SECURITY DOCUMENT    +"
626         @echo " +                                           +"
627         @echo " + Asterisk has successfully been installed. +"  
628         @echo " + If you would like to install the sample   +"  
629         @echo " + configuration files (overwriting any      +"
630         @echo " + existing config files), run:              +"  
631         @echo " +                                           +"
632         @echo " +               $(mK) samples               +"
633         @echo " +                                           +"
634         @echo " +-----------------  or ---------------------+"
635         @echo " +                                           +"
636         @echo " + You can go ahead and install the asterisk +"
637         @echo " + program documentation now or later run:   +"
638         @echo " +                                           +"
639         @echo " +              $(mK) progdocs               +"
640         @echo " +                                           +"
641         @echo " + **Note** This requires that you have      +"
642         @echo " + doxygen installed on your local system    +"
643         @echo " +-------------------------------------------+"
644         @$(MAKE) -s oldmodcheck
645
646 isntall: install
647
648 upgrade: bininstall
649
650 # XXX why *.adsi is installed first ?
651 adsi:
652         @echo Installing adsi config files...
653         $(INSTALL) -d $(DESTDIR)$(ASTETCDIR)
654         @for x in configs/*.adsi; do \
655                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
656                 if [ -f $${dst} ] ; then \
657                         echo "Overwriting $$x" ; \
658                 else \
659                         echo "Installing $$x" ; \
660                 fi ; \
661                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \
662         done
663
664 samples: adsi
665         @echo Installing other config files...
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" ]; then \
684                 echo "Updating asterisk.conf" ; \
685                 sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
686                         -e 's|^astmoddir.*$$|astmoddir => $(MODULES_DIR)|' \
687                         -e 's|^astvarlibdir.*$$|astvarlibdir => $(ASTVARLIBDIR)|' \
688                         -e 's|^astdbdir.*$$|astdbdir => $(ASTDBDIR)|' \
689                         -e 's|^astkeydir.*$$|astkeydir => $(ASTKEYDIR)|' \
690                         -e 's|^astdatadir.*$$|astdatadir => $(ASTDATADIR)|' \
691                         -e 's|^astagidir.*$$|astagidir => $(AGI_DIR)|' \
692                         -e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
693                         -e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
694                         -e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
695                         $(DESTDIR)$(ASTCONFPATH) > $(DESTDIR)$(ASTCONFPATH).tmp ; \
696                 $(INSTALL) -m 644 $(DESTDIR)$(ASTCONFPATH).tmp $(DESTDIR)$(ASTCONFPATH) ; \
697                 rm -f $(DESTDIR)$(ASTCONFPATH).tmp ; \
698         fi ; \
699         $(INSTALL) -d $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
700         build_tools/make_sample_voicemail "$(DESTDIR)$(ASTDATADIR)" "$(DESTDIR)$(ASTSPOOLDIR)"
701
702         @for x in phoneprov/*; do \
703                 dst="$(DESTDIR)$(ASTDATADIR)/$$x" ;     \
704                 if [ -f "$${dst}" ]; then \
705                         if [ "$(OVERWRITE)" = "y" ]; then \
706                                 if cmp -s "$${dst}" $$x ; then \
707                                         echo "Config file $$x is unchanged"; \
708                                         continue; \
709                                 fi ; \
710                                 mv -f "$${dst}" "$${dst}.old" ; \
711                         else \
712                                 echo "Skipping config file $$x"; \
713                                 continue; \
714                         fi ;\
715                 fi ; \
716                 echo "Installing file $$x"; \
717                 $(INSTALL) -m 644 $$x "$${dst}" ;\
718         done
719
720 webvmail:
721         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
722         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
723         $(INSTALL) -m 4755 contrib/scripts/vmail.cgi "$(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi"
724         $(INSTALL) -d $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
725         for x in images/*.gif; do \
726                 $(INSTALL) -m 644 $$x "$(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/"; \
727         done
728         @echo " +--------- Asterisk Web Voicemail ----------+"  
729         @echo " +                                           +"
730         @echo " + Asterisk Web Voicemail is installed in    +"
731         @echo " + your cgi-bin directory:                   +"
732         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
733         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
734         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
735         @echo " +                                           +"
736         @echo " + Other static items have been stored in:   +"
737         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
738         @echo " +                                           +"
739         @echo " + If these paths do not match your httpd    +"
740         @echo " + installation, correct the definitions     +"
741         @echo " + in your Makefile of HTTP_CGIDIR and       +"
742         @echo " + HTTP_DOCSDIR                              +"
743         @echo " +                                           +"
744         @echo " +-------------------------------------------+"  
745
746 progdocs:
747         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
748         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
749
750 install-logrotate:
751         if [ ! -d $(ASTETCDIR)/../logrotate.d ]; then \
752                 $(INSTALL) -d $(ASTETCDIR)/../logrotate.d ; \
753         fi
754         sed 's#__LOGDIR__#$(ASTLOGDIR)#g' < contrib/scripts/asterisk.logrotate | sed 's#__SBINDIR__#$(ASTSBINDIR)#g' > contrib/scripts/asterisk.logrotate.tmp
755         $(INSTALL) -m 0644 contrib/scripts/asterisk.logrotate.tmp $(ASTETCDIR)/../logrotate.d/asterisk
756         rm -f contrib/scripts/asterisk.logrotate.tmp
757
758 config:
759         @if [ "${OSARCH}" = "linux-gnu" ]; then \
760                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
761                         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 ; \
762                         $(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/rc.d/init.d/asterisk ; \
763                         rm -f contrib/init.d/rc.asterisk.tmp ; \
764                         if [ ! -f $(DESTDIR)/etc/sysconfig/asterisk ] ; then \
765                                 $(INSTALL) -m 644 contrib/init.d/etc_default_asterisk $(DESTDIR)/etc/sysconfig/asterisk ; \
766                         fi ; \
767                         if [ -z "$(DESTDIR)" ] ; then \
768                                 /sbin/chkconfig --add asterisk ; \
769                         fi ; \
770                 elif [ -f /etc/debian_version ] ; then \
771                         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 ; \
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 [ ! -f $(DESTDIR)/etc/default/asterisk ] ; then \
775                                 $(INSTALL) -m 644 contrib/init.d/etc_default_asterisk $(DESTDIR)/etc/default/asterisk ; \
776                         fi ; \
777                         if [ -z "$(DESTDIR)" ] ; then \
778                                 /usr/sbin/update-rc.d asterisk defaults 50 91 ; \
779                         fi ; \
780                 elif [ -f /etc/gentoo-release ] ; then \
781                         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 ; \
782                         $(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/init.d/asterisk ; \
783                         rm -f contrib/init.d/rc.asterisk.tmp ; \
784                         if [ -z "$(DESTDIR)" ] ; then \
785                                 /sbin/rc-update add asterisk default ; \
786                         fi ; \
787                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ] ; then \
788                         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 ; \
789                         $(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/rc.d/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/SuSE-release -o -f /etc/novell-release ] ; then \
798                         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 ; \
799                         $(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/init.d/asterisk ;\
800                         rm -f contrib/init.d/rc.asterisk.tmp ; \
801                         if [ ! -f /etc/sysconfig/asterisk ] ; then \
802                                 $(INSTALL) -m 644 contrib/init.d/etc_default_asterisk $(DESTDIR)/etc/sysconfig/asterisk ; \
803                         fi ; \
804                         if [ -z "$(DESTDIR)" ] ; then \
805                                 /sbin/chkconfig --add asterisk ; \
806                         fi ; \
807                 elif [ -f /etc/arch-release -o -f /etc/arch-release ] ; then \
808                         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 ; \
809                         $(INSTALL) -m 755 contrib/init.d/rc.asterisk.tmp $(DESTDIR)/etc/rc.d/asterisk ; \
810                         rm -f contrib/init.d/rc.asterisk.tmp ; \
811                 elif [ -d $(DESTDIR)/Library/LaunchDaemons ]; then \
812                         if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist ]; then \
813                                 sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;' < contrib/init.d/org.asterisk.asterisk.plist > asterisk.plist ; \
814                                 $(INSTALL) -m 644 asterisk.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist; \
815                                 rm -f asterisk.plist; \
816                         fi; \
817                         if [ ! -f $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist ]; then \
818                                 sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;' < contrib/init.d/org.asterisk.muted.plist > muted.plist ; \
819                                 $(INSTALL) -m 644 muted.plist $(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist; \
820                                 rm -f muted.plist; \
821                         fi; \
822                 elif [ -f /etc/slackware-version ]; then \
823                         echo "Slackware is not currently supported, although an init script does exist for it."; \
824                 else \
825                         echo "We could not install init scripts for your distribution." ; \
826                 fi \
827         else \
828                 echo "We could not install init scripts for your operating system." ; \
829         fi
830
831 sounds:
832         $(MAKE) -C sounds all
833
834 # If the cleancount has been changed, force a make clean.
835 # .cleancount is the global clean count, and .lastclean is the 
836 # last clean count we had
837
838 cleantest:
839         @cmp -s .cleancount .lastclean || $(MAKE) clean
840
841 $(SUBDIRS_UNINSTALL):
842         +@$(SUBMAKE) -C $(@:-uninstall=) uninstall
843
844 _uninstall: $(SUBDIRS_UNINSTALL)
845         rm -f "$(DESTDIR)$(MODULES_DIR)/*"
846         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
847         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
848         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
849         rm -rf $(DESTDIR)$(ASTHEADERDIR)
850         rm -rf "$(DESTDIR)$(ASTDATADIR)/firmware"
851         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
852         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
853         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
854         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
855         $(MAKE) -C sounds uninstall
856
857 uninstall: _uninstall
858         @echo " +--------- Asterisk Uninstall Complete -----+"  
859         @echo " + Asterisk binaries, sounds, man pages,     +"  
860         @echo " + headers, modules, and firmware builds,    +"  
861         @echo " + have all been uninstalled.                +"  
862         @echo " +                                           +"
863         @echo " + To remove ALL traces of Asterisk,         +"
864         @echo " + including configuration, spool            +"
865         @echo " + directories, and logs, run the following  +"
866         @echo " + command:                                  +"
867         @echo " +                                           +"
868         @echo " +            $(mK) uninstall-all            +"  
869         @echo " +-------------------------------------------+"  
870
871 uninstall-all: _uninstall
872         rm -rf "$(DESTDIR)$(ASTLIBDIR)"
873         rm -rf "$(DESTDIR)$(ASTVARLIBDIR)"
874         rm -rf "$(DESTDIR)$(ASTDATADIR)"
875         rm -rf "$(DESTDIR)$(ASTSPOOLDIR)"
876         rm -rf "$(DESTDIR)$(ASTETCDIR)"
877         rm -rf "$(DESTDIR)$(ASTLOGDIR)"
878
879 menuconfig: menuselect
880
881 cmenuconfig: cmenuselect
882
883 gmenuconfig: gmenuselect
884
885 nmenuconfig: nmenuselect
886
887 menuselect: menuselect/cmenuselect menuselect/nmenuselect menuselect/gmenuselect
888         @if [ -x menuselect/nmenuselect ]; then \
889                 $(MAKE) nmenuselect; \
890         elif [ -x menuselect/cmenuselect ]; then \
891                 $(MAKE) cmenuselect; \
892         elif [ -x menuselect/gmenuselect ]; then \
893                 $(MAKE) gmenuselect; \
894         else \
895                 echo "No menuselect user interface found. Install ncurses,"; \
896                 echo "newt or GTK libraries to build one and re-rerun"; \
897                 echo "'./configure' and 'make menuselect'."; \
898         fi
899
900 cmenuselect: menuselect/cmenuselect menuselect-tree menuselect.makeopts
901         -@menuselect/cmenuselect menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
902
903 gmenuselect: menuselect/gmenuselect menuselect-tree menuselect.makeopts
904         -@menuselect/gmenuselect menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
905
906 nmenuselect: menuselect/nmenuselect menuselect-tree menuselect.makeopts
907         -@menuselect/nmenuselect menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
908
909 # options for make in menuselect/
910 MAKE_MENUSELECT=CC="$(BUILD_CC)" CXX="" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
911
912 menuselect/menuselect: menuselect/makeopts
913         +$(MAKE_MENUSELECT) menuselect
914
915 menuselect/cmenuselect: menuselect/makeopts
916         +$(MAKE_MENUSELECT) cmenuselect
917
918 menuselect/gmenuselect: menuselect/makeopts
919         +$(MAKE_MENUSELECT) gmenuselect
920
921 menuselect/nmenuselect: menuselect/makeopts
922         +$(MAKE_MENUSELECT) nmenuselect
923
924 menuselect/makeopts: makeopts
925         +$(MAKE_MENUSELECT) makeopts
926
927 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
928         @echo "Generating input for menuselect ..."
929         @echo "<?xml version=\"1.0\"?>" > $@
930         @echo >> $@
931         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
932         +@for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
933         @cat build_tools/cflags.xml >> $@
934         +@for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SILENTMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
935         @if [ "${AST_DEVMODE}" = "yes" ]; then \
936                 cat build_tools/cflags-devmode.xml >> $@; \
937         fi
938         @cat utils/utils.xml >> $@
939         @cat agi/agi.xml >> $@
940         @cat build_tools/embed_modules.xml >> $@
941         @cat sounds/sounds.xml >> $@
942         @echo "</menu>" >> $@
943
944 .PHONY: menuselect
945 .PHONY: main
946 .PHONY: sounds
947 .PHONY: clean
948 .PHONY: dist-clean
949 .PHONY: distclean
950 .PHONY: all
951 .PHONY: prereqs
952 .PHONY: cleantest
953 .PHONY: uninstall
954 .PHONY: _uninstall
955 .PHONY: uninstall-all
956 .PHONY: dont-optimize
957 .PHONY: badshell
958 .PHONY: installdirs
959 .PHONY: validate-docs
960 .PHONY: _clean
961 .PHONY: $(SUBDIRS_INSTALL)
962 .PHONY: $(SUBDIRS_DIST_CLEAN)
963 .PHONY: $(SUBDIRS_CLEAN)
964 .PHONY: $(SUBDIRS_UNINSTALL)
965 .PHONY: $(SUBDIRS)
966 .PHONY: $(MOD_SUBDIRS_EMBED_LDSCRIPT)
967 .PHONY: $(MOD_SUBDIRS_EMBED_LDFLAGS)
968 .PHONY: $(MOD_SUBDIRS_EMBED_LIBS)
969
970 FORCE:
971