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