f1f172b3bc0a131bf0c9ea96f80108b62eb2b4a9
[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 ifneq (,$(MOD_INSTALL_UTILS))
143 install-utils:
144         @for ut in $(MOD_INSTALL_UTILS) ; do \
145                 $(call try_err, $(MAKE) -C "$${ut}" install-if-newer ) ;\
146         done; true
147
148 else
149 install-utils:
150
151 endif # $(MOD_INSTALL_UTILS)
152
153 ifneq (,$(MOD_INSTALL_SCRIPTS))
154 install-scripts: $(bin_prefix)/$(bin_dir)
155         @for r in $(MOD_INSTALL_SCRIPTS) ; do \
156                 if [ -n "$$r" ]; then \
157                         if [ -f "$$r" ]; then \
158                                 $(call try_err, $(INSTALL_TOUCH) \
159                                         $(bin_prefix)/$(bin_dir)/`basename "$$r"` ); \
160                                 $(call try_err,\
161                                         $(INSTALL_SCRIPT)  "$$r"  $(bin_prefix)/$(bin_dir) ); \
162                         else \
163                                 echo "ERROR: $$r not found" ; \
164                                 if [ ${err_fail} = 1 ] ; then \
165                                         exit 1; \
166                                 fi ; \
167                         fi ; \
168                 fi ; \
169         done; true
170
171 else
172 install-scripts:
173
174 endif # $(MOD_INSTALL_SCRIPTS)
175
176 ifneq (,$(MOD_INSTALL_CFGS))
177 install-cfg: $(cfg_prefix)/$(cfg_dir)
178         @for r in $(MOD_INSTALL_CFGS) ; do \
179                 if [ -n "$$r" ]; then \
180                         if [ -f "$$r" ]; then \
181                                 $(call try_err, $(INSTALL_TOUCH) \
182                                         $(cfg_prefix)/$(cfg_dir)/`basename "$$r"` ); \
183                                 $(call try_err,\
184                                         $(INSTALL_CFG)  "$$r"  $(cfg_prefix)/$(cfg_dir) ); \
185                         else \
186                                 echo "ERROR: $$r not found" ; \
187                                 if [ ${err_fail} = 1 ] ; then \
188                                         exit 1; \
189                                 fi ; \
190                         fi ; \
191                 fi ; \
192         done; true
193
194 else
195 install-cfg:
196
197 endif # $(MOD_INSTALL_CFGS)
198
199 ifneq (,$(MOD_INSTALL_SHARE))
200 install-share: $(share_prefix)/$(share_dir)
201         @for r in $(MOD_INSTALL_SHARE) ; do \
202                 if [ -n "$$r" ]; then \
203                         if [ -f "$$r" ]; then \
204                                 $(call try_err, $(INSTALL_TOUCH) \
205                                         $(share_prefix)/$(share_dir)/`basename "$$r"` ); \
206                                 $(call try_err,\
207                                         $(INSTALL_SHARE)  "$$r"  $(share_prefix)/$(share_dir) ); \
208                         else \
209                                 echo "ERROR: $$r not found" ; \
210                                 if [ ${err_fail} = 1 ] ; then \
211                                         exit 1; \
212                                 fi ; \
213                         fi ; \
214                 fi ; \
215         done; true
216
217 else
218 install-share:
219
220 endif # $(MOD_INSTALL_SHARE)
221
222
223 $(bin_prefix)/$(bin_dir):
224         mkdir -p $@
225
226 $(cfg_prefix)/$(cfg_dir):
227         mkdir -p $@
228
229 $(share_prefix)/$(share_dir):
230         mkdir -p $@
231
232 # README build rules
233 ifneq (,$(wildcard doc/Makefile))
234 #doc/Makefile present => we can generate README
235
236 README: doc/*.xml
237         $(MAKE) -C doc $(MOD_NAME).txt
238         mv doc/$(MOD_NAME).txt $@
239
240 else
241 # do nothing
242
243 README:
244 endif
245
246 #man page build rules
247 ifneq (,$(wildcard $(MOD_NAME).xml))
248
249 $(MOD_NAME).7: $(MOD_NAME).xml
250         docbook2x-man -s ../../doc/stylesheets/serdoc2man.xsl $<
251
252 man: $(MOD_NAME).7
253
254 else
255
256 man:
257
258 endif
259
260 endif # ifeq($(makefile_defs),1)
261
262 include $(COREPATH)/Makefile.cfg