Merge remote branch 'origin/daniel/xavp'
[sip-router] / Makefile.modules
1 #
2 # $Id$
3 #
4 # module Makefile
5 #(to be included from each module)
6 #
7 # History:
8 # --------
9 #  2007-03-29  if a module depends on SER_LIBS, it will be rebuilt on install
10 #               with the proper rpath; libraries will be automatically
11 #               installed if needed (andrei)
12 #  2008-06-23  added the README & man targets (andrei)
13 #  2008-06-27  make cfg / config.mak support (andrei)
14 #  2009-03-10  replaced DEFS with C_DEFS and INCLUDES with C_INCLUDES (DEFS
15 #              and INCLUDES are now used only for "temporary" defines/includes
16 #              inside modules or libs) (andrei)
17 #  2009-10-01  added support for automatically installing extra utils,
18 #               scripts and cfg files (andrei)
19 #
20
21 #
22 # Variables that should be defined in the modules, prior to including
23 # this makefile:
24 #
25 # NAME - module binary name, complete with .so and no path (MUST).
26 #
27 # COREPATH - path to the main/core directory (OPTIONAL, default ../..)
28 #
29 # DEFS - per module extra defines (OPTIONAL)
30 #
31 # LIBS - per module extra libs (OPTIONAL)
32 #
33 # SER_LIBS - ser/sr libs that should be compiled, linked against and installed
34 #           along the module. The format is: <path>/<shortname>, e.g.
35 #           SER_LIBS=../../lib/srdb2/srdb2 for libsrdb2 with the sources
36 #            in ../../lib/srdb2. (OPTIONAL)
37 #
38 # MOD_INSTALL_UTILS - list of utils directories that should be compiled and
39 #                     installed along the module. The utils must know how to
40 #                     install themselves (make install).
41 #                     E.g.: MOD_INSTALL_UTILS=../../utils/sercmd
42 #                     (OPTIONAL)
43 #
44 # MOD_INSTALL_SCRIPTS - list of scripts (complete path including the file name)
45 #                       that should be installed along the module.
46 #                       E.g.: MOD_INSTALL_SCRIPTS=../../scripts/foo/foo.sh
47 #                       (OPTIONAL)
48 #
49 # MOD_INSTALL_CFGS - list of extra config files that should be installed in
50 #                    the main config directory, along the module (OPTIONAL).
51 #
52 # MOD_INSTALL_SHARE - list of files to install into the arch-independent
53 #                     shared directory (by default
54 #                     /usr/local/share/$(MAIN_NAME))
55 #
56
57 MOD_NAME=$(NAME:.so=)
58
59 # allow placing modules in separate directory apart from ser core
60 COREPATH ?=../..
61
62 ALLDEP=Makefile $(COREPATH)/Makefile.sources $(COREPATH)/Makefile.rules \
63  $(COREPATH)/Makefile.modules $(COREPATH)/Makefile.dirs $(COREPATH)/config.mak
64
65 #override modules value, a module cannot have submodules
66 override modules=
67 override static_modules=
68 override static_modules_path=
69
70 # should be set in the Makefile of each module
71 # INCLUDES += -I$(COREPATH)
72
73 # temporary def (visible only in the module, not exported)
74 DEFS += -DMOD_NAME='"$(MOD_NAME)"'
75
76 ifneq ($(makefile_defs_included),1)
77 $(error "the local makefile does not include Makefile.defs!")
78 endif
79
80 ifeq ($(MAKELEVEL), 0)
81 # make called directly in the module dir!
82
83 #$(warning "you should run make from the main ser directory")
84
85 else
86 # called by the main Makefile
87
88 ALLDEP+=$(COREPATH)/Makefile
89
90 endif
91
92 include $(COREPATH)/Makefile.sources
93
94
95 # if config was not loaded (makefile_defs!=1) ignore
96 # the rest of makefile and try only to remake the config
97 ifeq ($(makefile_defs),1)
98
99 ifeq (,$(filter $(MOD_NAME), $(static_modules)))
100 CFLAGS:=$(MOD_CFLAGS)
101 LDFLAGS:=$(MOD_LDFLAGS)
102 endif
103
104
105 err_fail?=1
106
107 include $(COREPATH)/Makefile.dirs
108 include $(COREPATH)/Makefile.targets
109 include $(COREPATH)/Makefile.rules
110 include $(COREPATH)/Makefile.shared
111
112 # default: if not overwritten by the main Makefile, install in modules
113 mods_dst=$(modules_prefix)/$(modules_dir)/modules
114
115 $(mods_dst):
116                 mkdir -p $(mods_dst)
117
118 LIBS:=$(filter-out -ldl -lresolv, $(LIBS))
119
120
121 .PHONY: install
122 .PHONY: install-libs
123 .PHONY: install-utils
124 .PHONY: install-scripts
125 .PHONY: install-cfgs
126 install: $(NAME) $(mods_dst) install-libs install-utils install-scripts \
127                 install-cfg install-share
128         $(INSTALL_TOUCH) $(mods_dst)/$(NAME)
129         $(INSTALL_MODULES)  $(NAME)  $(mods_dst)
130
131 ifneq (,$(SER_LIBS))
132 install-libs:
133         @for lib in $(dir $(SER_LIBS)) ; do \
134                 $(call try_err, $(MAKE) -C "$${lib}" install-if-newer ) ;\
135         done; true
136
137 else
138 install-libs:
139
140 endif # $(SER_LIBS)
141
142 .PHONY: utils
143 .PHONY: clean-utils
144 .PHONY: proper-utils
145 .PHONY: distclean-utils
146 .PHONY: realclean-utils
147 .PHONY: maintainer-clean-utils
148 ifneq (,$(MOD_INSTALL_UTILS))
149 install-utils:
150         @for ut in $(MOD_INSTALL_UTILS) ; do \
151                 $(call try_err, $(MAKE) -C "$${ut}" install-if-newer ) ;\
152         done; true
153
154 utils:
155         @for r in $(MOD_INSTALL_UTILS) ; do \
156                 $(call try_err, $(MAKE) -C "$$r" ) ;\
157         done; true
158
159 clean-utils:
160         @for r in $(MOD_INSTALL_UTILS) ; do \
161                 if [ -d "$$r" ]; then \
162                          $(MAKE) -C "$$r" clean ; \
163                 fi ; \
164         done
165
166 proper-utils realclean-utils distclean-utils maintainer-clean-utils: \
167  clean_target=$(patsubst %-utils,%,$@)
168 proper-utils realclean-utils distclean-utils maintainer-clean-utils:
169         @for r in $(MOD_INSTALL_UTILS) ; do \
170                 if [ -d "$$r" ]; then \
171                          $(MAKE) -C "$$r" $(clean_target); \
172                 fi ; \
173         done
174
175 else
176 # ! MOD_INSTALL_UTILS
177 install-utils:
178 utils:
179 clean-utils:
180 proper-utils realclean-utils distclean-utils maintainer-clean-utils:
181
182 endif # $(MOD_INSTALL_UTILS)
183
184 ifneq (,$(MOD_INSTALL_SCRIPTS))
185 install-scripts: $(bin_prefix)/$(bin_dir)
186         @for r in $(MOD_INSTALL_SCRIPTS) ; do \
187                 if [ -n "$$r" ]; then \
188                         if [ -f "$$r" ]; then \
189                                 $(call try_err, $(INSTALL_TOUCH) \
190                                         $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
191                                 $(call try_err,\
192                                         $(INSTALL_SCRIPT)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
193                         else \
194                                 echo "ERROR: $$r not found" ; \
195                                 if [ ${err_fail} = 1 ] ; then \
196                                         exit 1; \
197                                 fi ; \
198                         fi ; \
199                 fi ; \
200         done; true
201
202 else
203 install-scripts:
204
205 endif # $(MOD_INSTALL_SCRIPTS)
206
207 ifneq (,$(MOD_INSTALL_CFGS))
208 install-cfg: $(cfg_prefix)/$(cfg_dir)
209         @for r in $(MOD_INSTALL_CFGS) ; do \
210                 if [ -n "$$r" ]; then \
211                         if [ -f "$$r" ]; then \
212                                 $(call try_err, $(INSTALL_TOUCH) \
213                                         $(cfg_prefix)/$(cfg_dir)/`basename "$$r"` ); \
214                                 $(call try_err,\
215                                         $(INSTALL_CFG)  "$$r"  $(cfg_prefix)/$(cfg_dir) ); \
216                         else \
217                                 echo "ERROR: $$r not found" ; \
218                                 if [ ${err_fail} = 1 ] ; then \
219                                         exit 1; \
220                                 fi ; \
221                         fi ; \
222                 fi ; \
223         done; true
224
225 else
226 install-cfg:
227
228 endif # $(MOD_INSTALL_CFGS)
229
230 ifneq (,$(MOD_INSTALL_SHARE))
231 install-share: $(share_prefix)/$(share_dir)
232         @for r in $(MOD_INSTALL_SHARE) ; do \
233                 if [ -n "$$r" ]; then \
234                         if [ -f "$$r" ]; then \
235                                 $(call try_err, $(INSTALL_TOUCH) \
236                                         $(share_prefix)/$(share_dir)/`basename "$$r"` ); \
237                                 $(call try_err,\
238                                         $(INSTALL_SHARE)  "$$r"  $(share_prefix)/$(share_dir) ); \
239                         else \
240                                 echo "ERROR: $$r not found" ; \
241                                 if [ ${err_fail} = 1 ] ; then \
242                                         exit 1; \
243                                 fi ; \
244                         fi ; \
245                 fi ; \
246         done; true
247
248 else
249 install-share:
250
251 endif # $(MOD_INSTALL_SHARE)
252
253
254 $(bin_prefix)/$(bin_dir):
255         mkdir -p $@
256
257 $(cfg_prefix)/$(cfg_dir):
258         mkdir -p $@
259
260 $(share_prefix)/$(share_dir):
261         mkdir -p $@
262
263 # README build rules
264 ifneq (,$(wildcard doc/Makefile))
265 #doc/Makefile present => we can generate README
266
267 README: doc/*.xml
268         $(MAKE) -C doc $(MOD_NAME).txt
269         mv doc/$(MOD_NAME).txt $@
270
271 else
272 # do nothing
273
274 README:
275 endif
276
277 #man page build rules
278 ifneq (,$(wildcard $(MOD_NAME).xml))
279
280 $(MOD_NAME).7: $(MOD_NAME).xml
281         docbook2x-man -s ../../doc/stylesheets/serdoc2man.xsl $<
282
283 man: $(MOD_NAME).7
284
285 else
286
287 man:
288
289 endif
290
291 endif # ifeq($(makefile_defs),1)
292
293 include $(COREPATH)/Makefile.cfg