Add coordination between AMI and AGI applications, with an asyncagi method
[asterisk/asterisk.git] / Makefile
1 #
2 # Asterisk -- A telephony toolkit for Linux.
3
4 # Top level Makefile
5 #
6 # Copyright (C) 1999-2006, Digium, Inc.
7 #
8 # Mark Spencer <markster@digium.com>
9 #
10 # This program is free software, distributed under the terms of
11 # the GNU General Public License
12 #
13
14 # All Makefiles use the following variables:
15 #
16 # ASTCFLAGS - compiler options
17 # ASTLDFLAGS - linker flags (not libraries)
18 # LIBS - additional libraries, at top-level for all links,
19 #      on a single object just for that object
20 # SOLINK - linker flags used only for creating shared objects (.so files),
21 #      used for all .so links
22 #
23 # Initial values for ASTCFLAGS and ASTLDFLAGS can be specified in the
24 # environment when running make, as follows:
25 #
26 #       $ ASTCFLAGS="-Werror" make ...
27 #
28 # note that this is different from
29 #
30 #       $ make ASTCFLAGS="-Werror" ...
31 #
32 # If you need to pass compiler/linker flags as 'make' variables, please use
33 #
34 #       $ make COPTS="..." LDOPTS="..." ...
35 #
36 #
37 # You can add the path of local module subdirs from the command line with
38 #   make LOCAL_MOD_SUBDIRS= ....
39
40 export ASTTOPDIR                # Top level dir, used in subdirs' Makefiles
41 export ASTERISKVERSION
42 export ASTERISKVERSIONNUM
43
44 #--- values used for default paths
45
46 # DESTDIR is the staging (or final) directory where files are copied
47 # during the install process. Define it before 'export', otherwise
48 # export will set it to the empty string making ?= fail.
49 # WARNING: do not put spaces or comments after the value.
50 DESTDIR?=$(INSTALL_PATH)
51 export DESTDIR
52
53 export INSTALL_PATH     # Additional prefix for the following paths
54 export ASTETCDIR                # Path for config files
55 export ASTVARRUNDIR
56 export MODULES_DIR
57 export ASTSPOOLDIR
58 export ASTVARLIBDIR
59 export ASTDATADIR
60 export ASTLOGDIR
61 export ASTLIBDIR
62 export ASTMANDIR
63 export ASTHEADERDIR
64 export ASTBINDIR
65 export ASTSBINDIR
66 export AGI_DIR
67 export ASTCONFPATH
68
69 export OSARCH                   # Operating system
70 export PROC                     # Processor type
71
72 export NOISY_BUILD              # Used in Makefile.rules
73 export MENUSELECT_CFLAGS        # Options selected in menuselect.
74 export AST_DEVMODE              # Set to "yes" for additional compiler
75                                 # and runtime checks
76
77 export SOLINK                   # linker flags for shared objects
78 export STATIC_BUILD             # Additional cflags, set to -static
79                                 # for static builds. Probably
80                                 # should go directly to ASTLDFLAGS
81
82 #--- paths to various commands
83 export CC
84 export CXX
85 export AR
86 export RANLIB
87 export HOST_CC
88 export INSTALL
89 export STRIP
90 export DOWNLOAD
91 export AWK
92 export GREP
93 export ID
94
95 # even though we could use '-include makeopts' here, use a wildcard
96 # lookup anyway, so that make won't try to build makeopts if it doesn't
97 # exist (other rules will force it to be built if needed)
98 ifneq ($(wildcard makeopts),)
99   include makeopts
100 endif
101
102 # Some build systems, such as the one in openwrt, like to pass custom target
103 # CFLAGS and LDFLAGS in the COPTS and LDOPTS variables.
104 ASTCFLAGS+=$(COPTS) -D_XPG4_2
105 ASTLDFLAGS+=$(LDOPTS)
106
107 #Uncomment this to see all build commands instead of 'quiet' output
108 #NOISY_BUILD=yes
109
110 ASTTOPDIR:=$(CURDIR)
111
112 # Overwite config files on "make samples"
113 OVERWRITE=y
114
115 # Include debug and macro symbols in the executables (-g) and profiling info (-pg)
116 DEBUG=-g3
117
118
119 # Define standard directories for various platforms
120 # These apply if they are not redefined in asterisk.conf 
121 ifeq ($(OSARCH),SunOS)
122   ASTETCDIR=/var/etc/asterisk
123   ASTLIBDIR=/opt/asterisk/lib
124   ASTVARLIBDIR=/var/opt/asterisk
125   ASTDBDIR=$(ASTVARLIBDIR)
126   ASTKEYDIR=$(ASTVARLIBDIR)
127   ASTSPOOLDIR=/var/spool/asterisk
128   ASTLOGDIR=/var/log/asterisk
129   ASTHEADERDIR=/opt/asterisk/include
130   ASTBINDIR=/opt/asterisk/bin
131   ASTSBINDIR=/opt/asterisk/sbin
132   ASTVARRUNDIR=/var/run/asterisk
133   ASTMANDIR=/opt/asterisk/man
134 else
135   ASTETCDIR=$(sysconfdir)/asterisk
136   ASTLIBDIR=$(libdir)/asterisk
137   ASTHEADERDIR=$(includedir)/asterisk
138   ASTBINDIR=$(bindir)
139   ASTSBINDIR=$(sbindir)
140   ASTSPOOLDIR=$(localstatedir)/spool/asterisk
141   ASTLOGDIR=$(localstatedir)/log/asterisk
142   ASTVARRUNDIR=$(localstatedir)/run
143   ASTMANDIR=$(mandir)
144 ifneq ($(findstring BSD,$(OSARCH)),)
145   ASTVARLIBDIR=$(prefix)/share/asterisk
146   ASTVARRUNDIR=$(localstatedir)/run/asterisk
147   ASTDBDIR=$(localstatedir)/db/asterisk
148 else
149   ASTVARLIBDIR=$(localstatedir)/lib/asterisk
150   ASTDBDIR=$(ASTVARLIBDIR)
151 endif
152   ASTKEYDIR=$(ASTVARLIBDIR)
153 endif
154 ifeq ($(ASTDATADIR),)
155   ASTDATADIR:=$(ASTVARLIBDIR)
156 endif
157
158 # Asterisk.conf is located in ASTETCDIR or by using the -C flag
159 # when starting Asterisk
160 ASTCONFPATH=$(ASTETCDIR)/asterisk.conf
161 MODULES_DIR=$(ASTLIBDIR)/modules
162 AGI_DIR=$(ASTDATADIR)/agi-bin
163
164 # If you use Apache, you may determine by a grep 'DocumentRoot' of your httpd.conf file
165 HTTP_DOCSDIR=/var/www/html
166 # Determine by a grep 'ScriptAlias' of your Apache httpd.conf file
167 HTTP_CGIDIR=/var/www/cgi-bin
168
169 # Uncomment this to use the older DSP routines
170 #ASTCFLAGS+=-DOLD_DSP_ROUTINES
171
172 # If the file .asterisk.makeopts is present in your home directory, you can
173 # include all of your favorite menuselect options so that every time you download
174 # a new version of Asterisk, you don't have to run menuselect to set them. 
175 # The file /etc/asterisk.makeopts will also be included but can be overridden
176 # by the file in your home directory.
177
178 GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
179 USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)
180
181 MOD_SUBDIR_CFLAGS=-I$(ASTTOPDIR)/include
182 OTHER_SUBDIR_CFLAGS=-I$(ASTTOPDIR)/include
183
184 # Create OPTIONS variable, but probably we can assign directly to ASTCFLAGS
185 OPTIONS=
186
187 ifeq ($(OSARCH),linux-gnu)
188   ifeq ($(PROC),x86_64)
189     # You must have GCC 3.4 to use k8, otherwise use athlon
190     PROC=k8
191     #PROC=athlon
192   endif
193
194   ifeq ($(PROC),sparc64)
195     #The problem with sparc is the best stuff is in newer versions of gcc (post 3.0) only.
196     #This works for even old (2.96) versions of gcc and provides a small boost either way.
197     #A ultrasparc cpu is really v9 but the stock debian stable 3.0 gcc doesn't support it.
198     #So we go lowest common available by gcc and go a step down, still a step up from
199     #the default as we now have a better instruction set to work with. - Belgarath
200     PROC=ultrasparc
201     OPTIONS+=$(shell if $(CC) -mtune=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mtune=$(PROC)"; fi)
202     OPTIONS+=$(shell if $(CC) -mcpu=v8 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-mcpu=v8"; fi)
203     OPTIONS+=-fomit-frame-pointer
204   endif
205
206   ifeq ($(PROC),arm)
207     # The Cirrus logic is the only heavily shipping arm processor with a real floating point unit
208     ifeq ($(SUB_PROC),maverick)
209       OPTIONS+=-fsigned-char -mcpu=ep9312
210     else
211       ifeq ($(SUB_PROC),xscale)
212         OPTIONS+=-fsigned-char -mcpu=xscale
213       else
214         OPTIONS+=-fsigned-char 
215       endif
216     endif
217   endif
218 endif
219
220 ifeq ($(findstring -save-temps,$(ASTCFLAGS)),)
221 ASTCFLAGS+=-pipe
222 endif
223
224 ASTCFLAGS+=-Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG)
225
226 ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/autoconfig.h
227
228 ifeq ($(AST_DEVMODE),yes)
229   ASTCFLAGS+=-Werror -Wunused -Wundef $(AST_DECLARATION_AFTER_STATEMENT)
230 endif
231
232 ifneq ($(findstring BSD,$(OSARCH)),)
233   ASTCFLAGS+=-I/usr/local/include
234   ASTLDFLAGS+=-L/usr/local/lib
235 endif
236
237 ifneq ($(PROC),ultrasparc)
238   ASTCFLAGS+=$(shell if $(CC) -march=$(PROC) -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=$(PROC)"; fi)
239 endif
240
241 ifeq ($(PROC),ppc)
242   ASTCFLAGS+=-fsigned-char
243 endif
244
245 ifeq ($(OSARCH),FreeBSD)
246   # -V is understood by BSD Make, not by GNU make.
247   BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
248   ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
249 endif
250
251 ifeq ($(OSARCH),NetBSD)
252   ASTCFLAGS+=-pthread -I/usr/pkg/include
253 endif
254
255 ifeq ($(OSARCH),OpenBSD)
256   ASTCFLAGS+=-pthread
257 endif
258
259 ifeq ($(OSARCH),SunOS)
260   ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include
261 endif
262
263 ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) build_tools/make_version .)
264
265 ifneq ($(wildcard .version),)
266   ASTERISKVERSIONNUM:=$(shell $(AWK) -F. '{printf "%01d%02d%02d", $$1, $$2, $$3}' .version)
267   RPMVERSION:=$(shell sed 's/[-\/:]/_/g' .version)
268 else
269   RPMVERSION=unknown
270 endif
271
272 ifneq ($(wildcard .svn),)
273   ASTERISKVERSIONNUM:=999999
274 endif
275
276 # XXX MALLOC_DEBUG is probably unused, Makefile.moddir_rules adds the
277 #       value directly to ASTCFLAGS
278 # XXX BUSYDETECT is probably useless, the only similar reference is to
279 #       #ifdef BUSYDETECT in main/dsp.c
280 ASTCFLAGS+=$(MALLOC_DEBUG)$(BUSYDETECT)$(OPTIONS)
281
282 MOD_SUBDIRS:=channels pbx apps codecs formats cdr funcs main res $(LOCAL_MOD_SUBDIRS)
283 OTHER_SUBDIRS:=utils agi
284 SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
285 SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
286 SUBDIRS_CLEAN:=$(SUBDIRS:%=%-clean)
287 SUBDIRS_DIST_CLEAN:=$(SUBDIRS:%=%-dist-clean)
288 SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
289 MOD_SUBDIRS_EMBED_LDSCRIPT:=$(MOD_SUBDIRS:%=%-embed-ldscript)
290 MOD_SUBDIRS_EMBED_LDFLAGS:=$(MOD_SUBDIRS:%=%-embed-ldflags)
291 MOD_SUBDIRS_EMBED_LIBS:=$(MOD_SUBDIRS:%=%-embed-libs)
292 MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree)
293
294 ifneq ($(findstring darwin,$(OSARCH)),)
295   ASTCFLAGS+=-D__Darwin__
296   SOLINK=-dynamic -bundle -undefined suppress -force_flat_namespace
297 else
298 # These are used for all but Darwin
299   SOLINK=-shared -Xlinker -x
300   ifneq ($(findstring BSD,$(OSARCH)),)
301     LDFLAGS+=-L/usr/local/lib
302   endif
303 endif
304
305 ifeq ($(OSARCH),SunOS)
306   SOLINK=-shared -fpic -L/usr/local/ssl/lib
307 endif
308
309 # comment to print directories during submakes
310 #PRINT_DIR=yes
311
312 ifneq ($(PRINT_DIR)$(NOISY_BUILD),)
313 SUBMAKE=$(MAKE) --quiet
314 else
315 SUBMAKE=$(MAKE) --quiet --no-print-directory
316 endif
317
318 # This is used when generating the doxygen documentation
319 ifneq ($(DOT),:)
320   HAVEDOT=yes
321 else
322   HAVEDOT=no
323 endif
324
325 # $(MAKE) is printed in several places, and we want it to be a
326 # fixed size string. Define a variable whose name has also the
327 # same size, so we can easily align text.
328 ifeq ($(MAKE), gmake)
329         mK="gmake"
330 else
331         mK=" make"
332 endif
333
334 all: _all
335         @echo " +--------- Asterisk Build Complete ---------+"  
336         @echo " + Asterisk has successfully been built, and +"  
337         @echo " + can be installed by running:              +"
338         @echo " +                                           +"
339         @echo " +               $(mK) install               +"  
340         @echo " +-------------------------------------------+"  
341
342 _all: cleantest makeopts $(SUBDIRS)
343
344 makeopts: configure
345         @echo "****"
346         @echo "**** The configure script must be executed before running '$(MAKE)'." 
347         @echo "****               Please run \"./configure\"."
348         @echo "****"
349         @exit 1
350
351 menuselect.makeopts: menuselect/menuselect menuselect-tree
352         menuselect/menuselect --check-deps $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts
353
354 $(MOD_SUBDIRS_EMBED_LDSCRIPT):
355         @echo "EMBED_LDSCRIPTS+="`$(SUBMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
356
357 $(MOD_SUBDIRS_EMBED_LDFLAGS):
358         @echo "EMBED_LDFLAGS+="`$(SUBMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
359
360 $(MOD_SUBDIRS_EMBED_LIBS):
361         @echo "EMBED_LIBS+="`$(SUBMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
362
363 $(MOD_SUBDIRS_MENUSELECT_TREE):
364         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
365         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
366
367 makeopts.embed_rules: menuselect.makeopts
368         @echo "Generating embedded module rules ..."
369         @rm -f $@
370         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
371         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LDFLAGS)
372         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LIBS)
373
374 $(SUBDIRS): include/asterisk/version.h include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
375
376 ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
377     # Non-windows:
378     # ensure that all module subdirectories are processed before 'main' during
379     # a parallel build, since if there are modules selected to be embedded the
380     # directories containing them must be completed before the main Asterisk
381     # binary can be built
382 main: $(filter-out main,$(MOD_SUBDIRS))
383 else
384     # Windows: we need to build main (i.e. the asterisk dll) first,
385     # followed by res, followed by the other directories, because
386     # dll symbols must be resolved during linking and not at runtime.
387 D1:= $(filter-out main,$(MOD_SUBDIRS))
388 D1:= $(filter-out res,$(D1))
389
390 $(D1): res
391 res:    main
392 endif
393
394 $(MOD_SUBDIRS):
395         @ASTCFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(MAKE) $(PRINT_DIR) --no-builtin-rules -C $@ SUBDIR=$@ all
396
397 $(OTHER_SUBDIRS):
398         @ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(MAKE) $(PRINT_DIR) --no-builtin-rules -C $@ SUBDIR=$@ all
399
400 defaults.h: makeopts
401         @build_tools/make_defaults_h > $@.tmp
402         @cmp -s $@.tmp $@ || mv $@.tmp $@
403         @rm -f $@.tmp
404
405 include/asterisk/version.h:
406         @build_tools/make_version_h > $@.tmp
407         @cmp -s $@.tmp $@ || mv $@.tmp $@
408         @rm -f $@.tmp
409
410 include/asterisk/buildopts.h: menuselect.makeopts
411         @build_tools/make_buildopts_h > $@.tmp
412         @cmp -s $@.tmp $@ || mv $@.tmp $@
413         @rm -f $@.tmp
414
415 include/asterisk/build.h:
416         @build_tools/make_build_h > $@.tmp
417         @cmp -s $@.tmp $@ || mv $@.tmp $@
418         @rm -f $@.tmp
419
420 $(SUBDIRS_CLEAN):
421         @$(MAKE) $(PRINT_DIR) -C $(@:-clean=) clean
422
423 $(SUBDIRS_DIST_CLEAN):
424         @$(MAKE) $(PRINT_DIR) -C $(@:-dist-clean=) dist-clean
425
426 clean: $(SUBDIRS_CLEAN)
427         rm -f defaults.h
428         rm -f include/asterisk/build.h
429         rm -f include/asterisk/version.h
430         @$(MAKE) -C menuselect clean
431         cp -f .cleancount .lastclean
432
433 dist-clean: distclean
434
435 distclean: $(SUBDIRS_DIST_CLEAN) clean
436         @$(MAKE) -C menuselect dist-clean
437         @$(MAKE) -C sounds dist-clean
438         rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
439         rm -f makeopts.embed_rules
440         rm -f config.log config.status
441         rm -rf autom4te.cache
442         rm -f include/asterisk/autoconfig.h
443         rm -f include/asterisk/buildopts.h
444         rm -rf doc/api
445         rm -f build_tools/menuselect-deps
446
447 datafiles: _all
448         if [ x`$(ID) -un` = xroot ]; then CFLAGS="$(ASTCFLAGS)" sh build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; fi
449 # Should static HTTP be installed during make samples or even with its own target ala
450 # webvoicemail?  There are portions here that *could* be customized but might also be
451 # improved a lot.  I'll put it here for now.
452         mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http
453         for x in static-http/*; do \
454                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
455         done
456         mkdir -p $(DESTDIR)$(ASTDATADIR)/images
457         for x in images/*.jpg; do \
458                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \
459         done
460         mkdir -p $(DESTDIR)$(AGI_DIR)
461         $(MAKE) -C sounds install
462
463 update: 
464         @if [ -d .svn ]; then \
465                 echo "Updating from Subversion..." ; \
466                 svn update | tee update.out; \
467                 rm -f .version; \
468                 if [ `grep -c ^C update.out` -gt 0 ]; then \
469                         echo ; echo "The following files have conflicts:" ; \
470                         grep ^C update.out | cut -b4- ; \
471                 fi ; \
472                 rm -f update.out; \
473         else \
474                 echo "Not under version control";  \
475         fi
476
477 NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h))
478 OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h)))
479
480 bininstall: _all
481         mkdir -p $(DESTDIR)$(MODULES_DIR)
482         mkdir -p $(DESTDIR)$(ASTSBINDIR)
483         mkdir -p $(DESTDIR)$(ASTETCDIR)
484         mkdir -p $(DESTDIR)$(ASTBINDIR)
485         mkdir -p $(DESTDIR)$(ASTVARRUNDIR)
486         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail
487         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate
488         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system
489         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp
490         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme
491         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor
492         $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/
493         $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
494         $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
495         $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/
496         if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \
497                 cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\
498                 chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\
499         fi
500         $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR)
501         $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir)
502         $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR)
503         if [ -n "$(OLDHEADERS)" ]; then \
504                 rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
505         fi
506         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv
507         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom
508         mkdir -p $(DESTDIR)$(ASTDATADIR)/keys
509         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware
510         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax
511         mkdir -p $(DESTDIR)$(ASTMANDIR)/man8
512         $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys
513         $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys
514         $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
515         $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
516         $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
517         $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
518         if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
519                 $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
520         fi
521
522 $(SUBDIRS_INSTALL):
523         @DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(MAKE) --quiet $(PRINT_DIR) -C $(@:-install=) install
524
525 NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
526 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
527
528 oldmodcheck:
529         @if [ -n "$(OLDMODS)" ]; then \
530                 echo " WARNING WARNING WARNING" ;\
531                 echo "" ;\
532                 echo " Your Asterisk modules directory, located at" ;\
533                 echo " $(DESTDIR)$(MODULES_DIR)" ;\
534                 echo " contains modules that were not installed by this " ;\
535                 echo " version of Asterisk. Please ensure that these" ;\
536                 echo " modules are compatible with this version before" ;\
537                 echo " attempting to run Asterisk." ;\
538                 echo "" ;\
539                 for f in $(OLDMODS); do \
540                         echo "    $$f" ;\
541                 done ;\
542                 echo "" ;\
543                 echo " WARNING WARNING WARNING" ;\
544         fi
545
546 install: datafiles bininstall $(SUBDIRS_INSTALL)
547         @if [ -x /usr/sbin/asterisk-post-install ]; then \
548                 /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
549         fi
550         @echo " +---- Asterisk Installation Complete -------+"  
551         @echo " +                                           +"
552         @echo " +    YOU MUST READ THE SECURITY DOCUMENT    +"
553         @echo " +                                           +"
554         @echo " + Asterisk has successfully been installed. +"  
555         @echo " + If you would like to install the sample   +"  
556         @echo " + configuration files (overwriting any      +"
557         @echo " + existing config files), run:              +"  
558         @echo " +                                           +"
559         @echo " +               $(mK) samples               +"
560         @echo " +                                           +"
561         @echo " +-----------------  or ---------------------+"
562         @echo " +                                           +"
563         @echo " + You can go ahead and install the asterisk +"
564         @echo " + program documentation now or later run:   +"
565         @echo " +                                           +"
566         @echo " +              $(mK) progdocs               +"
567         @echo " +                                           +"
568         @echo " + **Note** This requires that you have      +"
569         @echo " + doxygen installed on your local system    +"
570         @echo " +-------------------------------------------+"
571         @$(MAKE) -s oldmodcheck
572
573 upgrade: bininstall
574
575 # XXX why *.adsi is installed first ?
576 adsi:
577         @echo Installing adsi config files...
578         @mkdir -p $(DESTDIR)$(ASTETCDIR)
579         @for x in configs/*.adsi; do \
580                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
581                 if [ -f $${dst} ] ; then \
582                         echo "Overwriting $$x" ; \
583                 else \
584                         echo "Installing $$x" ; \
585                 fi ; \
586                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \
587         done
588
589 samples: adsi
590         @echo Installing other config files...
591         @mkdir -p $(DESTDIR)$(ASTETCDIR)
592         @for x in configs/*.sample; do \
593                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ;        \
594                 if [ -f $${dst} ]; then \
595                         if [ "$(OVERWRITE)" = "y" ]; then \
596                                 if cmp -s $${dst} $$x ; then \
597                                         echo "Config file $$x is unchanged"; \
598                                         continue; \
599                                 fi ; \
600                                 mv -f $${dst} $${dst}.old ; \
601                         else \
602                                 echo "Skipping config file $$x"; \
603                                 continue; \
604                         fi ;\
605                 fi ; \
606                 echo "Installing file $$x"; \
607                 $(INSTALL) -m 644 $$x $${dst} ;\
608         done
609         @if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \
610                 echo "Creating asterisk.conf"; \
611                 ( \
612                 echo "[directories](!) ; remove the (!) to enable this" ; \
613                 echo "astetcdir => $(ASTETCDIR)" ; \
614                 echo "astmoddir => $(MODULES_DIR)" ; \
615                 echo "astvarlibdir => $(ASTVARLIBDIR)" ; \
616                 echo "astdbdir => $(ASTDBDIR)" ; \
617                 echo "astkeydir => $(ASTKEYDIR)" ; \
618                 echo "astdatadir => $(ASTDATADIR)" ; \
619                 echo "astagidir => $(AGI_DIR)" ; \
620                 echo "astspooldir => $(ASTSPOOLDIR)" ; \
621                 echo "astrundir => $(ASTVARRUNDIR)" ; \
622                 echo "astlogdir => $(ASTLOGDIR)" ; \
623                 echo "" ; \
624                 echo ";[options]" ; \
625                 echo ";verbose = 3" ; \
626                 echo ";debug = 3" ; \
627                 echo ";alwaysfork = yes ; same as -F at startup" ; \
628                 echo ";nofork = yes ; same as -f at startup" ; \
629                 echo ";quiet = yes ; same as -q at startup" ; \
630                 echo ";timestamp = yes ; same as -T at startup" ; \
631                 echo ";execincludes = yes ; support #exec in config files" ; \
632                 echo ";console = yes ; Run as console (same as -c at startup)" ; \
633                 echo ";highpriority = yes ; Run realtime priority (same as -p at startup)" ; \
634                 echo ";initcrypto = yes ; Initialize crypto keys (same as -i at startup)" ; \
635                 echo ";nocolor = yes ; Disable console colors" ; \
636                 echo ";dontwarn = yes ; Disable some warnings" ; \
637                 echo ";dumpcore = yes ; Dump core on crash (same as -g at startup)" ; \
638                 echo ";languageprefix = yes ; Use the new sound prefix path syntax" ; \
639                 echo ";internal_timing = yes" ; \
640                 echo ";systemname = my_system_name ; prefix uniqueid with a system name for global uniqueness issues" ; \
641                 echo ";autosystemname = yes ; automatically set systemname to hostname - uses 'localhost' on failure, or systemname if set" ; \
642                 echo ";maxcalls = 10 ; Maximum amount of calls allowed" ; \
643                 echo ";maxload = 0.9 ; Asterisk stops accepting new calls if the load average exceed this limit" ; \
644                 echo ";maxfiles = 1000 ; Maximum amount of openfiles" ; \
645                 echo ";minmemfree = 1 ; in MBs, Asterisk stops accepting new calls if the amount of free memory falls below this watermark" ; \
646                 echo ";cache_record_files = yes ; Cache recorded sound files to another directory during recording" ; \
647                 echo ";record_cache_dir = /tmp ; Specify cache directory (used in cnjunction with cache_record_files)" ; \
648                 echo ";transmit_silence_during_record = yes ; Transmit SLINEAR silence while a channel is being recorded" ; \
649                 echo ";transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of directly" ; \
650                 echo ";runuser = asterisk ; The user to run as" ; \
651                 echo ";rungroup = asterisk ; The group to run as" ; \
652                 echo "" ; \
653                 echo "; Changing the following lines may compromise your security." ; \
654                 echo ";[files]" ; \
655                 echo ";astctlpermissions = 0660" ; \
656                 echo ";astctlowner = root" ; \
657                 echo ";astctlgroup = apache" ; \
658                 echo ";astctl = asterisk.ctl" ; \
659                 ) > $(DESTDIR)$(ASTCONFPATH) ; \
660         else \
661                 echo "Skipping asterisk.conf creation"; \
662         fi
663         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
664         build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
665
666 webvmail:
667         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
668         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
669         $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
670         mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
671         for x in images/*.gif; do \
672                 $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
673         done
674         @echo " +--------- Asterisk Web Voicemail ----------+"  
675         @echo " +                                           +"
676         @echo " + Asterisk Web Voicemail is installed in    +"
677         @echo " + your cgi-bin directory:                   +"
678         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
679         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
680         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
681         @echo " +                                           +"
682         @echo " + Other static items have been stored in:   +"
683         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
684         @echo " +                                           +"
685         @echo " + If these paths do not match your httpd    +"
686         @echo " + installation, correct the definitions     +"
687         @echo " + in your Makefile of HTTP_CGIDIR and       +"
688         @echo " + HTTP_DOCSDIR                              +"
689         @echo " +                                           +"
690         @echo " +-------------------------------------------+"  
691
692 spec: 
693         sed "s/^Version:.*/Version: $(RPMVERSION)/g" redhat/asterisk.spec > asterisk.spec ; \
694
695 rpm: __rpm
696
697 __rpm: include/asterisk/version.h include/asterisk/buildopts.h spec
698         rm -rf /tmp/asterisk ; \
699         mkdir -p /tmp/asterisk/redhat/RPMS/i386 ; \
700         $(MAKE) DESTDIR=/tmp/asterisk install ; \
701         $(MAKE) DESTDIR=/tmp/asterisk samples ; \
702         mkdir -p /tmp/asterisk/etc/rc.d/init.d ; \
703         cp -f contrib/init.d/rc.redhat.asterisk /tmp/asterisk/etc/rc.d/init.d/asterisk ; \
704         rpmbuild --rcfile /usr/lib/rpm/rpmrc:redhat/rpmrc -bb asterisk.spec
705
706 progdocs:
707         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
708         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
709
710 config:
711         @if [ "${OSARCH}" = "linux-gnu" ]; then \
712                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
713                         $(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
714                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
715                 elif [ -f /etc/debian_version ]; then \
716                         $(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk $(DESTDIR)/etc/init.d/asterisk; \
717                         if [ -z "$(DESTDIR)" ]; then /usr/sbin/update-rc.d asterisk start 50 2 3 4 5 . stop 91 2 3 4 5 .; fi; \
718                 elif [ -f /etc/gentoo-release ]; then \
719                         $(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk $(DESTDIR)/etc/init.d/asterisk; \
720                         if [ -z "$(DESTDIR)" ]; then /sbin/rc-update add asterisk default; fi; \
721                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ]; then \
722                         $(INSTALL) -m 755 contrib/init.d/rc.mandrake.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
723                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
724                 elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
725                         $(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \
726                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
727                 elif [ -f /etc/slackware-version ]; then \
728                         echo "Slackware is not currently supported, although an init script does exist for it." \
729                 else \
730                         echo "We could not install init scripts for your distribution."; \
731                 fi \
732         else \
733                 echo "We could not install init scripts for your operating system."; \
734         fi
735
736 sounds:
737         $(MAKE) -C sounds all
738
739 # If the cleancount has been changed, force a make clean.
740 # .cleancount is the global clean count, and .lastclean is the 
741 # last clean count we had
742
743 cleantest:
744         @cmp -s .cleancount .lastclean || $(MAKE) clean
745
746 $(SUBDIRS_UNINSTALL):
747         @$(MAKE) $(PRINT_DIR) -C $(@:-uninstall=) uninstall
748
749 _uninstall: $(SUBDIRS_UNINSTALL)
750         rm -f $(DESTDIR)$(MODULES_DIR)/*
751         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
752         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
753         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
754         rm -rf $(DESTDIR)$(ASTHEADERDIR)
755         rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
756         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
757         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
758         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
759         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
760         $(MAKE) -C sounds uninstall
761
762 uninstall: _uninstall
763         @echo " +--------- Asterisk Uninstall Complete -----+"  
764         @echo " + Asterisk binaries, sounds, man pages,     +"  
765         @echo " + headers, modules, and firmware builds,    +"  
766         @echo " + have all been uninstalled.                +"  
767         @echo " +                                           +"
768         @echo " + To remove ALL traces of Asterisk,         +"
769         @echo " + including configuration, spool            +"
770         @echo " + directories, and logs, run the following  +"
771         @echo " + command:                                  +"
772         @echo " +                                           +"
773         @echo " +            $(mK) uninstall-all            +"  
774         @echo " +-------------------------------------------+"  
775
776 uninstall-all: _uninstall
777         rm -rf $(DESTDIR)$(ASTLIBDIR)
778         rm -rf $(DESTDIR)$(ASTVARLIBDIR)
779         rm -rf $(DESTDIR)$(ASTDATADIR)
780         rm -rf $(DESTDIR)$(ASTSPOOLDIR)
781         rm -rf $(DESTDIR)$(ASTETCDIR)
782         rm -rf $(DESTDIR)$(ASTLOGDIR)
783
784 menuconfig: menuselect
785
786 gmenuconfig: gmenuselect
787
788 menuselect: menuselect/menuselect menuselect-tree
789         -@menuselect/menuselect $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
790
791 gmenuselect: menuselect/gmenuselect menuselect-tree
792         -@menuselect/gmenuselect $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
793
794 # options for make in menuselect/
795 MAKE_MENUSELECT=CC="$(HOST_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
796
797 menuselect/menuselect: menuselect/makeopts
798         $(MAKE_MENUSELECT)
799
800 menuselect/gmenuselect: menuselect/makeopts
801         $(MAKE_MENUSELECT) gmenuselect
802
803 menuselect/makeopts:
804         $(MAKE_MENUSELECT) makeopts
805
806 menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) build_tools/cflags.xml sounds/sounds.xml build_tools/embed_modules.xml configure
807         @echo "Generating input for menuselect ..."
808         @echo "<?xml version=\"1.0\"?>" > $@
809         @echo >> $@
810         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
811         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SUBMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
812         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SUBMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
813         @cat build_tools/cflags.xml >> $@
814         @cat build_tools/embed_modules.xml >> $@
815         @cat sounds/sounds.xml >> $@
816         @echo "</menu>" >> $@
817
818 pdf: asterisk.pdf
819 asterisk.pdf:
820         $(MAKE) -C doc/tex asterisk.pdf
821
822 .PHONY: menuselect main sounds clean dist-clean distclean all prereqs cleantest uninstall _uninstall uninstall-all pdf dont-optimize $(SUBDIRS_INSTALL) $(SUBDIRS_DIST_CLEAN) $(SUBDIRS_CLEAN) $(SUBDIRS_UNINSTALL) $(SUBDIRS) $(MOD_SUBDIRS_EMBED_LDSCRIPT) $(MOD_SUBDIRS_EMBED_LDFLAGS) $(MOD_SUBDIRS_EMBED_LIBS) include/asterisk/version.h