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