Added a new module, res_phoneprov, which allows auto-provisioning of phones
[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)
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 -D_XPG4_2
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 tests 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 SILENTMAKE:=$(MAKE) --quiet --no-print-directory
313 ifneq ($(PRINT_DIR)$(NOISY_BUILD),)
314 SUBMAKE:=$(MAKE) --quiet
315 else
316 SUBMAKE:=$(MAKE) --quiet --no-print-directory
317 endif
318
319 # This is used when generating the doxygen documentation
320 ifneq ($(DOT),:)
321   HAVEDOT=yes
322 else
323   HAVEDOT=no
324 endif
325
326 # $(MAKE) is printed in several places, and we want it to be a
327 # fixed size string. Define a variable whose name has also the
328 # same size, so we can easily align text.
329 ifeq ($(MAKE), gmake)
330         mK="gmake"
331 else
332         mK=" make"
333 endif
334
335 all: _all
336         @echo " +--------- Asterisk Build Complete ---------+"  
337         @echo " + Asterisk has successfully been built, and +"  
338         @echo " + can be installed by running:              +"
339         @echo " +                                           +"
340         @echo " +               $(mK) install               +"  
341         @echo " +-------------------------------------------+"  
342
343 _all: cleantest makeopts $(SUBDIRS)
344
345 makeopts: configure
346         @echo "****"
347         @echo "**** The configure script must be executed before running '$(MAKE)'." 
348         @echo "****               Please run \"./configure\"."
349         @echo "****"
350         @exit 1
351
352 menuselect.makeopts: menuselect/menuselect menuselect-tree
353         menuselect/menuselect --check-deps $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS) menuselect.makeopts
354
355 $(MOD_SUBDIRS_EMBED_LDSCRIPT):
356         @echo "EMBED_LDSCRIPTS+="`$(SILENTMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
357
358 $(MOD_SUBDIRS_EMBED_LDFLAGS):
359         @echo "EMBED_LDFLAGS+="`$(SILENTMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
360
361 $(MOD_SUBDIRS_EMBED_LIBS):
362         @echo "EMBED_LIBS+="`$(SILENTMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
363
364 $(MOD_SUBDIRS_MENUSELECT_TREE):
365         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
366         @$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
367
368 makeopts.embed_rules: menuselect.makeopts
369         @echo "Generating embedded module rules ..."
370         @rm -f $@
371         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
372         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LDFLAGS)
373         @$(MAKE) $(PRINT_DIR) $(MOD_SUBDIRS_EMBED_LIBS)
374
375 $(SUBDIRS): main/version.c include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
376
377 ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
378     # Non-windows:
379     # ensure that all module subdirectories are processed before 'main' during
380     # a parallel build, since if there are modules selected to be embedded the
381     # directories containing them must be completed before the main Asterisk
382     # binary can be built
383 main: $(filter-out main,$(MOD_SUBDIRS))
384 else
385     # Windows: we need to build main (i.e. the asterisk dll) first,
386     # followed by res, followed by the other directories, because
387     # dll symbols must be resolved during linking and not at runtime.
388 D1:= $(filter-out main,$(MOD_SUBDIRS))
389 D1:= $(filter-out res,$(D1))
390
391 $(D1): res
392 res:    main
393 endif
394
395 $(MOD_SUBDIRS):
396         @ASTCFLAGS="$(MOD_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(MAKE) $(PRINT_DIR) --no-builtin-rules -C $@ SUBDIR=$@ all
397
398 $(OTHER_SUBDIRS):
399         @ASTCFLAGS="$(OTHER_SUBDIR_CFLAGS) $(ASTCFLAGS)" ASTLDFLAGS="$(ASTLDFLAGS)" $(MAKE) $(PRINT_DIR) --no-builtin-rules -C $@ SUBDIR=$@ all
400
401 defaults.h: makeopts
402         @build_tools/make_defaults_h > $@.tmp
403         @cmp -s $@.tmp $@ || mv $@.tmp $@
404         @rm -f $@.tmp
405
406 main/version.c:
407         @build_tools/make_version_c > $@.tmp
408         @cmp -s $@.tmp $@ || mv $@.tmp $@
409         @rm -f $@.tmp
410
411 include/asterisk/buildopts.h: menuselect.makeopts
412         @build_tools/make_buildopts_h > $@.tmp
413         @cmp -s $@.tmp $@ || mv $@.tmp $@
414         @rm -f $@.tmp
415
416 include/asterisk/build.h:
417         @build_tools/make_build_h > $@.tmp
418         @cmp -s $@.tmp $@ || mv $@.tmp $@
419         @rm -f $@.tmp
420
421 $(SUBDIRS_CLEAN):
422         @$(MAKE) $(PRINT_DIR) -C $(@:-clean=) clean
423
424 $(SUBDIRS_DIST_CLEAN):
425         @$(MAKE) $(PRINT_DIR) -C $(@:-dist-clean=) dist-clean
426
427 clean: $(SUBDIRS_CLEAN)
428         rm -f defaults.h
429         rm -f include/asterisk/build.h
430         rm -f main/version.c
431         @$(MAKE) -C menuselect clean
432         cp -f .cleancount .lastclean
433
434 dist-clean: distclean
435
436 distclean: $(SUBDIRS_DIST_CLEAN) clean
437         @$(MAKE) -C menuselect dist-clean
438         @$(MAKE) -C sounds dist-clean
439         rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
440         rm -f makeopts.embed_rules
441         rm -f config.log config.status
442         rm -rf autom4te.cache
443         rm -f include/asterisk/autoconfig.h
444         rm -f include/asterisk/buildopts.h
445         rm -rf doc/api
446         rm -f build_tools/menuselect-deps
447
448 datafiles: _all
449         if [ x`$(ID) -un` = xroot ]; then CFLAGS="$(ASTCFLAGS)" sh build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; fi
450 # Should static HTTP be installed during make samples or even with its own target ala
451 # webvoicemail?  There are portions here that *could* be customized but might also be
452 # improved a lot.  I'll put it here for now.
453         mkdir -p $(DESTDIR)$(ASTDATADIR)/phoneprov
454         for x in phoneprov/*; do \
455                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/phoneprov ; \
456         done
457         mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http
458         for x in static-http/*; do \
459                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
460         done
461         if [ -d doc/tex/asterisk ] ; then \
462                         mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \
463                         for n in doc/tex/asterisk/* ; do \
464                                 $(INSTALL) -m 644 $$n $(DESTDIR)$(ASTDATADIR)/static-http/docs ; \
465                         done \
466         fi
467         mkdir -p $(DESTDIR)$(ASTDATADIR)/images
468         for x in images/*.jpg; do \
469                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \
470         done
471         mkdir -p $(DESTDIR)$(AGI_DIR)
472         $(MAKE) -C sounds install
473
474 update: 
475         @if [ -d .svn ]; then \
476                 echo "Updating from Subversion..." ; \
477                 svn update | tee update.out; \
478                 rm -f .version; \
479                 if [ `grep -c ^C update.out` -gt 0 ]; then \
480                         echo ; echo "The following files have conflicts:" ; \
481                         grep ^C update.out | cut -b4- ; \
482                 fi ; \
483                 rm -f update.out; \
484         else \
485                 echo "Not under version control";  \
486         fi
487
488 NEWHEADERS=$(notdir $(wildcard include/asterisk/*.h))
489 OLDHEADERS=$(filter-out $(NEWHEADERS),$(notdir $(wildcard $(DESTDIR)$(ASTHEADERDIR)/*.h)))
490
491 bininstall: _all
492         mkdir -p $(DESTDIR)$(MODULES_DIR)
493         mkdir -p $(DESTDIR)$(ASTSBINDIR)
494         mkdir -p $(DESTDIR)$(ASTETCDIR)
495         mkdir -p $(DESTDIR)$(ASTBINDIR)
496         mkdir -p $(DESTDIR)$(ASTVARRUNDIR)
497         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail
498         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/dictate
499         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/system
500         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/tmp
501         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme
502         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor
503         $(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/
504         $(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
505         $(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
506         $(INSTALL) -m 755 contrib/scripts/autosupport $(DESTDIR)$(ASTSBINDIR)/
507         if [ ! -f $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ]; then \
508                 cat contrib/scripts/safe_asterisk | sed 's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;' > $(DESTDIR)$(ASTSBINDIR)/safe_asterisk ;\
509                 chmod 755 $(DESTDIR)$(ASTSBINDIR)/safe_asterisk;\
510         fi
511         $(INSTALL) -d $(DESTDIR)$(ASTHEADERDIR)
512         $(INSTALL) -m 644 include/asterisk.h $(DESTDIR)$(includedir)
513         $(INSTALL) -m 644 include/asterisk/*.h $(DESTDIR)$(ASTHEADERDIR)
514         if [ -n "$(OLDHEADERS)" ]; then \
515                 rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
516         fi
517         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-csv
518         mkdir -p $(DESTDIR)$(ASTLOGDIR)/cdr-custom
519         mkdir -p $(DESTDIR)$(ASTDATADIR)/keys
520         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware
521         mkdir -p $(DESTDIR)$(ASTDATADIR)/firmware/iax
522         mkdir -p $(DESTDIR)$(ASTMANDIR)/man8
523         $(INSTALL) -m 644 keys/iaxtel.pub $(DESTDIR)$(ASTDATADIR)/keys
524         $(INSTALL) -m 644 keys/freeworlddialup.pub $(DESTDIR)$(ASTDATADIR)/keys
525         $(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
526         $(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
527         $(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
528         $(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
529         if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
530                 $(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
531         fi
532
533 $(SUBDIRS_INSTALL):
534         @DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(MAKE) --quiet $(PRINT_DIR) -C $(@:-install=) install
535
536 NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
537 OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
538
539 oldmodcheck:
540         @if [ -n "$(OLDMODS)" ]; then \
541                 echo " WARNING WARNING WARNING" ;\
542                 echo "" ;\
543                 echo " Your Asterisk modules directory, located at" ;\
544                 echo " $(DESTDIR)$(MODULES_DIR)" ;\
545                 echo " contains modules that were not installed by this " ;\
546                 echo " version of Asterisk. Please ensure that these" ;\
547                 echo " modules are compatible with this version before" ;\
548                 echo " attempting to run Asterisk." ;\
549                 echo "" ;\
550                 for f in $(OLDMODS); do \
551                         echo "    $$f" ;\
552                 done ;\
553                 echo "" ;\
554                 echo " WARNING WARNING WARNING" ;\
555         fi
556
557 install: datafiles bininstall $(SUBDIRS_INSTALL)
558         @if [ -x /usr/sbin/asterisk-post-install ]; then \
559                 /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
560         fi
561         @echo " +---- Asterisk Installation Complete -------+"  
562         @echo " +                                           +"
563         @echo " +    YOU MUST READ THE SECURITY DOCUMENT    +"
564         @echo " +                                           +"
565         @echo " + Asterisk has successfully been installed. +"  
566         @echo " + If you would like to install the sample   +"  
567         @echo " + configuration files (overwriting any      +"
568         @echo " + existing config files), run:              +"  
569         @echo " +                                           +"
570         @echo " +               $(mK) samples               +"
571         @echo " +                                           +"
572         @echo " +-----------------  or ---------------------+"
573         @echo " +                                           +"
574         @echo " + You can go ahead and install the asterisk +"
575         @echo " + program documentation now or later run:   +"
576         @echo " +                                           +"
577         @echo " +              $(mK) progdocs               +"
578         @echo " +                                           +"
579         @echo " + **Note** This requires that you have      +"
580         @echo " + doxygen installed on your local system    +"
581         @echo " +-------------------------------------------+"
582         @$(MAKE) -s oldmodcheck
583
584 upgrade: bininstall
585
586 # XXX why *.adsi is installed first ?
587 adsi:
588         @echo Installing adsi config files...
589         @mkdir -p $(DESTDIR)$(ASTETCDIR)
590         @for x in configs/*.adsi; do \
591                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
592                 if [ -f $${dst} ] ; then \
593                         echo "Overwriting $$x" ; \
594                 else \
595                         echo "Installing $$x" ; \
596                 fi ; \
597                 $(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x` ; \
598         done
599
600 samples: adsi
601         @echo Installing other config files...
602         @mkdir -p $(DESTDIR)$(ASTETCDIR)
603         @for x in configs/*.sample; do \
604                 dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ;        \
605                 if [ -f $${dst} ]; then \
606                         if [ "$(OVERWRITE)" = "y" ]; then \
607                                 if cmp -s $${dst} $$x ; then \
608                                         echo "Config file $$x is unchanged"; \
609                                         continue; \
610                                 fi ; \
611                                 mv -f $${dst} $${dst}.old ; \
612                         else \
613                                 echo "Skipping config file $$x"; \
614                                 continue; \
615                         fi ;\
616                 fi ; \
617                 echo "Installing file $$x"; \
618                 $(INSTALL) -m 644 $$x $${dst} ;\
619         done
620         @if [ "$(OVERWRITE)" = "y" ] || [ ! -f $(DESTDIR)$(ASTCONFPATH) ]; then \
621                 echo "Creating asterisk.conf"; \
622                 ( \
623                 echo "[directories](!) ; remove the (!) to enable this" ; \
624                 echo "astetcdir => $(ASTETCDIR)" ; \
625                 echo "astmoddir => $(MODULES_DIR)" ; \
626                 echo "astvarlibdir => $(ASTVARLIBDIR)" ; \
627                 echo "astdbdir => $(ASTDBDIR)" ; \
628                 echo "astkeydir => $(ASTKEYDIR)" ; \
629                 echo "astdatadir => $(ASTDATADIR)" ; \
630                 echo "astagidir => $(AGI_DIR)" ; \
631                 echo "astspooldir => $(ASTSPOOLDIR)" ; \
632                 echo "astrundir => $(ASTVARRUNDIR)" ; \
633                 echo "astlogdir => $(ASTLOGDIR)" ; \
634                 echo "" ; \
635                 echo ";[options]" ; \
636                 echo ";verbose = 3" ; \
637                 echo ";debug = 3" ; \
638                 echo ";alwaysfork = yes ; same as -F at startup" ; \
639                 echo ";nofork = yes ; same as -f at startup" ; \
640                 echo ";quiet = yes ; same as -q at startup" ; \
641                 echo ";timestamp = yes ; same as -T at startup" ; \
642                 echo ";execincludes = yes ; support #exec in config files" ; \
643                 echo ";console = yes ; Run as console (same as -c at startup)" ; \
644                 echo ";highpriority = yes ; Run realtime priority (same as -p at startup)" ; \
645                 echo ";initcrypto = yes ; Initialize crypto keys (same as -i at startup)" ; \
646                 echo ";nocolor = yes ; Disable console colors" ; \
647                 echo ";dontwarn = yes ; Disable some warnings" ; \
648                 echo ";dumpcore = yes ; Dump core on crash (same as -g at startup)" ; \
649                 echo ";languageprefix = yes ; Use the new sound prefix path syntax" ; \
650                 echo ";internal_timing = yes" ; \
651                 echo ";systemname = my_system_name ; prefix uniqueid with a system name for global uniqueness issues" ; \
652                 echo ";autosystemname = yes ; automatically set systemname to hostname - uses 'localhost' on failure, or systemname if set" ; \
653                 echo ";maxcalls = 10 ; Maximum amount of calls allowed" ; \
654                 echo ";maxload = 0.9 ; Asterisk stops accepting new calls if the load average exceed this limit" ; \
655                 echo ";maxfiles = 1000 ; Maximum amount of openfiles" ; \
656                 echo ";minmemfree = 1 ; in MBs, Asterisk stops accepting new calls if the amount of free memory falls below this watermark" ; \
657                 echo ";cache_record_files = yes ; Cache recorded sound files to another directory during recording" ; \
658                 echo ";record_cache_dir = /tmp ; Specify cache directory (used in cnjunction with cache_record_files)" ; \
659                 echo ";transmit_silence_during_record = yes ; Transmit SLINEAR silence while a channel is being recorded" ; \
660                 echo ";transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of directly" ; \
661                 echo ";runuser = asterisk ; The user to run as" ; \
662                 echo ";rungroup = asterisk ; The group to run as" ; \
663                 echo "" ; \
664                 echo "; Changing the following lines may compromise your security." ; \
665                 echo ";[files]" ; \
666                 echo ";astctlpermissions = 0660" ; \
667                 echo ";astctlowner = root" ; \
668                 echo ";astctlgroup = apache" ; \
669                 echo ";astctl = asterisk.ctl" ; \
670                 ) > $(DESTDIR)$(ASTCONFPATH) ; \
671         else \
672                 echo "Skipping asterisk.conf creation"; \
673         fi
674         mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
675         build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
676
677 webvmail:
678         @[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
679         @[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
680         $(INSTALL) -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
681         mkdir -p $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
682         for x in images/*.gif; do \
683                 $(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
684         done
685         @echo " +--------- Asterisk Web Voicemail ----------+"  
686         @echo " +                                           +"
687         @echo " + Asterisk Web Voicemail is installed in    +"
688         @echo " + your cgi-bin directory:                   +"
689         @echo " + $(DESTDIR)$(HTTP_CGIDIR)"
690         @echo " + IT USES A SETUID ROOT PERL SCRIPT, SO     +"
691         @echo " + IF YOU DON'T LIKE THAT, UNINSTALL IT!     +"
692         @echo " +                                           +"
693         @echo " + Other static items have been stored in:   +"
694         @echo " + $(DESTDIR)$(HTTP_DOCSDIR)"
695         @echo " +                                           +"
696         @echo " + If these paths do not match your httpd    +"
697         @echo " + installation, correct the definitions     +"
698         @echo " + in your Makefile of HTTP_CGIDIR and       +"
699         @echo " + HTTP_DOCSDIR                              +"
700         @echo " +                                           +"
701         @echo " +-------------------------------------------+"  
702
703 spec: 
704         sed "s/^Version:.*/Version: $(RPMVERSION)/g" redhat/asterisk.spec > asterisk.spec ; \
705
706 rpm: __rpm
707
708 __rpm: main/version.c include/asterisk/buildopts.h spec
709         rm -rf /tmp/asterisk ; \
710         mkdir -p /tmp/asterisk/redhat/RPMS/i386 ; \
711         $(MAKE) DESTDIR=/tmp/asterisk install ; \
712         $(MAKE) DESTDIR=/tmp/asterisk samples ; \
713         mkdir -p /tmp/asterisk/etc/rc.d/init.d ; \
714         cp -f contrib/init.d/rc.redhat.asterisk /tmp/asterisk/etc/rc.d/init.d/asterisk ; \
715         rpmbuild --rcfile /usr/lib/rpm/rpmrc:redhat/rpmrc -bb asterisk.spec
716
717 progdocs:
718         (cat contrib/asterisk-ng-doxygen; echo "HAVE_DOT=$(HAVEDOT)"; \
719         echo "PROJECT_NUMBER=$(ASTERISKVERSION)") | doxygen - 
720
721 config:
722         @if [ "${OSARCH}" = "linux-gnu" ]; then \
723                 if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
724                         $(INSTALL) -m 755 contrib/init.d/rc.redhat.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
725                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
726                 elif [ -f /etc/debian_version ]; then \
727                         $(INSTALL) -m 755 contrib/init.d/rc.debian.asterisk $(DESTDIR)/etc/init.d/asterisk; \
728                         if [ -z "$(DESTDIR)" ]; then /usr/sbin/update-rc.d asterisk start 50 2 3 4 5 . stop 91 2 3 4 5 .; fi; \
729                 elif [ -f /etc/gentoo-release ]; then \
730                         $(INSTALL) -m 755 contrib/init.d/rc.gentoo.asterisk $(DESTDIR)/etc/init.d/asterisk; \
731                         if [ -z "$(DESTDIR)" ]; then /sbin/rc-update add asterisk default; fi; \
732                 elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ]; then \
733                         $(INSTALL) -m 755 contrib/init.d/rc.mandrake.asterisk $(DESTDIR)/etc/rc.d/init.d/asterisk; \
734                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
735                 elif [ -f /etc/SuSE-release -o -f /etc/novell-release ]; then \
736                         $(INSTALL) -m 755 contrib/init.d/rc.suse.asterisk $(DESTDIR)/etc/init.d/asterisk; \
737                         if [ -z "$(DESTDIR)" ]; then /sbin/chkconfig --add asterisk; fi; \
738                 elif [ -f /etc/slackware-version ]; then \
739                         echo "Slackware is not currently supported, although an init script does exist for it." \
740                 else \
741                         echo "We could not install init scripts for your distribution."; \
742                 fi \
743         else \
744                 echo "We could not install init scripts for your operating system."; \
745         fi
746
747 sounds:
748         $(MAKE) -C sounds all
749
750 # If the cleancount has been changed, force a make clean.
751 # .cleancount is the global clean count, and .lastclean is the 
752 # last clean count we had
753
754 cleantest:
755         @cmp -s .cleancount .lastclean || $(MAKE) clean
756
757 $(SUBDIRS_UNINSTALL):
758         @$(MAKE) $(PRINT_DIR) -C $(@:-uninstall=) uninstall
759
760 _uninstall: $(SUBDIRS_UNINSTALL)
761         rm -f $(DESTDIR)$(MODULES_DIR)/*
762         rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
763         rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
764         rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
765         rm -rf $(DESTDIR)$(ASTHEADERDIR)
766         rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
767         rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
768         rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
769         rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
770         rm -f $(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8
771         $(MAKE) -C sounds uninstall
772
773 uninstall: _uninstall
774         @echo " +--------- Asterisk Uninstall Complete -----+"  
775         @echo " + Asterisk binaries, sounds, man pages,     +"  
776         @echo " + headers, modules, and firmware builds,    +"  
777         @echo " + have all been uninstalled.                +"  
778         @echo " +                                           +"
779         @echo " + To remove ALL traces of Asterisk,         +"
780         @echo " + including configuration, spool            +"
781         @echo " + directories, and logs, run the following  +"
782         @echo " + command:                                  +"
783         @echo " +                                           +"
784         @echo " +            $(mK) uninstall-all            +"  
785         @echo " +-------------------------------------------+"  
786
787 uninstall-all: _uninstall
788         rm -rf $(DESTDIR)$(ASTLIBDIR)
789         rm -rf $(DESTDIR)$(ASTVARLIBDIR)
790         rm -rf $(DESTDIR)$(ASTDATADIR)
791         rm -rf $(DESTDIR)$(ASTSPOOLDIR)
792         rm -rf $(DESTDIR)$(ASTETCDIR)
793         rm -rf $(DESTDIR)$(ASTLOGDIR)
794
795 menuconfig: menuselect
796
797 gmenuconfig: gmenuselect
798
799 menuselect: menuselect/menuselect menuselect-tree
800         -@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!"
801
802 gmenuselect: menuselect/gmenuselect menuselect-tree
803         -@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!"
804
805 # options for make in menuselect/
806 MAKE_MENUSELECT=CC="$(HOST_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" CFLAGS="" $(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
807
808 menuselect/menuselect: menuselect/makeopts
809         $(MAKE_MENUSELECT)
810
811 menuselect/gmenuselect: menuselect/makeopts
812         $(MAKE_MENUSELECT) gmenuselect
813
814 menuselect/makeopts:
815         $(MAKE_MENUSELECT) makeopts
816
817 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
818         @echo "Generating input for menuselect ..."
819         @echo "<?xml version=\"1.0\"?>" > $@
820         @echo >> $@
821         @echo "<menu name=\"Asterisk Module and Build Option Selection\">" >> $@
822         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SUBMAKE) -C $${dir} SUBDIR=$${dir} moduleinfo >> $@; done
823         @for dir in $(sort $(filter-out main,$(MOD_SUBDIRS))); do $(SUBMAKE) -C $${dir} SUBDIR=$${dir} makeopts >> $@; done
824         @cat build_tools/cflags.xml >> $@
825         @cat build_tools/embed_modules.xml >> $@
826         @cat sounds/sounds.xml >> $@
827         @echo "</menu>" >> $@
828
829 pdf: asterisk.pdf
830 asterisk.pdf:
831         $(MAKE) -C doc/tex asterisk.pdf
832
833 .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) main/version.c