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