register(k): pack contact info based on header for searching existing ul records
[sip-router] / Makefile
1 # $Id$
2 #
3 # sip_router makefile
4 #
5 # WARNING: requires gmake (GNU Make)
6 #  Arch supported: Linux, FreeBSD, SunOS (tested on Solaris 8), OpenBSD (3.2),
7 #  NetBSD (1.6).
8 #
9 #  History:
10 #  --------
11 #              created by andrei
12 #  2003-02-24  make install no longer overwrites ser.cfg  - patch provided
13 #               by Maxim Sobolev   <sobomax@FreeBSD.org> and 
14 #                  Tomas Bj√∂rklund <tomas@webservices.se>
15 #  2003-03-11  PREFIX & LOCALBASE must also be exported (andrei)
16 #  2003-04-07  hacked to work with solaris install (andrei)
17 #  2003-04-17  exclude modules overwritable from env. or cmd. line,
18 #               added include_modules and skip_modules (andrei)
19 #  2003-05-30  added extra_defs & EXTRA_DEFS
20 #               Makefile.defs force-included to allow recursive make
21 #               calls -- see comment (andrei)
22 #  2003-06-02  make tar changes -- unpacks in $NAME-$RELEASE  (andrei)
23 #  2003-06-03  make install-cfg will properly replace the module path
24 #               in the cfg (re: /usr/.*lib/ser/modules)
25 #              ser.cfg.default is installed only if there is a previous
26 #               cfg. -- fixes packages containing ser.cfg.default (andrei)
27 #  2003-08-29  install-modules-doc split from install-doc, added 
28 #               install-modules-all, removed README.cfg (andrei)
29 #              added skip_cfg_install (andrei)
30 #  2004-09-02  install-man will automatically "fix" the path of the files
31 #               referred in the man pages
32 #  2006-02-14  added utils & install-utils (andrei)
33 #  2006-03-15  added nodeb parameter for make tar (andrei)
34 #  2006-09-29  added modules-doc as target and doc_format= as make option (greger)
35 #  2006-12-09  added new group_include as make option and defined groups 
36 #               defining which modules to include. Also added new target 
37 #               print-modules that you can use to check which modules will be 
38 #               compiled (greger)
39 #  2007-01-10  added new group_include targets mysql, radius, and presence 
40 #               improved print-modules output fixed problem in include/exclude
41 #               logic when using group_include (greger)
42 #  2007-03-01  fail if a module or a required utility make fail unless 
43 #              err_fail=0; don't try to make modules with no Makefiles (andrei)
44 #  2007-03-16  moved the exports to Makefile.defs (andrei)
45 #  2007-03-29  install-modules changed to use make -C modpath install (andrei)
46 #  2007-05-04  "if ! foo" not supported in standard sh, switched to 
47 #                "if foo; then :; else ... ; fi" (andrei)
48 #  2008-06-23  added 2 new targets: README and man (re-generate the README
49 #              or manpages for all the modules) (andrei)
50 #  2008-06-25  make cfg support (use a pre-built cfg.: config.mak) (andrei)
51 #  2008-06-28  added clean-all, proper-all, install-modules-man and error 
52 #               checks for install-utils & doc (andrei)
53 #  2008-07-01  split module list from config.mak into modules.lst so that
54 #               the modules list can be changed without rebuilding the whole
55 #               ser (andrei)
56 #              added cfg-defs, new target that only rebuilds config.mak
57 #  2009-03-10  replaced DEFS with C_DEFS (DEFS are now used only for
58 #              "temporary" defines inside modules or libs) (andrei)
59 #  2009-03-27  multiple modules directory support, see modules_dirs (andrei)
60 #  2009-04-02  workaround for export not supported in gnu make 3.80
61 #               target specific variables: use mk_params for each
62 #               $(MAKE) invocation (andrei)
63 #  2009-04-22  don't rebuild config.mak or modules.lst if not needed
64 #              (e.g. on clean) (andrei)
65 #  2009-06-24  auto-generate autover.h, containing the REPO_VER macro, defined
66 #               to the top git commit sha (if git is found) (andrei)
67 #
68
69 # check make version
70 # everything works with 3.80, except evals inside ifeq/endif
71 # (see https://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=1516).
72 # recommended 3.81
73 req_ver=3.81
74 # the check below works for version number of the type x.yy or x.yy.z*
75 # (from the GNU Make Cookbook)
76 ifeq (,$(filter $(req_ver),$(firstword $(sort $(MAKE_VERSION) $(req_ver)))))
77 $(error make version $(MAKE_VERSION) not supported, use at least $(req_ver))
78 endif
79
80
81 auto_gen=lex.yy.c cfg.tab.c #lexx, yacc etc
82 auto_gen_others=cfg.tab.h # auto generated, non-c
83 auto_gen_keep=autover.h # auto generated, should be included in archives
84
85 COREPATH=.
86 #include  source related defs
87 include Makefile.sources
88 #include special targets lists
89 include Makefile.targets
90
91 # whether or not the entire build process should fail if building a module or
92 #  an utility fails
93 err_fail?=1
94
95 # whether or not to install $(MAIN_NAME).cfg or just $(MAIN_NAME).cfg.default
96 # ($(MAIN_NAME).cfg will never be overwritten by make install, this is usefull
97 #  when creating packages)
98 skip_cfg_install?=
99
100 #extra modules to exclude
101 skip_modules?=
102
103 # see Makefile.dirs for the directories used for the modules
104 include Makefile.dirs
105
106 # Set document format
107 # Alternatives are txt, html, xhtml, and pdf (see Makefile.doc)
108 doc_format?=html
109
110 # don't force modules.lst generation if the makefile goals do not
111 # require it (but if present use it)
112 ifeq (,$(strip $(filter-out $(clean_targets) $(aux_targets),$(MAKECMDGOALS))))
113 ifneq (,$(strip $(wildcard modules.lst)))
114 -include modules.lst
115 endif
116 else
117 include modules.lst
118 endif # ifneq (,$(strip $(filter-out ...,$(MAKECMDGOALS))))
119
120 #if called with group_include, ignore the modules from modules.lst
121 ifneq ($(group_include),)
122         include_modules=
123         exclude_modules=
124         modules_configured:=0
125 endif
126
127 # Module group definitions, default only include the standard group
128 # Make backwards compatible, don't set group_include default...
129 #group_include?="standard"
130
131 # Modules in this group are considered a standard part of SER (due to 
132 # widespread usage) and have no external compile or link dependencies (note 
133 # that some of these interplay with external systems).
134 module_group_standard=acc_syslog auth avp ctl dispatcher diversion enum\
135                                 eval exec fifo db_flatstore gflags maxfwd mediaproxy \
136                                 nathelper options pdt permissions pike print ratelimit \
137                                 registrar rr rtpproxy sanity sl textops timer tm uac \
138                                 unixsock uri usrloc xlog cfg_rpc sipcapture msrp tmrec
139
140 # Modules in this group are considered a standard part of SER (due to 
141 # widespread usage) but they have dependencies that must be satisfied for 
142 # compilation.
143 # acc_radius, auth_radius, misc_radius => radiusclient-ng
144 # acc_db, auth_db, avp_db, db_ops, domain, lcr, msilo, dialog, speeddial,
145 # uri_db => database module (db_mysql, db_postgres, dbtext ...)
146 # mysql, postgres => mysql server and client libraries or postgres server and
147 #  client libraries or other database back-end (ex. mysql-devel)
148 # pa, xmlrpc => libxml2
149 # rls => pa
150 #
151 # NOTE! All presence modules (dialog, pa, presence_b2b, rls, xcap) have been
152 # included in this group due to interdependencies
153 module_group_standard_dep=acc_db acc_radius auth_db auth_radius avp_db \
154                                 auth_identity db_ops domain lcr misc_radius \
155                                 msilo dialog pa \
156                                 presence_b2b rls speeddial uri_db xcap xmlrpc
157
158 # For db use (db modules, excluding drivers)
159 module_group_db=acc_db auth_db avp_db db_ops db_text \
160                                 uri_db domain lcr msilo speeddial
161                                 #dbtext (s) not migrated yet to the new db interface
162
163 # For mysql
164 module_group_mysql_driver=db_mysql
165 module_group_mysql=$(module_group_mysql_driver) $(module_group_db)
166
167 # For postgress
168 module_group_postgres_driver=db_postgres
169 module_group_postgres=$(module_group_postgres_driver) $(module_group_db)
170
171 # For radius
172 module_group_radius=acc_radius auth_radius misc_radius avp_radius uri_radius \
173                                         peering
174
175 # For presence
176 # kamailio modules
177 module_group_presence=presence presence_dialoginfo presence_mwi presence_xml presence_profile\
178                                                 pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp \
179                                                 rls xcap_client xcap_server presence_conference \
180                                                 presence_reginfo pua_reginfo
181 #ser modules
182 module_group_presence+=dialog presence_b2b xcap
183 # obsolete/unmaintained ser modules
184 #module_group_presence=pa rls
185
186 # Modules in this group satisfy specific or niche applications, but are 
187 # considered stable for production use. They may or may not have dependencies
188 # cpl-c => libxml2
189 # jabber => expat (library)
190 # osp => OSP Toolkit (sipfoundry)
191 # sms => none (external modem)
192 module_group_stable=cpl-c dbtext jabber osp sms pdb
193
194 # Modules in this group are either not complete, untested, or without enough
195 # reports of usage to allow the module into the stable group. They may or may
196 # not have dependencies
197 module_group_experimental=tls oracle iptrtpproxy ndb_redis async websocket
198
199 # For cassandra
200 module_group_cassandra_driver=db_cassandra
201 module_group_cassandra=$(module_group_cassandra_driver) $(module_group_db)
202
203
204 ### Kamailio specific groups ###
205 # Standard modules in K Debian distro
206 module_group_kstandard=acc alias_db auth auth_db benchmark call_control \
207                                 cfgutils db_text dialog dispatcher diversion domain drouting \
208                                 exec group htable imc kex maxfwd mi_datagram mi_fifo msilo \
209                                 nat_traversal nathelper path pdt permissions pike pv qos \
210                                 ratelimit regex registrar rr rtimer rtpproxy siptrace siputils \
211                                 sl sms speeddial sqlops sst statistics textops tmx uac \
212                                 uac_redirect uri_db userblacklist usrloc xlog seas \
213                                 avpops cfg_db cfg_rpc ctl db_flatstore dialplan enum \
214                                 iptrtpproxy lcr mediaproxy mi_rpc pdb sanity tm topoh \
215                                 blst prefix_route counters debugger matrix mqueue mtree \
216                                 pipelimit rtpproxy textopsx xhttp xhttp_rpc ipops p_usrloc \
217                                 sdpops async sipcapture dmq msrp tmrec db_cluster
218
219 # K mysql module
220 module_group_kmysql=db_mysql
221
222 # K postgress module
223 module_group_kpostgres=db_postgres
224
225 # K cpl module
226 module_group_kcpl=cpl-c
227
228 # K radius modules
229 module_group_kradius=acc_radius auth_radius misc_radius peering
230
231 # K unixodbc module
232 module_group_kunixodbc=db_unixodbc
233
234 # K xmlrpc modules
235 module_group_kxml=xmlrpc mi_xmlrpc xmlops
236
237 # K perl module
238 module_group_kperl=perl perlvdb
239
240 # K snmpstats module
241 module_group_ksnmpstats=snmpstats
242
243 # K xmpp module
244 module_group_kxmpp=xmpp
245
246 # K carrierroute module
247 module_group_kcarrierroute=carrierroute
248
249 # K berkeley module
250 module_group_kberkeley=db_berkeley
251
252 # K ldap modules
253 module_group_kldap=ldap h350
254
255 # K utils module
256 module_group_kutils=utils
257
258 # K purple module
259 module_group_kpurple=purple
260
261 # K memcached module
262 module_group_kmemcached=memcached
263
264 # K tls module
265 module_group_ktls=tls
266
267 # K websocket module
268 module_group_kwebsocket=websocket
269
270 # K presence modules
271 module_group_kpresence=presence presence_dialoginfo presence_mwi presence_xml presence_profile\
272                                                 pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp \
273                                                 rls xcap_client xcap_server presence_conference \
274                                                 presence_reginfo pua_reginfo
275
276 # K lua module
277 module_group_klua=app_lua
278
279 # K python module
280 module_group_kpython=app_python
281
282 # K geoip module
283 module_group_kgeoip=geoip
284
285 # K sqlite module
286 module_group_ksqlite=db_sqlite
287
288 # K json modules
289 module_group_kjson=json jsonrpc-c
290
291 # K redis module
292 module_group_kredis=ndb_redis
293
294 # K mono module
295 module_group_kmono=app_mono
296
297 # if not set on the cmd. line, env or in the modules.lst (cfg_group_include)
298 # exclude the below modules.
299 ifneq ($(group_include)$(cfg_group_include),)
300         # For group_include, default all modules are excluded except those in 
301         # include_modules
302         exclude_modules?=
303 else
304         # Old defaults for backwards compatibility
305         # excluded because they depend on external libraries
306         exclude_modules?=               cpl mangler postgres jabber mysql cpl-c \
307                                                         auth_radius misc_radius avp_radius uri_radius \
308                                                         acc_radius pa rls presence_b2b xcap xmlrpc\
309                                                         osp tls oracle \
310                                                         unixsock dbg print_lib auth_identity ldap \
311                                                         db_berkeley db_mysql db_postgres db_oracle \
312                                                         db_sqlite db_unixodbc db_cassandra memcached mi_xmlrpc \
313                                                         perl perlvdb purple \
314                                                         snmpstats xmpp cdp \
315                                                         carrierroute peering \
316                                                         dialplan lcr utils presence presence_mwi \
317                                                         presence_dialoginfo presence_xml pua pua_bla \
318                                                         pua_dialoginfo pua_usrloc pua_xmpp \
319                                                         regex xcap_client xcap_server presence_conference \
320                                                         presence_reginfo pua_reginfo websocket
321         #excluded because they depend on external *.h files
322         exclude_modules+= h350
323         # excluded because they do not compile (remove them only after they are
324         #  fixed) -- andrei
325         exclude_modules+= bdb dbtext iptrtpproxy pa rls
326         # depends on libgeoip
327         exclude_modules+= geoip
328         # depends on liblua5.1-dev
329         exclude_modules+= app_lua
330         # depends on libpython-dev
331         exclude_modules+= app_python
332         # depends on libxml2
333         exclude_modules+= xmlops
334         # depends on jsoc-c
335         exclude_modules+= json jsonrpc-c
336         # depends on libhiredis
337         exclude_modules+= ndb_redis
338         # depends on mono-devel
339         exclude_modules+= app_mono
340         # depends on tm being compiled with -DWITH_AS_SUPPORT support
341 ifeq (,$(findstring -DWITH_AS_SUPPORT, $(C_DEFS)))
342                 exclude_modules+= seas
343 endif
344 endif
345
346 # always exclude the CVS dir
347 override exclude_modules+= CVS $(skip_modules)
348
349 # Test for the groups and add to include_modules
350 ifneq (,$(group_include))
351 $(eval override include_modules+= $(foreach grp, $(group_include), \
352                                                                                 $(module_group_$(grp)) ))
353 endif
354
355 # first 2 lines are excluded because of the experimental or incomplete
356 # status of the modules
357 # the rest is excluded because it depends on external libraries
358 #
359 static_modules:=
360
361 ALLDEP=config.mak Makefile Makefile.dirs Makefile.sources Makefile.rules
362
363 #include general defs (like CC, CFLAGS  a.s.o)
364 # hack to force makefile.defs re-inclusion (needed when make calls itself with
365 # other options -- e.g. make bin)
366 #makefile_defs=0
367 #C_DEFS:=
368
369
370 # try saved cfg, unless we are in the process of building it or if we're doing
371 # a clean
372 ifeq (,$(strip \
373         $(filter config.mak config cfg cfg-defs $(clean_targets),$(MAKECMDGOALS))))
374 include config.mak
375 ifeq ($(makefile_defs),1)
376 ifeq ($(quiet),verbose)
377 $(info config.mak loaded)
378 endif # verbose
379 export makefile_defs
380 # config_make valid & used
381 config_mak=1
382 ifeq ($(MAIN_NAME),)
383 $(error "bad config.mak, try re-running make cfg")
384 endif
385 endif
386 else # config.mak doesn't need to be used
387 ifneq (,$(filter cfg config cfg-defs,$(word 1,$(MAKECMDGOALS))))
388 # needed here to avoid starting a config submake 
389 # (e.g. rm -f config.mak; make config.mak), which would either require 
390 # double Makefile.defs defines execution (suboptimal), would loose
391 # $(value ...) expansion or would cause some warning (if Makefile.defs exec. 
392 # is skipped in the "main" makefile invocation).
393 $(shell rm -rf config.mak)
394 config_mak=0
395 makefile_defs=0
396 exported_vars=0
397 else
398 # config.mak not strictly needed, but try to load it if exists for $(Q)
399 config_mak=skip
400 -include config.mak
401 export makefile_defs
402 endif
403 endif
404
405
406 main_makefile=1
407 include Makefile.defs
408
409 static_modules_path=$(addprefix modules/, $(static_modules))
410 extra_sources=$(wildcard $(addsuffix /*.c, $(static_modules_path)))
411 extra_objs=$(extra_sources:.c=.o)
412
413 static_defs:= $(foreach  mod, $(static_modules), \
414                 -DSTATIC_$(shell echo $(mod) | tr [:lower:] [:upper:]) )
415
416 override extra_defs+=$(static_defs) $(EXTRA_DEFS)
417 export extra_defs
418
419 # Historically, the resultant set of modules is: modules/* - exclude_modules +
420 # include_modules
421 # When group_include is used, we want: include_modules (based on group_include)
422 # - exclude_modules
423
424 ifneq ($(modules_configured),1) 
425 #modules_all=$(filter-out modules/CVS,$(wildcard modules/*))
426
427 # create modules*_all vars
428 $(foreach mods,$(modules_dirs),$(eval \
429         $(mods)_all=$$(filter-out $(mods)/CVS,$$(wildcard $(mods)/*))))
430 #debugging
431 #$(foreach mods,$(modules_dirs),$(info "$(mods)_all=$($(mods)_all)"))
432
433 ifneq ($(group_include),)
434 $(foreach mods,$(modules_dirs),$(eval \
435         $(mods)=$$(filter-out $$(addprefix $(mods)/, \
436                         $$(exclude_modules) $$(static_modules)), \
437                         $$(addprefix $(mods)/, $$(include_modules) )) ))
438 else    
439         # Standard, old resultant set
440 $(foreach mods,$(modules_dirs),$(eval \
441         $(mods)_noinc=$$(filter-out $$(addprefix $(mods)/, \
442                         $$(exclude_modules) $$(static_modules)), $$($(mods)_all)) \
443 ))
444 $(foreach mods,$(modules_dirs),$(eval \
445         $(mods)=$$(filter-out $$(modules_noinc), \
446                         $$(addprefix $(mods)/, $$(include_modules) )) $$($(mods)_noinc) \
447 ))
448 endif # ifneq($(group_include),)
449 endif # ifneq($(modules_configured),1)
450
451 $(foreach mods,$(modules_dirs),$(eval \
452         $(mods)_names=$$(shell echo $$($(mods))| \
453                                 sed -e "s/$(mods)"'\/\([^/ ]*\)\/*/\1.so/g' ) \
454 ))
455 $(foreach mods,$(modules_dirs),$(eval \
456         $(mods)_basenames:=$$(shell echo $$($(mods))| \
457                                 sed -e "s/$(mods)"'\/\([^/ ]*\)\/*/\1/g' ) \
458 ))
459
460 # all modules from all the $(modules_dirs)
461 all_modules_lst=$(foreach mods,$(modules_dirs), $($(mods)_all))
462
463 # compile modules list (all the compiled mods from  $(modules_dirs))
464 cmodules=$(foreach mods,$(modules_dirs), $($(mods)))
465
466 #modules_names=$(patsubst modules/%, %.so, $(modules))
467 #modules_full_path=$(join  $(modules), $(addprefix /, $(modules_names)))
468
469
470
471 # list of utils directories that should be compiled by make utils
472 C_COMPILE_UTILS=        utils/sercmd
473 # list of binaries that should be installed alongside
474 # (they should be created after make utils, see C_COMPILE_UTILS)
475 C_INSTALL_BIN=  # sercmd is now installed by ctl
476
477 # which utils know to install themselves and should be installed
478 # along the core (list of utils directories)
479 ifeq ($(FLAVOUR),kamailio)
480 C_INSTALL_UTILS= utils/kamctl
481 else
482 C_INSTALL_UTILS=
483 endif
484 # list of scripts that should be installed along the core 
485 # (here a script is something that doesn't have a Makefile)
486 C_INSTALL_SCRIPTS=
487 # list of extra configs that should be installed along the core
488 # Note: all the paths of the form /usr/*lib/$(CFG_NAME)/<module_dir>
489 # will be updated to the directory where the modules will be installed.
490 C_INSTALL_CFGS=
491 # list of files that should be installed in the arch-independent 
492 # directory (by default /usr/local/share/$(MAIN_NAME)))
493 C_INSTALL_SHARE=
494
495
496
497
498 NAME=$(MAIN_NAME)
499
500 tar_name=$(NAME)-$(RELEASE)_src
501
502 tar_extra_args+=$(addprefix --exclude=$(notdir $(CURDIR))/, \
503                                         $(auto_gen) $(auto_gen_others))
504 ifeq ($(CORE_TLS), 1)
505         tar_extra_args+=
506 else
507         tar_extra_args+=--exclude=$(notdir $(CURDIR))/tls/* 
508 endif
509
510 ifneq ($(nodeb),)
511         tar_extra_args+=--exclude=$(notdir $(CURDIR))/debian 
512         tar_name:=$(tar_name)_nodeb
513 endif
514
515 # sanity checks
516 ifneq ($(TLS),)
517         $(warning "make TLS option is obsoleted, try TLS_HOOKS or CORE_TLS")
518 endif
519
520 # include the common rules
521 include Makefile.rules
522
523 #extra targets 
524
525 $(NAME): $(extra_objs) # static_modules
526
527 lex.yy.c: cfg.lex cfg.tab.h $(ALLDEP)
528         $(LEX) $<
529
530 cfg.tab.c cfg.tab.h: cfg.y  $(ALLDEP)
531         $(YACC) $(YACC_FLAGS) $<
532
533 nullstring=
534 space=$(nullstring) $(nullstring)
535
536 modules_search_path=$(subst $(space),:,$(strip\
537                                                 $(foreach m,$(modules_dirs),$($(m)_target))))
538                 #                               $(addprefix $(modules_target),$(modules_dirs))))
539
540 # special depends for main.o
541 main.o: DEFS+=-DMODS_DIR='"$(modules_search_path)"'
542
543
544 #special depends for ver.c
545 ver.d ver.o: autover.h
546
547 include Makefile.shared
548
549 ifeq ($(config_mak),1)
550
551 include Makefile.cfg
552
553 # fix basedir path (relative -> absolute)
554 ifneq (,$(basedir))
555 ifeq (,$(filter /%, $(basedir)))
556 override basedir:=$(CURDIR)/$(basedir)
557 # remove basedir from command line overrides
558 MAKEOVERRIDES:=$(filter-out basedir=%,$ $(MAKEOVERRIDES))
559 endif # (,$(filter /%, $(basedir)))
560 endif # (,$(basedir))
561
562 else ifneq ($(config_mak),skip)
563
564 config.mak: Makefile.defs
565         @echo making config...
566         @echo "# this file is autogenerated by make cfg" >$@
567         @$(call mapf2,cfg_save_var,saved_fixed_vars,$(@))
568         @$(call mapf2,cfg_save_var2,saved_chg_vars,$(@))
569         @echo "override makefile_defs:=1" >>$@
570         @echo "C_DEFS:=\$$(filter-out \$$(DEFS_RM) \$$(extra_defs),\$$(C_DEFS))" \
571                                         "\$$(extra_defs)"  >>$@
572         @echo "CFLAGS:=\$$(filter-out \$$(CFLAGS_RM) \$$(CC_EXTRA_OPTS)," \
573                                                 "\$$(CFLAGS)) \$$(CC_EXTRA_OPTS)" >>$@
574
575 endif # ifeq ($(config_mak),1)
576
577 modules.lst:
578         @echo  saving modules list...
579         @echo "# this file is autogenerated by make modules-cfg" >$@
580         @echo "modules_dirs:=$(modules_dirs)" >>$@
581         @echo "cfg_group_include=$(group_include)" >>$@
582         @$(call cfg_save_var2,include_modules,$@)
583         @$(call cfg_save_var2,static_modules,$@)
584         @$(call cfg_save_var2,skip_modules,$@)
585         @$(call cfg_save_var2,exclude_modules,$@)
586         @$(foreach mods,$(modules_dirs), \
587                 $(call cfg_save_var2,$(mods)_all,$@))
588         @$(foreach mods,$(modules_dirs), \
589                 $(call cfg_save_var2,$(mods)_noinc,$@))
590         @$(foreach mods,$(modules_dirs), \
591                 $(call cfg_save_var2,$(mods),$@))
592         @echo "modules_configured:=1" >>$@
593
594
595 .PHONY: cfg config cfg-defs
596 cfg-defs: config.mak
597
598 cfg config: cfg-defs modules-cfg
599
600 .PHONY: modules-cfg modules-list modules-lst
601 modules-cfg modules-list modules-lst:
602         rm -f modules.lst
603         $(MAKE) modules.lst
604
605 ifneq ($(wildcard .git),)
606 # if .git/ exists
607 repo_ver=$(shell  RV=`git rev-parse --verify --short=6 HEAD 2>/dev/null`;\
608                                         [ -n "$$RV" ] && \
609                                         test -n "`git update-index --refresh --unmerged >/dev/null\
610                                                         ; git diff-index --name-only HEAD 2>/dev/null | \
611                                                                 grep -v Makefile`" &&\
612                                                 RV="$$RV"-dirty; echo "$$RV")
613 repo_hash=$(subst -dirty,,$(repo_ver))
614 repo_state=$(subst %-dirty,dirty,$(findstring -dirty,$(repo_ver)))
615 autover_h_dep=.git $(filter-out $(auto_gen), $(sources)) cfg.y cfg.lex Makefile
616 else
617 # else if .git/ does not exist
618 repo_ver=
619 repo_hash="unknown"
620 repo_state=
621 autover_h_dep=
622 endif
623
624
625 autover.h: $(autover_h_dep)
626         @echo  "generating autover.h ..."
627         @echo "/* this file is autogenerated by make autover.h" >$@
628         @echo " * DO NOT EDIT IT" >>$@
629         @echo " */" >>$@
630         @echo "" >>$@
631         @echo "#define REPO_VER \"$(repo_ver)\"" >>$@
632         @echo "#define REPO_HASH \"$(repo_hash)\"" >>$@
633         @echo "#define REPO_STATE \"$(repo_state)\"" >>$@
634
635 .PHONY: all
636 all: $(NAME) every-module
637
638 .PHONY: print-modules
639 print-modules:
640         @echo The following modules were chosen to be included: \
641                 $(include_modules) ; \
642         echo ---------------------------------------------------------- ; \
643         echo The following modules will be excluded: $(exclude_modules) ; \
644         echo ---------------------------------------------------------- ; \
645         echo The following modules will be made; \
646         $(foreach mods,$(modules_dirs), \
647                 echo $(mods)/: $($(mods)_basenames) ; ) \
648         #echo DBG: The following modules will be made: $(modules_basenames) ; \
649
650
651 # modules templates (instantiated based on modules_dirs contents)
652 define MODULES_RULES_template
653
654 $(1)_dst=$(modules_prefix)/$(modules_dir)$(1)
655 $(1)_target=$(prefix)/$(modules_dir)$(1)
656
657 .PHONY: $(1)
658 $(1): modules.lst
659         @$(foreach r,$($(1)),$(call module_make,$(r),$(mk_params)))
660
661 .PHONY: $(1)-doc
662 $(1)-doc: modules.lst
663         +@for r in $($(1)) "" ; do \
664                 if [ -n "$$$$r" -a -r "$$$$r/Makefile" ]; then \
665                         $(call oecho, "" ;) \
666                         $(call oecho, "" ;) \
667                         $(MAKE) -C $$$$r/doc $(doc_format) $$(mk_params); \
668                 fi ; \
669         done
670
671 .PHONY: $(1)-readme
672
673 $(1)-readme: modules.lst
674         -+@for r in $($(1)) "" ; do \
675                 if [ -n "$$$$r" -a -r "$$$$r/Makefile" ]; then \
676                         $(call oecho, "" ;) \
677                         $(call oecho, "" ;) \
678                         if  $(MAKE) -C $$$$r $$(mk_params) README || [ ${err_fail} != 1 ];\
679                         then \
680                                 :; \
681                         else \
682                                 exit 1; \
683                         fi ; \
684                 fi ; \
685         done; true
686
687 .PHONY: $(1)-man
688 $(1)-man: modules.lst
689         -+@for r in $($(1)_basenames) "" ; do \
690                 if [ -n "$$$$r" -a -r $(1)/"$$$$r/Makefile" -a \
691                          -r $(1)/"$$$$r/$$$$r.xml" ]; then \
692                         $(call oecho, "" ;) \
693                         $(call oecho, "" ;) \
694                         if  $(MAKE) -C $(1)/"$$$$r" $$(mk_params) man || \
695                                 [ ${err_fail} != 1 ] ;\
696                         then \
697                                 :; \
698                         else \
699                                 exit 1; \
700                         fi ; \
701                 fi ; \
702         done; true
703
704 .PHONY: install-$(1)
705
706 install-$(1): modules.lst $$($(1)_dst)
707         +@for r in $($(1)) "" ; do \
708                 if [ -n "$$$$r" -a -r "$$$$r/Makefile" ]; then \
709                         $(call oecho, "" ;) \
710                         $(call oecho, "" ;) \
711                         if  $(MAKE) -C $$$$r install mods_dst=$$($(1)_dst) $$(mk_params) \
712                                 || [ ${err_fail} != 1 ] ; then \
713                                 :; \
714                         else \
715                                 exit 1; \
716                         fi ; \
717                 fi ; \
718         done; true
719
720
721 .PHONY: install-$(1)-doc
722
723 install-$(1)-doc: modules.lst $(doc_prefix)/$(doc_dir)$(1)
724         @for r in $($(1)_basenames) "" ; do \
725                 if [ -n "$$$$r" -a -r $(1)/"$$$$r/Makefile" ]; then \
726                         if [ -f $(1)/"$$$$r"/README ]; then \
727                                 $$(call try_err,\
728                                         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)$(1)/README ); \
729                                 $$(call try_err,\
730                                         $(INSTALL_DOC)  $(1)/"$$$$r"/README  \
731                                                                         $(doc_prefix)/$(doc_dir)$(1)/README ); \
732                                 $$(call try_err,\
733                                         mv -f $(doc_prefix)/$(doc_dir)$(1)/README \
734                                                         $(doc_prefix)/$(doc_dir)$(1)/README."$$$$r" ); \
735                         fi ; \
736                 fi ; \
737         done; true
738
739 .PHONY: install-$(1)-man
740
741 install-$(1)-man: $(1)-man $(man_prefix)/$(man_dir)/man7
742         @for r in $($(1)_basenames) "" ; do \
743                 if [ -n "$$$$r" -a -r $(1)/"$$$$r/Makefile" ]; then \
744                         if [ -f $(1)/"$$$$r"/"$$$$r".7 ]; then \
745                                 $$(call try_err,\
746                                   $(INSTALL_TOUCH) $(man_prefix)/$(man_dir)/man7/"$$$$r".7 );\
747                                 $$(call try_err,\
748                                         $(INSTALL_MAN)  $(1)/"$$$$r"/"$$$$r".7  \
749                                                                         $(man_prefix)/$(man_dir)/man7 ); \
750                         fi ; \
751                 fi ; \
752         done; true
753
754
755 $(modules_prefix)/$(modules_dir)$(1):
756                 mkdir -p $$(@)
757
758 $(doc_prefix)/$(doc_dir)$(1):
759                 mkdir -p $$(@)
760
761
762 endef
763
764 # instantiate the template
765 $(foreach mods,$(modules_dirs),$(eval $(call MODULES_RULES_template,$(mods))))
766
767 #$(foreach mods,$(modules_dirs),$(eval  $(info DUMP: $(call MODULES_RULES_template,$(mods)))))
768
769 # build all the modules
770 modules-all every-module: $(modules_dirs)
771
772 $(extra_objs):
773         @echo "Extra objs: $(extra_objs)" 
774         @for r in $(static_modules_path) "" ; do \
775                 if [ -n "$$r" -a -r "$$r/Makefile"  ]; then \
776                         $(call oecho, "" ;) \
777                         $(call oecho, "Making static module $r" ;) \
778                         if $(MAKE) -C $$r static $(mk_params) ; then  \
779                                 :; \
780                         else \
781                                 exit 1; \
782                         fi ;  \
783                 fi ; \
784         done
785
786 .PHONY: utils
787 utils:
788         @for r in $(C_COMPILE_UTILS) "" ; do \
789                 if [ -n "$$r" ]; then \
790                         $(call oecho, "" ;) \
791                         $(call oecho, "" ;) \
792                         if  $(MAKE) -C $$r $(mk_params) || [ ${err_fail} != 1 ] ; \
793                         then \
794                                 :; \
795                         else \
796                                 exit 1; \
797                         fi ; \
798                 fi ; \
799         done; true
800
801
802 dbg: sip-router
803         gdb -command debug.gdb
804
805 .PHONY: makefile_vars makefile-vars
806 makefile_vars makefile-vars:
807         echo "FLAVOUR?=$(FLAVOUR)" > Makefile.vars
808
809 .PHONY: tar
810 .PHONY: dist
811
812 dist: tar
813
814 tar: makefile_vars $(auto_gen_keep)
815         $(TAR) -C .. \
816                 --exclude=$(notdir $(CURDIR))/test* \
817                 --exclude=$(notdir $(CURDIR))/tmp* \
818                 --exclude=$(notdir $(CURDIR))/debian/$(MAIN_NAME) \
819                 --exclude=$(notdir $(CURDIR))/debian/$(MAIN_NAME)-* \
820                 --exclude=$(notdir $(CURDIR))/$(MAIN_NAME)_tls* \
821                 --exclude=.git* \
822                 --exclude=CVS* \
823                 --exclude=.svn* \
824                 --exclude=.cvsignore \
825                 --exclude=librpath.lst \
826                 --exclude=libiname.lst \
827                 --exclude=makecfg.lst \
828                 --exclude=config.mak \
829                 --exclude=modules.lst \
830                 --exclude=*.[do] \
831                 --exclude=*.so \
832                 --exclude=*.il \
833                 --exclude=$(notdir $(CURDIR))/$(MAIN_NAME) \
834                 --exclude=*.gz \
835                 --exclude=*.bz2 \
836                 --exclude=*.tar \
837                 --exclude=*.patch \
838                 --exclude=.\#* \
839                 --exclude=*.swp \
840                 --exclude=*.swo \
841                 ${tar_extra_args} \
842                 -cf - $(notdir $(CURDIR)) | \
843                         (mkdir -p tmp/_tar1; mkdir -p tmp/_tar2 ; \
844                             cd tmp/_tar1; $(TAR) -xf - ) && \
845                             mv tmp/_tar1/$(notdir $(CURDIR)) \
846                                tmp/_tar2/"$(NAME)-$(RELEASE)" && \
847                             (cd tmp/_tar2 && $(TAR) \
848                                             -zcf ../../"$(tar_name)".tar.gz \
849                                                        "$(NAME)-$(RELEASE)" ) ; \
850                             rm -rf tmp/_tar1; rm -rf tmp/_tar2
851
852 # binary dist. tar.gz
853 .PHONY: bin
854 bin:
855         mkdir -p tmp/$(MAIN_NAME)/usr/local
856         $(MAKE) install basedir=$(CURDIR)/tmp/$(MAIN_NAME) $(mk_params)
857         $(TAR) -C tmp/$(MAIN_NAME)/ -zcf ../$(NAME)-$(RELEASE)_$(OS)_$(ARCH).tar.gz .
858         rm -rf tmp/$(MAIN_NAME)
859
860 .PHONY: deb
861 deb:
862         -@if [ -d debian ]; then \
863                 dpkg-buildpackage -rfakeroot -tc; \
864                 rm debian; \
865         else \
866                 ln -s pkg/$(MAIN_NAME)/deb/debian debian; \
867                 dpkg-buildpackage -rfakeroot -tc; \
868                 rm debian; \
869         fi
870
871 .PHONY: sunpkg
872 sunpkg:
873         mkdir -p tmp/$(MAIN_NAME)
874         mkdir -p tmp/$(MAIN_NAME)_sun_pkg
875         $(MAKE) install basedir=$(CURDIR)/tmp/$(MAIN_NAME) \
876                         prefix=/usr/local $(mk_params)
877         (cd pkg/$(MAIN_NAME)/solaris; \
878         pkgmk -r ../../tmp/$(MAIN_NAME)/usr/local -o -d ../../tmp/$(MAIN_NAME)_sun_pkg/ -v "$(RELEASE)" ;\
879         cd ../..)
880         cat /dev/null > ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local
881         pkgtrans -s tmp/$(MAIN_NAME)_sun_pkg/ ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local \
882                 IPTEL$(MAIN_NAME)
883         gzip -9 ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local
884         rm -rf tmp/$(MAIN_NAME)
885         rm -rf tmp/$(MAIN_NAME)_sun_pkg
886
887
888 .PHONY: install
889 install: mk_params="compile_for_install=yes"
890 install: install-bin install-every-module install-cfg \
891         install-doc install-man install-utils install-share
892
893 .PHONY: dbinstall
894 dbinstall:
895         -@echo "Initializing $(MAIN_NAME) database"
896         scripts/mysql/$(SCR_NAME)_mysql.sh create
897         -@echo "Done"
898
899 .PHONY: README
900 README: $(foreach mods,$(modules_dirs),$(mods)-readme)
901
902 .PHONY: man
903 man: $(foreach mods,$(modules_dirs),$(mods)-man)
904
905 mk-install_dirs: $(cfg_prefix)/$(cfg_dir) $(bin_prefix)/$(bin_dir) \
906                         $(modules_prefix)/$(modules_dir) $(doc_prefix)/$(doc_dir) \
907                         $(man_prefix)/$(man_dir)/man8 $(man_prefix)/$(man_dir)/man5 \
908                         $(share_prefix)/$(share_dir) \
909                         $(foreach mods,$(modules_dirs),\
910                                 $(modules_prefix)/$(modules_dir)$(mods) \
911                                 $(doc_prefix)/$(doc_dir)$(mods) )
912
913 $(cfg_prefix)/$(cfg_dir): 
914                 mkdir -p $(cfg_prefix)/$(cfg_dir)
915
916 $(bin_prefix)/$(bin_dir):
917                 mkdir -p $(bin_prefix)/$(bin_dir)
918
919 $(share_prefix)/$(share_dir):
920                 mkdir -p $(share_prefix)/$(share_dir)
921
922 $(modules_prefix)/$(modules_dir):
923                 mkdir -p $(modules_prefix)/$(modules_dir)
924
925 $(doc_prefix)/$(doc_dir):
926                 mkdir -p $(doc_prefix)/$(doc_dir)
927
928 $(man_prefix)/$(man_dir)/man8:
929                 mkdir -p $(man_prefix)/$(man_dir)/man8
930
931 $(man_prefix)/$(man_dir)/man7:
932                 mkdir -p $(man_prefix)/$(man_dir)/man7
933
934 $(man_prefix)/$(man_dir)/man5:
935                 mkdir -p $(man_prefix)/$(man_dir)/man5
936
937 # note: sed with POSIX.1 regex doesn't support |, + or ? (darwin, solaris ...) 
938 install-cfg: $(cfg_prefix)/$(cfg_dir)
939                 @if [ -f etc/$(CFG_NAME).cfg ]; then \
940                         sed $(foreach m,$(modules_dirs),\
941                                         -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
942                                         -e "s#/usr/local/etc/$(CFG_NAME)/#$(cfg_target)#g" \
943                                 < etc/$(CFG_NAME).cfg \
944                                 > $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample; \
945                         chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample; \
946                         if [ -z "${skip_cfg_install}" -a \
947                                         ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg ]; then \
948                                 mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample \
949                                         $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg; \
950                         fi; \
951                 fi
952                 @if [ -f etc/$(CFG_NAME)-basic.cfg ]; then \
953                         sed $(foreach m,$(modules_dirs),\
954                                         -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
955                                         -e "s#/usr/local/etc/$(CFG_NAME)/#$(cfg_target)#g" \
956                                 < etc/$(CFG_NAME)-basic.cfg \
957                                 > $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample; \
958                         chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample; \
959                         if [ -z "${skip_cfg_install}" -a \
960                                         ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg ]; then \
961                                 mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample \
962                                         $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg; \
963                         fi; \
964                 fi
965                 @if [ -f etc/$(CFG_NAME)-oob.cfg ]; then \
966                         sed $(foreach m,$(modules_dirs),\
967                                         -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
968                                         -e "s#/usr/local/etc/$(CFG_NAME)/#$(cfg_target)#g" \
969                                 < etc/$(CFG_NAME)-oob.cfg \
970                                 > $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample; \
971                         chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample; \
972                         if [ -z "${skip_cfg_install}" -a \
973                                         ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg ]; \
974                         then \
975                                 mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample \
976                                         $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg; \
977                         fi; \
978                 fi
979                 @# other configs
980                 @for r in $(C_INSTALL_CFGS) ""; do \
981                         if [ -n "$$r" ]; then \
982                                 if [ -f "$$r" ]; then \
983                                         n=`basename "$$r"` ; \
984                                         sed $(foreach m,$(modules_dirs),\
985                                                         -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
986                                                 < "$$r" \
987                                                 > "$(cfg_prefix)/$(cfg_dir)$$n.sample" ; \
988                                         chmod 644 "$(cfg_prefix)/$(cfg_dir)$$n.sample" ; \
989                                         if [ -z "${skip_cfg_install}" -a \
990                                                         ! -f "$(cfg_prefix)/$(cfg_dir)$$n" ]; \
991                                         then \
992                                                 mv -f "$(cfg_prefix)/$(cfg_dir)$$n.sample" \
993                                                                 "$(cfg_prefix)/$(cfg_dir)$$n"; \
994                                         fi ; \
995                                 else \
996                                         echo "ERROR: $$r not found" ; \
997                                         if [ ${err_fail} = 1 ] ; then \
998                                                 exit 1; \
999                                         fi ; \
1000                                 fi ; \
1001                         fi ; \
1002                 done; true
1003                 # radius dictionary
1004                 $(INSTALL_TOUCH) $(cfg_prefix)/$(cfg_dir)/dictionary.$(CFG_NAME)
1005                 $(INSTALL_CFG) etc/dictionary.$(CFG_NAME) $(cfg_prefix)/$(cfg_dir)
1006
1007 install-bin: $(bin_prefix)/$(bin_dir) $(NAME)
1008                 $(INSTALL_TOUCH) $(bin_prefix)/$(bin_dir)/$(NAME)
1009                 $(INSTALL_BIN) $(NAME) $(bin_prefix)/$(bin_dir)
1010
1011
1012 install-share: $(share_prefix)/$(share_dir)
1013         @for r in $(C_INSTALL_SHARE) "" ; do \
1014                 if [ -n "$$r" ]; then \
1015                         if [ -f "$$r" ]; then \
1016                                 $(call try_err, $(INSTALL_TOUCH) \
1017                                                 $(share_prefix)/$(share_dir)/`basename "$$r"` ); \
1018                                 $(call try_err, \
1019                                         $(INSTALL_SHARE)  "$$r"  $(share_prefix)/$(share_dir) );\
1020                         else \
1021                                 echo "ERROR: $$r not found" ; \
1022                                 if [ ${err_fail} = 1 ] ; then \
1023                                         exit 1; \
1024                                 fi ; \
1025                         fi ;\
1026                 fi ; \
1027         done; true
1028
1029
1030 install-every-module: $(foreach mods,$(modules_dirs),install-$(mods))
1031
1032 install-every-module-doc: $(foreach mods,$(modules_dirs),install-$(mods)-doc)
1033
1034 install-every-module-man: $(foreach mods,$(modules_dirs),install-$(mods)-man)
1035
1036 install-utils: utils $(bin_prefix)/$(bin_dir)
1037         @for r in $(C_INSTALL_BIN) "" ; do \
1038                 if [ -n "$$r" ]; then \
1039                         if [ -f "$$r" ]; then \
1040                                 $(call try_err, $(INSTALL_TOUCH) \
1041                                                 $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
1042                                 $(call try_err,\
1043                                         $(INSTALL_BIN)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
1044                         else \
1045                                 echo "ERROR: $$r not compiled" ; \
1046                                 if [ ${err_fail} = 1 ] ; then \
1047                                         exit 1; \
1048                                 fi ; \
1049                         fi ;\
1050                 fi ; \
1051         done; true
1052         @for r in $(C_INSTALL_SCRIPTS) "" ; do \
1053                 if [ -n "$$r" ]; then \
1054                         if [ -f "$$r" ]; then \
1055                                 $(call try_err, $(INSTALL_TOUCH) \
1056                                                 $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
1057                                 $(call try_err,\
1058                                         $(INSTALL_SCRIPT)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
1059                         else \
1060                                 echo "ERROR: $$r not compiled" ; \
1061                                 if [ ${err_fail} = 1 ] ; then \
1062                                         exit 1; \
1063                                 fi ; \
1064                         fi ;\
1065                 fi ; \
1066         done; true
1067         @for ut in $(C_INSTALL_UTILS) "" ; do \
1068                 if [ -n "$$ut" ]; then \
1069                         if [ -d "$$ut" ]; then \
1070                                 $(call try_err, $(MAKE) -C "$${ut}" install-if-newer ) ;\
1071                         fi ;\
1072                 fi ; \
1073         done; true
1074
1075
1076 install-modules-all: install-every-module install-every-module-doc
1077
1078
1079 install-doc: $(doc_prefix)/$(doc_dir) install-every-module-doc
1080         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/INSTALL 
1081         $(INSTALL_DOC) INSTALL $(doc_prefix)/$(doc_dir)
1082         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/README-MODULES 
1083         $(INSTALL_DOC) README-MODULES $(doc_prefix)/$(doc_dir)
1084         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/AUTHORS 
1085         $(INSTALL_DOC) AUTHORS $(doc_prefix)/$(doc_dir)
1086         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/NEWS
1087         $(INSTALL_DOC) NEWS $(doc_prefix)/$(doc_dir)
1088         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/README 
1089         $(INSTALL_DOC) README $(doc_prefix)/$(doc_dir)
1090
1091
1092 install-sr-man: $(man_prefix)/$(man_dir)/man8 $(man_prefix)/$(man_dir)/man5
1093                 @sed -e "s#/etc/$(CFG_NAME)/$(CFG_NAME)\.cfg#$(cfg_target)$(MAIN_NAME).cfg#g" \
1094                         -e "s#/usr/sbin/#$(bin_target)#g" \
1095                         $(foreach m,$(modules_dirs),\
1096                                 -e "s#/usr/lib/$(CFG_NAME)/$(m)\([^_]\)#$($(m)_target)\1#g") \
1097                         -e "s#/usr/share/doc/$(CFG_NAME)/#$(doc_target)#g" \
1098                         -e "s#$(SRC_NAME)#$(MAIN_NAME)#g" \
1099                         < $(SRC_NAME).8 >  \
1100                                                         $(man_prefix)/$(man_dir)/man8/$(MAIN_NAME).8
1101                 @chmod 644  $(man_prefix)/$(man_dir)/man8/$(MAIN_NAME).8
1102                 @sed -e "s#/etc/$(CFG_NAME)/$(CFG_NAME)\.cfg#$(cfg_target)$(MAIN_NAME).cfg#g" \
1103                         -e "s#/usr/sbin/#$(bin_target)#g" \
1104                         $(foreach m,$(modules_dirs),\
1105                                 -e "s#/usr/lib/$(CFG_NAME)/$(m)\([^_]\)#$($(m)_target)\1#g") \
1106                         -e "s#/usr/share/doc/$(CFG_NAME)/#$(doc_target)#g" \
1107                         -e "s#$(SRC_NAME)#$(MAIN_NAME)#g" \
1108                         < $(SRC_NAME).cfg.5 >  \
1109                         $(man_prefix)/$(man_dir)/man5/$(MAIN_NAME).cfg.5
1110                 @chmod 644  $(man_prefix)/$(man_dir)/man5/$(MAIN_NAME).cfg.5
1111
1112 install-man:  install-sr-man install-every-module-man
1113
1114
1115
1116 # libs cleaning targets
1117 .PHONY: clean-libs
1118 clean-libs:
1119                         $(MAKE) -C lib clean
1120
1121 .PHONY: proper-libs realclean-libs distclean-libs maintainer-clean-libs
1122 proper-libs realclean-libs distclean-libs maintainer-clean-libs:
1123                         $(MAKE) -C lib $(patsubst %-libs,%,$@)
1124
1125 # utils cleaning targets
1126
1127 .PHONY: clean-utils
1128 clean-utils:
1129         @for r in $(C_COMPILE_UTILS) $(C_INSTALL_UTILS) "" ; do \
1130                 if [ -d "$$r" ]; then \
1131                          $(MAKE) -C "$$r" clean ; \
1132                 fi ; \
1133         done
1134
1135 .PHONY: proper-utils
1136 .PHONY: distclean-utils
1137 .PHONY: realclean-utils
1138 .PHONY: maintainer-clean-utils
1139 proper-utils realclean-utils distclean-utils maintainer-clean-utils: \
1140  clean_target=$(patsubst %-utils,%,$@)
1141 proper-utils realclean-utils distclean-utils maintainer-clean-utils:
1142         @for r in $(C_COMPILE_UTILS) $(C_INSTALL_UTILS) "" ; do \
1143                 if [ -d "$$r" ]; then \
1144                          $(MAKE) -C "$$r" $(clean_target); \
1145                 fi ; \
1146         done
1147
1148 # clean extra binary names (common "flavour" names)
1149 clean: clean-extra-names
1150 # clean modules on make clean
1151 clean: clean-modules
1152 # clean utils on make clean
1153 clean: clean-utils
1154 # cleaning in libs always when cleaning sip-router
1155 clean: clean-libs
1156
1157 .PHONY: clean-extra-names
1158 clean-extra-names:
1159         @rm -f $(filter-out $(MAIN_NAME), sip-router ser kamailio)
1160
1161 # proper/distclean a.s.o modules, utils and libs too
1162
1163 proper: clean-extra-names proper-modules proper-utils proper-libs
1164 distclean: distclean-modules distclean-utils distclean-libs
1165 realclean: realclean-modules realclean-utils realclean-libs
1166 maintainer-clean: maintainer-clean-modules maintainer-clean-utils \
1167  maintainer-clean-libs
1168
1169 #try to clean everything (including all the modules, even ones that are not
1170 # configured/compiled normally
1171 .PHONY: clean-all
1172 clean-all: cmodules=$(all_modules_lst)
1173 clean-all: clean
1174 maintainer-clean: modules=$(modules_all)
1175
1176 # on make proper clean also the build config (w/o module list)
1177 proper realclean distclean maintainer-clean: clean_cfg
1178
1179 # on maintainer clean, remove also the configured module list
1180 maintainer-clean: clean_modules_cfg clean_makefile_vars
1181
1182 .PHONY: proper-all realclean-all distclean-all
1183 proper-all realclean-all distclean-all: cmodules=$(all_modules_lst)
1184 proper-all realclean-all distclean-all: proper
1185
1186
1187 .PHONY: clean_cfg clean-cfg
1188 clean_cfg clean-cfg:
1189         rm -f config.mak
1190
1191 .PHONY: clean_modules_cfg clean-modules-cfg
1192 clean_modules_cfg clean-modules-cfg:
1193         rm -f modules.lst
1194
1195 .PHONY: clean_makefile_vars clean-makefile-vars
1196         rm -f Makefile.vars
1197
1198 .PHONY: dbschema
1199 dbschema:
1200         -@echo "Build database schemas"
1201         $(MAKE) -C lib/srdb1/schema
1202         -@echo "Done"
1203
1204 .PHONY: printcdefs
1205 printcdefs:
1206         @echo -n $(C_DEFS)