003ba26d63f918b5e31ad2979ced34d848eb04f1
[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-04-02  workaround for export not supported in gnu make 3.80
60 #               target specific variables: use mk_params for each
61 #               $(MAKE) invocation (andrei)
62 #
63
64 # check make version
65 # required 3.80, recommended 3.81
66 req_ver=3.80
67 # the check below works for version number of the type x.yy or x.yy.z*
68 # (from the GNU Make Cookbook)
69 ifeq (,$(filter $(req_ver),$(firstword $(sort $(MAKE_VERSION) $(req_ver)))))
70 $(error make version $(MAKE_VERSION) not supported, use at least $(req_ver))
71 endif
72
73
74 auto_gen=lex.yy.c cfg.tab.c #lexx, yacc etc
75 auto_gen_others=cfg.tab.h  # auto generated, non-c
76
77 #include  source related defs
78 include Makefile.sources
79
80 # whether or not the entire build process should fail if building a module or
81 #  an utility fails
82 err_fail?=1
83
84 # whether or not to install ser.cfg or just ser.cfg.default
85 # (ser.cfg will never be overwritten by make install, this is usefull
86 #  when creating packages)
87 skip_cfg_install?=
88
89 #extra modules to exclude
90 skip_modules?=
91
92 # Set document format
93 # Alternatives are txt, html, xhtml, and pdf (see Makefile.doc)
94 doc_format?=html
95
96 include modules.lst
97
98 #if called with group_include, ignore the modules from modules.lst
99 ifneq ($(group_include),)
100         include_modules=
101         exclude_modules=
102         modules_configured:=0
103 endif
104
105 # Module group definitions, default only include the standard group
106 # Make backwards compatible, don't set group_include default...
107 #group_include?="standard"
108
109 # Modules in this group are considered a standard part of SER (due to 
110 # widespread usage) and have no external compile or link dependencies (note 
111 # that some of these interplay with external systems).
112 module_group_standard=acc_syslog auth avp ctl dispatcher diversion enum\
113                                 eval exec fifo flatstore gflags maxfwd mediaproxy \
114                                 nathelper options pdt permissions pike print ratelimit \
115                                 registrar rr sanity sl textops timer tm uac unixsock uri \
116                                 usrloc xlog cfg_rpc
117
118 # Modules in this group are considered a standard part of SER (due to 
119 # widespread usage) but they have dependencies that must be satisfied for 
120 # compilation.
121 # acc_radius, auth_radius, avp_radius, uri_radius => radiusclient-ng
122 # acc_db, auth_db, avp_db, db_ops, domain, lcr, msilo, dialog, speeddial,
123 # uri_db => database module (mysql, postgres, dbtext)
124 # mysql, postgres => mysql server and client libraries or postgres server and
125 #  client libraries or other database back-end (ex. mysql-devel)
126 # pa, xmlrpc => libxml2
127 # rls => pa
128 #
129 # NOTE! All presence modules (dialog, pa, presence_b2b, rls, xcap) have been
130 # included in this group due to interdependencies
131 module_group_standard_dep=acc_db acc_radius auth_db auth_radius avp_db \
132                                 avp_radius auth_identity \
133                                 db_ops domain lcr msilo mysql dialog pa postgres \
134                                 presence_b2b rls speeddial uri_db xcap xmlrpc
135
136 # For mysql
137 module_group_mysql=acc_db auth_db avp_db db_ops uri_db domain lcr msilo mysql\
138                                 speeddial
139
140 # For radius
141 module_group_radius=acc_radius auth_radius avp_radius
142
143 # For presence
144 module_group_presence=dialog pa presence_b2b rls xcap
145
146 # Modules in this group satisfy specific or niche applications, but are 
147 # considered stable for production use. They may or may not have dependencies
148 # cpl-c => libxml2
149 # jabber => expat (library)
150 # osp => OSP Toolkit (sipfoundry)
151 # sms => none (external modem)
152 module_group_stable=cpl-c dbtext jabber osp sms
153
154 # Modules in this group are either not complete, untested, or without enough
155 # reports of usage to allow the module into the stable group. They may or may
156 # not have dependencies
157 module_group_experimental=tls oracle iptrtpproxy
158
159 # if not set on the cmd. line, env or in the modules.lst (cfg_group_include)
160 # exclude the below modules.
161 ifneq ($(group_include)$(cfg_group_include),)
162         # For group_include, default all modules are excluded except those in 
163         # include_modules
164         exclude_modules?=
165 else
166         # Old defaults for backwards compatibility
167         exclude_modules?=               cpl mangler postgres jabber mysql cpl-c \
168                                                         auth_radius uri_radius avp_radius \
169                                                         acc_radius dialog pa rls presence_b2b xcap xmlrpc\
170                                                         osp tls oracle \
171                                                         unixsock dbg print_lib auth_identity ldap
172         # excluded because they do not compile (remove them only after they are
173         #  fixed) -- andrei
174         exclude_modules+= avpops  bdb dbtext iptrtpproxy pa rls
175 endif
176
177 # always exclude the CVS dir
178 override exclude_modules+= CVS $(skip_modules)
179
180 # Test for the groups and add to include_modules
181 ifneq (,$(findstring standard,$(group_include)))
182         override include_modules+= $(module_group_standard)
183 endif
184
185 ifneq (,$(findstring standard-dep,$(group_include)))
186         override include_modules+= $(module_group_standard_dep)
187 endif
188
189 ifneq (,$(findstring mysql,$(group_include)))
190         override include_modules+= $(module_group_mysql)
191 endif
192
193 ifneq (,$(findstring radius,$(group_include)))
194         override include_modules+= $(module_group_radius)
195 endif
196
197 ifneq (,$(findstring presence,$(group_include)))
198         override include_modules+= $(module_group_presence)
199 endif
200
201 ifneq (,$(findstring stable,$(group_include)))
202         override include_modules+= $(module_group_stable)
203 endif
204
205 ifneq (,$(findstring experimental,$(group_include)))
206         override include_modules+= $(module_group_experimental)
207 endif
208
209 # first 2 lines are excluded because of the experimental or incomplete
210 # status of the modules
211 # the rest is excluded because it depends on external libraries
212 #
213 static_modules:=
214
215 ALLDEP=config.mak Makefile Makefile.sources Makefile.rules
216
217 #include general defs (like CC, CFLAGS  a.s.o)
218 # hack to force makefile.defs re-inclusion (needed when make calls itself with
219 # other options -- e.g. make bin)
220 #makefile_defs=0
221 #C_DEFS:=
222
223
224 # try saved cfg, unless we are in the process of building it
225 ifeq (,$(filter config.mak config cfg cfg-defs,$(MAKECMDGOALS)))
226 include config.mak
227 ifeq ($(makefile_defs),1)
228 $(info config.mak loaded)
229 # config_make valid & used
230 config_mak=1
231 endif
232 else
233 ifneq (,$(filter cfg config cfg-defs,$(word 1,$(MAKECMDGOALS))))
234 # needed here to avoid starting a config submake 
235 # (e.g. rm -f config.mak; make config.mak), which would either require 
236 # double Makefile.defs defines execution (suboptimal), would loose
237 # $(value ...) expansion or would cause some warning (if Makefile.defs exec. 
238 # is skipped in the "main" makefile invocation).
239 $(shell rm -rf config.mak)
240 endif
241 endif
242
243
244 main_makefile=1
245 include Makefile.defs
246
247 static_modules_path=$(addprefix modules/, $(static_modules))
248 extra_sources=$(wildcard $(addsuffix /*.c, $(static_modules_path)))
249 extra_objs=$(extra_sources:.c=.o)
250
251 static_defs:= $(foreach  mod, $(static_modules), \
252                 -DSTATIC_$(shell echo $(mod) | tr [:lower:] [:upper:]) )
253
254 override extra_defs+=$(static_defs) $(EXTRA_DEFS)
255 export extra_defs
256
257 # Historically, the resultant set of modules is: modules/* - exclude_modules +
258 # include_modules
259 # When group_include is used, we want: include_modules (based on group_include)
260 # - exclude_modules
261
262 ifneq ($(modules_configured),1) 
263 modules_all=$(filter-out modules/CVS,$(wildcard modules/*))
264 ifneq ($(group_include),)
265         modules=$(filter-out $(addprefix modules/, \
266                         $(exclude_modules) $(static_modules)), \
267                         $(addprefix modules/, $(include_modules) ))
268 else    
269         # Standard, old resultant set
270         modules_noinc=$(filter-out $(addprefix modules/, \
271                         $(exclude_modules) $(static_modules)), $(modules_all))
272         modules=$(filter-out $(modules_noinc), \
273                                 $(addprefix modules/, $(include_modules) )) $(modules_noinc)
274 endif # ifneq($(group_include),)
275 endif # ifneq($(modules_configured),1)
276 modules_names=$(shell echo $(modules)| \
277                                 sed -e 's/modules\/\([^/ ]*\)\/*/\1.so/g' )
278 modules_basenames:=$(shell echo $(modules)| \
279                                 sed -e 's/modules\/\([^/ ]*\)\/*/\1/g' )
280 #modules_names=$(patsubst modules/%, %.so, $(modules))
281 #modules_full_path=$(join  $(modules), $(addprefix /, $(modules_names)))
282
283
284 # which utils need compilation (directory path) and which to install
285 # (full path including file name)
286 utils_compile=  utils/gen_ha1 utils/sercmd
287 utils_bin_install=      utils/gen_ha1/gen_ha1 utils/sercmd/sercmd
288 utils_script_install=
289
290 # This is the list of files to be installed into the arch-independent
291 # shared directory (by default /usr/local/share/ser)
292 share_install= scripts/mysql/my_create.sql \
293                            scripts/mysql/my_data.sql   \
294                            scripts/mysql/my_drop.sql
295
296
297
298 NAME=$(MAIN_NAME)
299
300 tar_name=$(NAME)-$(RELEASE)_src
301
302 tar_extra_args+=$(addprefix --exclude=$(notdir $(CURDIR))/, \
303                                         $(auto_gen) $(auto_gen_others))
304 ifeq ($(CORE_TLS), 1)
305         tar_extra_args+=
306 else
307         tar_extra_args+=--exclude=$(notdir $(CURDIR))/tls/* 
308 endif
309
310 ifneq ($(nodeb),)
311         tar_extra_args+=--exclude=$(notdir $(CURDIR))/debian 
312         tar_name:=$(tar_name)_nodeb
313 endif
314
315 # sanity checks
316 ifneq ($(TLS),)
317         $(warning "make TLS option is obsoleted, try TLS_HOOKS or CORE_TLS")
318 endif
319
320 # include the common rules
321 include Makefile.targets
322 include Makefile.rules
323
324 #extra targets 
325
326 $(NAME): $(extra_objs) # static_modules
327
328 lex.yy.c: cfg.lex cfg.tab.h $(ALLDEP)
329         $(LEX) $<
330
331 cfg.tab.c cfg.tab.h: cfg.y  $(ALLDEP)
332         $(YACC) $(YACC_FLAGS) $<
333
334 include Makefile.shared
335
336 ifeq ($(config_mak),1)
337
338 COREPATH=.
339 include Makefile.cfg
340
341 else
342
343 config.mak: Makefile.defs
344         @echo making config...
345         @echo "# this file is autogenerated by make cfg" >$@
346         @$(call mapf2,cfg_save_var,saved_fixed_vars,$(@))
347         @$(call mapf2,cfg_save_var2,saved_chg_vars,$(@))
348         @echo "override makefile_defs:=1" >>$@
349         @echo "C_DEFS:=\$$(filter-out \$$(DEFS_RM) \$$(extra_defs),\$$(C_DEFS))" \
350                                         "\$$(extra_defs)"  >>$@
351         @echo "CFLAGS:=\$$(filter-out \$$(CFLAGS_RM) \$$(CC_EXTRA_OPTS)," \
352                                                 "\$$(CFLAGS)) \$$(CC_EXTRA_OPTS)" >>$@
353
354 endif # ifeq ($(config_mak),1)
355
356 modules.lst:
357         @echo  saving modules list...
358         @echo "# this file is autogenerated by make modules-cfg" >$@
359         @echo "cfg_group_include=$(group_include)" >>$@
360         @$(call cfg_save_var2,include_modules,$@)
361         @$(call cfg_save_var2,static_modules,$@)
362         @$(call cfg_save_var2,skip_modules,$@)
363         @$(call cfg_save_var2,exclude_modules,$@)
364         @$(call cfg_save_var2,modules_all,$@)
365         @$(call cfg_save_var2,modules_noinc,$@)
366         @$(call cfg_save_var2,modules,$@)
367         @echo "modules_configured:=1" >>$@
368
369 .PHONY: cfg config cfg-defs
370 cfg-defs: config.mak
371
372 cfg config: cfg-defs modules-cfg
373
374 .PHONY: modules-cfg modules-list modules-lst
375 modules-cfg modules-list modules-lst: 
376         rm -f modules.lst
377         $(MAKE) modules.lst
378
379 .PHONY: all
380 all: $(NAME) modules
381
382 .PHONY: print-modules
383 print-modules:
384         @echo The following modules were chosen to be included: \
385                 $(include_modules) ; \
386         echo ---------------------------------------------------------- ; \
387         echo The following modules will be excluded: $(exclude_modules) ; \
388         echo ---------------------------------------------------------- ; \
389         echo The following modules will be made: $(modules_basenames) ; \
390
391 .PHONY: modules
392 modules: modules.lst
393         @for r in $(modules) "" ; do \
394                 if [ -n "$$r" -a -r "$$r/Makefile" ]; then \
395                         echo  "" ; \
396                         echo  "" ; \
397                         if  $(MAKE) -C $$r $(mk_params) || [ ${err_fail} != 1 ] ; \
398                         then\
399                                 :; \
400                         else \
401                                 exit 1; \
402                         fi ; \
403                 fi ; \
404         done; true
405
406 $(extra_objs):
407         @echo "Extra objs: $(extra_objs)" 
408         @for r in $(static_modules_path) "" ; do \
409                 if [ -n "$$r" -a -r "$$r/Makefile"  ]; then \
410                         echo  "" ; \
411                         echo  "Making static module $r" ; \
412                         if $(MAKE) -C $$r static $(mk_params) ; then  \
413                                 :; \
414                         else \
415                                 exit 1; \
416                         fi ;  \
417                 fi ; \
418         done
419
420 .PHONY: utils
421 utils:
422         @for r in $(utils_compile) "" ; do \
423                 if [ -n "$$r" ]; then \
424                         echo  "" ; \
425                         echo  "" ; \
426                         if  $(MAKE) -C $$r $(mk_params) || [ ${err_fail} != 1 ] ; \
427                         then \
428                                 :; \
429                         else \
430                                 exit 1; \
431                         fi ; \
432                 fi ; \
433         done; true
434
435
436 dbg: ser
437         gdb -command debug.gdb
438
439 .PHONY: tar
440 .PHONY: dist
441
442 dist: tar
443
444 tar: 
445         $(TAR) -C .. \
446                 --exclude=$(notdir $(CURDIR))/test* \
447                 --exclude=$(notdir $(CURDIR))/tmp* \
448                 --exclude=$(notdir $(CURDIR))/debian/ser \
449                 --exclude=$(notdir $(CURDIR))/debian/ser-* \
450                 --exclude=$(notdir $(CURDIR))/ser_tls* \
451                 --exclude=CVS* \
452                 --exclude=.svn* \
453                 --exclude=.cvsignore \
454                 --exclude=librpath.lst \
455                 --exclude=libiname.lst \
456                 --exclude=makecfg.lst \
457                 --exclude=config.mak \
458                 --exclude=modules.lst \
459                 --exclude=*.[do] \
460                 --exclude=*.so \
461                 --exclude=*.il \
462                 --exclude=$(notdir $(CURDIR))/ser \
463                 --exclude=*.gz \
464                 --exclude=*.bz2 \
465                 --exclude=*.tar \
466                 --exclude=*.patch \
467                 --exclude=.\#* \
468                 --exclude=*.swp \
469                 ${tar_extra_args} \
470                 -cf - $(notdir $(CURDIR)) | \
471                         (mkdir -p tmp/_tar1; mkdir -p tmp/_tar2 ; \
472                             cd tmp/_tar1; $(TAR) -xf - ) && \
473                             mv tmp/_tar1/$(notdir $(CURDIR)) \
474                                tmp/_tar2/"$(NAME)-$(RELEASE)" && \
475                             (cd tmp/_tar2 && $(TAR) \
476                                             -zcf ../../"$(tar_name)".tar.gz \
477                                                        "$(NAME)-$(RELEASE)" ) ; \
478                             rm -rf tmp/_tar1; rm -rf tmp/_tar2
479
480 # binary dist. tar.gz
481 .PHONY: bin
482 bin:
483         mkdir -p tmp/ser/usr/local
484         $(MAKE) install basedir=tmp/ser $(mk_params)
485         $(TAR) -C tmp/ser/ -zcf ../$(NAME)-$(RELEASE)_$(OS)_$(ARCH).tar.gz .
486         rm -rf tmp/ser
487
488 .PHONY: deb
489 deb:
490         -@if [ -d debian ]; then \
491                 dpkg-buildpackage -rfakeroot -tc; \
492         else \
493                 ln -s pkg/debian debian; \
494                 dpkg-buildpackage -rfakeroot -tc; \
495                 rm debian; \
496         fi
497
498 .PHONY: sunpkg
499 sunpkg:
500         mkdir -p tmp/ser
501         mkdir -p tmp/ser_sun_pkg
502         $(MAKE) install basedir=tmp/ser prefix=/usr/local $(mk_params)
503         (cd pkg/solaris; \
504         pkgmk -r ../../tmp/ser/usr/local -o -d ../../tmp/ser_sun_pkg/ -v "$(RELEASE)" ;\
505         cd ../..)
506         cat /dev/null > ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local
507         pkgtrans -s tmp/ser_sun_pkg/ ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local \
508                 IPTELser
509         gzip -9 ../$(NAME)-$(RELEASE)-$(OS)-$(ARCH)-local
510         rm -rf tmp/ser
511         rm -rf tmp/ser_sun_pkg
512
513 .PHONY: modules-doc
514 modules-doc: modules.lst
515         -@for r in $(modules) "" ; do \
516                 if [ -n "$$r" ]; then \
517                         echo  "" ; \
518                         echo  "" ; \
519                         $(MAKE) -C $$r/doc $(doc_format)  $(mk_params); \
520                 fi ; \
521         done 
522
523 .PHONY: modules-readme
524 modules-readme: README
525
526 .PHONY: README
527 README: modules.lst
528         -@for r in $(modules) "" ; do \
529                 if [ -n "$$r" ]; then \
530                         echo  "" ; \
531                         echo  "" ; \
532                         if  $(MAKE) -C $$r README $(mk_params) || \
533                                 [ ${err_fail} != 1 ] ; then \
534                                 :; \
535                         else \
536                                 exit 1; \
537                         fi ; \
538                 fi ; \
539         done; true 
540
541 .PHONY: modules-man
542 modules-man: man
543
544 .PHONY: man
545 man: modules.lst
546         -@for r in $(modules) "" ; do \
547                 if [ -n "$$r" ]; then \
548                         echo  "" ; \
549                         echo  "" ; \
550                         if  $(MAKE) -C $$r man $(mk_params) || [ ${err_fail} != 1 ] ; \
551                         then \
552                                 :; \
553                         else \
554                                 exit 1; \
555                         fi ; \
556                 fi ; \
557         done; true
558
559 .PHONY: install
560 install: mk_params="compile_for_install=yes"
561 install: install-bin install-modules install-cfg \
562         install-doc install-man install-utils install-share
563
564 .PHONY: dbinstall
565 dbinstall:
566         -@echo "Initializing ser database"
567         scripts/mysql/ser_mysql.sh create
568         -@echo "Done"
569
570 mk-install_dirs: $(cfg_prefix)/$(cfg_dir) $(bin_prefix)/$(bin_dir) \
571                         $(modules_prefix)/$(modules_dir) $(doc_prefix)/$(doc_dir) \
572                         $(man_prefix)/$(man_dir)/man8 $(man_prefix)/$(man_dir)/man5 \
573             $(share_prefix)/$(share_dir)
574
575
576 $(cfg_prefix)/$(cfg_dir): 
577                 mkdir -p $(cfg_prefix)/$(cfg_dir)
578
579 $(bin_prefix)/$(bin_dir):
580                 mkdir -p $(bin_prefix)/$(bin_dir)
581
582 $(share_prefix)/$(share_dir):
583                 mkdir -p $(share_prefix)/$(share_dir)
584
585 $(modules_prefix)/$(modules_dir):
586                 mkdir -p $(modules_prefix)/$(modules_dir)
587
588
589 $(doc_prefix)/$(doc_dir):
590                 mkdir -p $(doc_prefix)/$(doc_dir)
591
592 $(man_prefix)/$(man_dir)/man8:
593                 mkdir -p $(man_prefix)/$(man_dir)/man8
594
595 $(man_prefix)/$(man_dir)/man7:
596                 mkdir -p $(man_prefix)/$(man_dir)/man7
597
598 $(man_prefix)/$(man_dir)/man5:
599                 mkdir -p $(man_prefix)/$(man_dir)/man5
600
601 # note: sed with POSIX.1 regex doesn't support |, + or ? (darwin, solaris ...) 
602 install-cfg: $(cfg_prefix)/$(cfg_dir)
603                 sed -e "s#/usr/.*lib/ser/modules/#$(modules-target)#g" \
604                         < etc/ser-basic.cfg > $(cfg_prefix)/$(cfg_dir)ser.cfg.sample
605                 chmod 644 $(cfg_prefix)/$(cfg_dir)ser.cfg.sample
606                 if [ -z "${skip_cfg_install}" -a \
607                                 ! -f $(cfg_prefix)/$(cfg_dir)ser.cfg ]; then \
608                         mv -f $(cfg_prefix)/$(cfg_dir)ser.cfg.sample \
609                                 $(cfg_prefix)/$(cfg_dir)ser.cfg; \
610                 fi
611                 sed -e "s#/usr/.*lib/ser/modules/#$(modules-target)#g" \
612                         < etc/ser-oob.cfg \
613                         > $(cfg_prefix)/$(cfg_dir)ser-advanced.cfg.sample
614                 chmod 644 $(cfg_prefix)/$(cfg_dir)ser-advanced.cfg.sample
615                 if [ -z "${skip_cfg_install}" -a \
616                                 ! -f $(cfg_prefix)/$(cfg_dir)ser-advanced.cfg ]; then \
617                         mv -f $(cfg_prefix)/$(cfg_dir)ser-advanced.cfg.sample \
618                                 $(cfg_prefix)/$(cfg_dir)ser-advanced.cfg; \
619                 fi
620                 # radius dictionary
621                 $(INSTALL_TOUCH) $(cfg_prefix)/$(cfg_dir)/dictionary.ser
622                 $(INSTALL_CFG) etc/dictionary.ser $(cfg_prefix)/$(cfg_dir)
623
624                 # TLS configuration
625                 $(INSTALL_TOUCH) $(cfg_prefix)/$(cfg_dir)/tls.cfg
626                 $(INSTALL_CFG) modules/tls/tls.cfg $(cfg_prefix)/$(cfg_dir)
627                 modules/tls/ser_cert.sh -d $(cfg_prefix)/$(cfg_dir)
628
629 install-bin: $(bin_prefix)/$(bin_dir) $(NAME)
630                 $(INSTALL_TOUCH) $(bin_prefix)/$(bin_dir)/$(NAME)
631                 $(INSTALL_BIN) $(NAME) $(bin_prefix)/$(bin_dir)
632
633
634 install-share: $(share_prefix)/$(share_dir)
635         @for r in $(share_install) "" ; do \
636                 if [ -n "$$r" ]; then \
637                         if [ -f "$$r" ]; then \
638                                 $(call try_err, $(INSTALL_TOUCH) \
639                                                 $(share_prefix)/$(share_dir)/`basename "$$r"` ); \
640                                 $(call try_err, \
641                                         $(INSTALL_SHARE)  "$$r"  $(share_prefix)/$(share_dir) );\
642                         else \
643                                 echo "ERROR: $$r not found" ; \
644                                 if [ ${err_fail} = 1 ] ; then \
645                                         exit 1; \
646                                 fi ; \
647                         fi ;\
648                 fi ; \
649         done; true
650
651 install-modules: modules.lst $(modules_prefix)/$(modules_dir)
652         @for r in $(modules) "" ; do \
653                 if [ -n "$$r" -a -r "$$r/Makefile" ]; then \
654                         echo  "" ; \
655                         echo  "" ; \
656                         if  $(MAKE) -C $$r install $(mk_params) || \
657                                 [ ${err_fail} != 1 ] ; then \
658                                 :; \
659                         else \
660                                 exit 1; \
661                         fi ; \
662                 fi ; \
663         done; true
664
665 install-utils: utils $(bin_prefix)/$(bin_dir)
666         @for r in $(utils_bin_install) "" ; do \
667                 if [ -n "$$r" ]; then \
668                         if [ -f "$$r" ]; then \
669                                 $(call try_err, $(INSTALL_TOUCH) \
670                                                 $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
671                                 $(call try_err,\
672                                         $(INSTALL_BIN)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
673                         else \
674                                 echo "ERROR: $$r not compiled" ; \
675                                 if [ ${err_fail} = 1 ] ; then \
676                                         exit 1; \
677                                 fi ; \
678                         fi ;\
679                 fi ; \
680         done; true
681         @for r in $(utils_script_install) "" ; do \
682                 if [ -n "$$r" ]; then \
683                         if [ -f "$$r" ]; then \
684                                 $(call try_err, $(INSTALL_TOUCH) \
685                                                 $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
686                                 $(call try_err,\
687                                         $(INSTALL_SCRIPT)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
688                         else \
689                                 echo "ERROR: $$r not compiled" ; \
690                                 if [ ${err_fail} = 1 ] ; then \
691                                         exit 1; \
692                                 fi ; \
693                         fi ;\
694                 fi ; \
695         done; true
696         # FIXME: This is a hack, this should be (and will be) done properly in
697     # per-module Makefiles
698         sed -e "s#^DEFAULT_SCRIPT_DIR.*#DEFAULT_SCRIPT_DIR=\"$(share_prefix)/$(share_dir)\"#g" \
699                 < scripts/mysql/ser_mysql.sh > $(bin_prefix)/$(bin_dir)/ser_mysql.sh
700         chmod 755 $(bin_prefix)/$(bin_dir)/ser_mysql.sh
701
702
703 install-modules-all: install-modules install-modules-doc
704
705
706 install-doc: $(doc_prefix)/$(doc_dir) install-modules-doc
707         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/INSTALL 
708         $(INSTALL_DOC) INSTALL $(doc_prefix)/$(doc_dir)
709         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/README-MODULES 
710         $(INSTALL_DOC) README-MODULES $(doc_prefix)/$(doc_dir)
711         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/AUTHORS 
712         $(INSTALL_DOC) AUTHORS $(doc_prefix)/$(doc_dir)
713         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/NEWS
714         $(INSTALL_DOC) NEWS $(doc_prefix)/$(doc_dir)
715         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/README 
716         $(INSTALL_DOC) README $(doc_prefix)/$(doc_dir)
717
718
719 install-modules-doc: modules.lst $(doc_prefix)/$(doc_dir)
720         @for r in $(modules_basenames) "" ; do \
721                 if [ -n "$$r" ]; then \
722                         if [ -f modules/"$$r"/README ]; then \
723                                 $(call try_err,\
724                                         $(INSTALL_TOUCH) $(doc_prefix)/$(doc_dir)/README ); \
725                                 $(call try_err,\
726                                         $(INSTALL_DOC)  modules/"$$r"/README  \
727                                                                         $(doc_prefix)/$(doc_dir)/README ); \
728                                 $(call try_err,\
729                                         mv -f $(doc_prefix)/$(doc_dir)/README \
730                                                         $(doc_prefix)/$(doc_dir)/README."$$r" ); \
731                         fi ; \
732                 fi ; \
733         done; true
734
735
736 install-ser-man: $(man_prefix)/$(man_dir)/man8 $(man_prefix)/$(man_dir)/man5
737                 sed -e "s#/etc/ser/ser\.cfg#$(cfg_target)ser.cfg#g" \
738                         -e "s#/usr/sbin/#$(bin_target)#g" \
739                         -e "s#/usr/lib/ser/modules/#$(modules_target)#g" \
740                         -e "s#/usr/share/doc/ser/#$(doc_target)#g" \
741                         < ser.8 >  $(man_prefix)/$(man_dir)/man8/ser.8
742                 chmod 644  $(man_prefix)/$(man_dir)/man8/ser.8
743                 sed -e "s#/etc/ser/ser\.cfg#$(cfg_target)ser.cfg#g" \
744                         -e "s#/usr/sbin/#$(bin_target)#g" \
745                         -e "s#/usr/lib/ser/modules/#$(modules_target)#g" \
746                         -e "s#/usr/share/doc/ser/#$(doc_target)#g" \
747                         < ser.cfg.5 >  $(man_prefix)/$(man_dir)/man5/ser.cfg.5
748                 chmod 644  $(man_prefix)/$(man_dir)/man5/ser.cfg.5
749
750 install-man:  install-ser-man install-modules-man
751
752 install-modules-man: modules-man $(man_prefix)/$(man_dir)/man7
753         @for r in $(modules_basenames) "" ; do \
754                 if [ -n "$$r" ]; then \
755                         if [ -f modules/"$$r"/"$$r".7 ]; then \
756                                 $(call try_err,\
757                                         $(INSTALL_TOUCH) $(man_prefix)/$(man_dir)/man7/"$$r".7 );\
758                                 $(call try_err,\
759                                         $(INSTALL_MAN)  modules/"$$r"/"$$r".7  \
760                                                                         $(man_prefix)/$(man_dir)/man7 ); \
761                         fi ; \
762                 fi ; \
763         done; true
764
765
766 .PHONY: clean_libs
767
768 clean_libs:
769                         $(MAKE) -C lib proper
770
771
772 # cleaning in libs always when cleaning ser
773 clean:  clean_libs
774
775 #try to clean everything (including all the modules, even ones that are not
776 # configured/compiled normally
777 .PHONY: clean-all
778 clean-all: modules=$(modules_all)
779 clean-all: clean
780
781 # on make proper clean also the build config (w/o module list)
782 proper realclean distclean: clean_cfg 
783
784 # on maintainer clean, remove also the configured module list
785 maintainer-clean: clean_modules_cfg
786
787 .PHONY: proper-all realclean-all distclean-all
788 proper-all realclean-all distclean-all: modules=$(modules_all)
789 proper-all realclean-all distclean-all: proper
790
791
792 .PHONY: clean_cfg
793 clean_cfg:
794         rm -f config.mak
795
796 .PHONY: clean_modules_cfg clean-modules-cfg
797 clean_modules_cfg clean-modules-cfg:
798         rm -f modules.lst