Sun, 27 Jan 2013 20:22:45 +0100
Update to new version, improve socket error reporting, and correct SCTP bug.
1 ##
2 ## opensips.spec -- OpenPKG RPM Package Specification
3 ## Copyright (c) 2000-2008 OpenPKG Foundation e.V. <http://openpkg.net/>
4 ##
5 ## Permission to use, copy, modify, and distribute this software for
6 ## any purpose with or without fee is hereby granted, provided that
7 ## the above copyright notice and this permission notice appear in all
8 ## copies.
9 ##
10 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
11 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
13 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
14 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
15 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
16 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
17 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
18 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
20 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
21 ## SUCH DAMAGE.
22 ##
24 # package options
25 %define V_rtpproxy 1.2.1
27 # package information
28 Name: opensips
29 Summary: Open SIP Router
30 URL: http://www.opensips.org/
31 Vendor: Voice System SRL
32 Packager: OpenPKG Foundation e.V.
33 Distribution: OpenPKG Community
34 Class: PLUS
35 Group: VoIP
36 License: GPL
37 Version: 1.8.2
38 Release: 20120800
40 # package options
41 %option with_cons yes
42 %option with_fsl yes
43 %option with_ssl yes
44 %option with_sctp no
45 %option with_json no
46 %option with_croute no
47 %option with_ldap no
48 %option with_memcached no
49 %option with_radius no
50 %option with_snmp no
51 %option with_bdb no
52 %option with_mysql no
53 %option with_osp no
54 %option with_pgsql no
55 %option with_odbc no
56 %option with_geoip no
57 %option with_dbgmem no
59 # list of sources
60 Source0: http://www.opensips.org/pub/opensips/%{version}/src/opensips-%{version}_src.tar.gz
61 Source1: http://www.b2bua.org/chrome/site/rtpproxy-%{V_rtpproxy}.tar.gz
62 Source2: rc.opensips
63 Source3: fsl.opensips
64 Source4: opensips.cfg
65 Patch0: opensips.patch
66 Patch1: opensips.patch.ctlrc
67 Patch2: opensips.patch.dict
68 Patch3: opensips.patch.uac
69 Patch4: opensips.patch.reg
70 Patch5: opensips.patch.rtpproxy
72 # build information
73 BuildPreReq: OpenPKG, openpkg >= 20100101, make, gcc, flex, bison, sed
74 PreReq: OpenPKG, openpkg >= 20100101, bash
75 BuildPreReq: libxml, expat, curl, ncurses, pkgconfig
76 PreReq: libxml, expat, curl, ncurses
77 %if "%{with_cons}" == "yes"
78 PreReq: perl-dbi, perl-term
79 %endif
80 %if "%{with_fsl}" == "yes"
81 BuildPreReq: fsl
82 PreReq: fsl
83 %endif
84 %if "%{with_ssl}" == "yes"
85 BuildPreReq: openssl
86 PreReq: openssl
87 %endif
88 %if "%{with_croute}" == "yes"
89 BuildPreReq: confuse
90 PreReq: confuse
91 %endif
92 %if "%{with_json}" == "yes"
93 BuildPreReq: json
94 PreReq: json
95 %endif
96 %if "%{with_ldap}" == "yes"
97 BuildPreReq: openldap
98 PreReq: openldap
99 %endif
100 %if "%{with_memcached}" == "yes"
101 BuildPreReq: memcached
102 PreReq: memcached
103 %endif
104 %if "%{with_osp}" == "yes"
105 BuildPreReq: osptoolkit
106 PreReq: osptoolkit
107 %endif
108 %if "%{with_radius}" == "yes"
109 BuildPreReq: radiusclient
110 PreReq: radiusclient
111 %endif
112 %if "%{with_snmp}" == "yes"
113 BuildPreReq: snmp
114 PreReq: snmp
115 %endif
116 %if "%{with_bdb}" == "yes"
117 BuildPreReq: db
118 PreReq: db
119 %endif
120 %if "%{with_mysql}" == "yes"
121 BuildPreReq: mysql
122 PreReq: mysql, perl-dbi::with_mysql
123 %endif
124 %if "%{with_pgsql}" == "yes"
125 BuildPreReq: postgresql
126 PreReq: postgresql, perl-dbi::with_pgsql
127 %endif
128 %if "%{with_odbc}" == "yes"
129 BuildPreReq: unixodbc
130 PreReq: unixodbc, perl-dbi::with_odbc
131 %endif
132 %if "%{with_geoip}" == "yes"
133 BuildPreReq: geoip
134 PreReq: geoip
135 %endif
137 %description
138 OpenSIPS is (beside Kamailio) a successor to OpenSER, which in
139 turn was spawned from FhG FOKUS's SIP Express Router (SER). It
140 provides SIP (RFC3621) registrar, proxy and routing functionality.
141 A C shell like scripting language provides for control over the
142 server's behaviour. It's modular architecture allows for fine
143 grained loading of required functionality.
145 The third party Sippy RTPproxy from http://www.rtpproxy.org/
146 is included to make communication between SIP user agents
147 behind NATs (Network Address Translators) possible.
149 OpenSIPS can be used as a: OpenSIPS fits in scenarios:
151 Registrar server SIP trunking
152 Router, proxy SIP load balancing
153 Redirect server SIP front end termination
154 Presence agent Residential providers
155 Back to back user agent white label solutions
156 Instant messaging server Enterprise services
157 SIP to SMS gateway LCR for multi gateways
158 SIP to XMPP gateway
159 Load balancer or dispatcher
160 Front end for asterisk
161 NAT traversal unit
162 Application server
164 %track
165 prog opensips = {
166 version = %{version}
167 url = http://www.opensips.org/pub/opensips/
168 regex = (\d+\.\d+\.\d+)/
169 url = http://www.opensips.org/pub/opensips/__NEWVER__/src/
170 regex = opensips-(__VER__)_src\.tar\.gz
171 }
172 prog opensips:rtpproxy = {
173 version = %{V_rtpproxy}
174 url = http://www.rtpproxy.org/
175 regex = rtpproxy-(\d+(?:\.\d+)+)\.tar\.gz
176 }
178 %prep
179 %setup -q -n opensips-%{version}-tls
180 %setup -q -n opensips-%{version}-tls -T -D -a 1
181 %patch -p0
182 %patch -p0 -P 1
183 %patch -p0 -P 2
184 %patch -p0 -P 3
185 %patch -p0 -P 4
186 ( cd rtpproxy-%{V_rtpproxy}
187 %patch -p0 -P 5
188 ) || exit $?
189 %{l_shtool} subst %{l_value -s -a} \
190 scripts/opensipsctlrc \
191 scripts/osipsconsolerc
192 %{l_shtool} subst \
193 -e 's;^#! */bin/sh;#! %{l_prefix}/bin/bash;' \
194 scripts/opensipsctl
195 %{l_shtool} subst \
196 -e 's;^#! */bin/bash;#! %{l_prefix}/bin/bash;' \
197 modules/seas/doc/xml2sgml.sh \
198 scripts/opensipsdbctl \
199 test/*.sh
200 %{l_shtool} subst \
201 %if "%{with_dbgmem}" == "yes"
202 -e 's;\(-DF_MALLOC\);#\1;' \
203 -e 's;#\(-DDBG_QM_MALLOC\);\1;' \
204 %endif
205 -e 's;\(#define PKG_MEM_SIZE\) 2;\1 4;' \
206 config.h
207 %{l_shtool} subst \
208 %if "%{with_fsl}" == "yes"
209 -e 's;@fslldflags@;-L$(prefix)/lib;g' \
210 -e 's;@fsllibs@;-lfsl;g' \
211 %else
212 -e 's;@fslldflags@;;g' \
213 -e 's;@fsllibs@;;g' \
214 %endif
215 -e 's;^\(DEFS+= -I\)\$(LOCALBASE).*;\1$(prefix)/include;' \
216 -e 's;^\(DEFS+= -L\)\$(LOCALBASE).*;\1$(prefix)/lib -lssl -lcrypto;' \
217 -e 's;^SVNVERSION *=.*;;g' \
218 -e 's;^DBHTML2TXT *=.*;;g' \
219 -e 's;^DBXML2PDF *=.*;;g' \
220 -e 's;lib64;lib;' \
221 Makefile.defs
222 %{l_shtool} subst \
223 -e 's;\(radiusclient\)-ng;\1;g' \
224 modules/aaa_radius/aaa_radius.c \
225 modules/aaa_radius/rad.c \
226 Makefile.defs
227 %{l_shtool} subst \
228 -e 's;\(\$(data-dir)\)/\(dbtext\)/opensips;\1/\2;g' \
229 -e 's;\(\$(data-dir)\)/\(db_berkeley\)/opensips;\1/\2;g' \
230 -e 's;\(/usr/local/etc/opensips\);\1/*;g' \
231 -e 's;\(s#/usr/local/sbin\)#;\1/*#;g' \
232 -e 's;\(s#/usr/share/doc/$(NAME)/#$(doc-target)\)#;\1/#;g' \
233 -e 's;\(\$(MAKE).*\) \(install_module_custom\);\1 makefile_defs=0 \2;' \
234 -e 's#\(cd menuconfig;\)\$(MAKE) proper;#\1 CC="%{l_cc}" CPPFLAGS="%{l_cppflags ncurses}" LDFLAGS="%{l_ldflags}" LIBS="-lncurses" #' \
235 Makefile
236 %{l_shtool} subst \
237 -e 's;^\(LIBS=\).*;\1-L`%{l_prefix}/bin/pkg-config --libs db`;' \
238 utils/db_berkeley/Makefile
239 %{l_shtool} subst \
240 -e 's;/usr/share/doc/opensips/AUTHORS;%{l_prefix}/share/opensips/doc/AUTHORS;' \
241 scripts/opensipsctl.8
242 %{l_shtool} subst \
243 -e 's;\(ETCDIR=".*\)/"$;\1";' \
244 -e 's;\(ETCDIR="\)/usr/local/\(etc/opensips"\);\1%{l_prefix}/\2;' \
245 -e 's;\. /etc/opensips/opensipsctlrc;true;' \
246 -e 's;\. ~/.opensipsctlrc;true;' \
247 -e 's;/usr/local\(/lib/opensips/opensipsctl\);%{l_prefix}\1;' \
248 -e 's;/usr/local/\(etc/opensips/opensipsctlrc\);%{l_prefix}/\1;' \
249 -e 's;PATH=\$PATH:/usr/local/sbin;PATH=%{l_prefix}/sbin:$PATH;' \
250 scripts/opensipsdbctl \
251 scripts/opensipsctl
252 %{l_shtool} subst \
253 -e 's;/var/run/\(opensips.pid\);%{l_prefix}/var/opensips/\1;g' \
254 -e 's;\(my \$fifo_reply_path\) = "/tmp/";\1 = "%{l_prefix}/var/opensips/";' \
255 -e 's;\(my \$HISTORY_FILE\) = "/tmp/osipsconsole_history";\1 = "%{l_prefix}/var/opensips/osipsconsole_history";' \
256 scripts/opensipsctl \
257 scripts/osipsconsole
258 %{l_shtool} subst \
259 -e 's;/usr/local;;g' \
260 -e 's;\(/etc/opensips/\)\.\(opensipsctlrc\);%{l_prefix}\1\2;g' \
261 scripts/opensipsctl.8
262 %{l_shtool} subst \
263 -e 's;/var/run/\(opensips.pid\);%{l_prefix}/var/opensips/\1;' \
264 scripts/opensipsctl.base
265 %{l_shtool} subst \
266 -e 's;\(path=\)\$CHROOT_DIR/tmp/\(\$name\);\1${OSER_FIRET}/\2;g' \
267 scripts/opensipsctl.fifo
268 %{l_shtool} subst \
269 -e 's;/usr/local/share/opensips/dbtext/opensips;%{l_prefix}/var/opensips/db;' \
270 scripts/opensipsctl.dbtext
271 %{l_shtool} subst \
272 -e 's;\(DB_PATH="\)[^"][^"]*;%{l_prefix}/var/opensips/db_berkeley;' \
273 scripts/opensipsctl.db_berkeley
274 %{l_shtool} subst \
275 -e 's;PATH=\$PATH:/usr/local/sbin;PATH=%{l_prefix}/sbin:$PATH;' \
276 scripts/opensipsctl \
277 scripts/opensipsdbctl.base
278 %{l_shtool} subst \
279 -e 's;/usr/local/etc/opensips/dbtext;%{l_prefix}/var/opensips/db;' \
280 -e 's;\(\$DATA_DIR/dbtext\)/opensips;\1;g' \
281 scripts/opensipsdbctl.dbtext
282 %{l_shtool} subst \
283 -e 's;\(DATA_DIR="\)[^"][^"]*;\1%{l_prefix}/share/opensips;' \
284 scripts/opensipsdbctl.dbtext \
285 scripts/opensipsdbctl.oracle
286 %{l_shtool} subst \
287 -e 's;/usr/local/etc/opensips/db_berkeley;%{l_prefix}/var/opensips/db_berkeley;' \
288 -e 's;/usr/local/BerkeleyDB.[^/][^/]*/bin;%{l_prefix}/bin;' \
289 scripts/opensipsdbctl.db_berkeley
290 %{l_shtool} subst \
291 -e 's;/usr/local/\(share/opensips\);%{l_prefix}/\1;' \
292 scripts/opensipsdbctl.db_berkeley \
293 scripts/opensipsdbctl.mysql \
294 scripts/opensipsdbctl.pgsql
295 %{l_shtool} subst \
296 -e 's;\(script_flags(int\));\1,null);' \
297 scripts/dbtext/opensips/dialog
298 %{l_shtool} subst \
299 -e 's;body(string);body(blob);' \
300 -e 's;sender(string);sender(string,null);' \
301 scripts/dbtext/opensips/presentity
302 %{l_shtool} subst \
303 -e 's;\(expires(int\));\1,null);' \
304 -e 's;\(desired_expires(int\));\1,null);' \
305 -e 's;\(contact(string\));\1,null);' \
306 -e 's;\(remote_contact(string\));\1,null);' \
307 -e 's;\(version(int\));\1,null);' \
308 -e 's;\(extra_headers(string\));\1,null);' \
309 scripts/dbtext/opensips/pua
310 %{l_shtool} subst \
311 -e 's;\(reason(string\));\1,null);' \
312 scripts/dbtext/opensips/active_watchers \
313 scripts/dbtext/opensips/rls_watchers
314 %{l_shtool} subst \
315 -e 's;#! */usr/bin/python;#! %{l_prefix}/bin/python;' \
316 scripts/dbtextdb/*.py
317 %{l_shtool} subst \
318 -e 's;#! */usr/bin/perl;#! %{l_prefix}/bin/perl;' \
319 -e 's;^\(my \$PATH_BIN =\) "./";\1 "%{l_prefix}/bin/";' \
320 -e 's;^\(my \$PATH_CTLRC =\) "./scripts/";\1 "%{l_prefix}/etc/opensips/";' \
321 -e 's;^\(my \$PATH_ETC =\) "/usr/local/etc";\1 "%{l_prefix}/etc";' \
322 -e 's;^\(my \$PATH_LIBS =\) "/usr/local/lib";\1 "%{l_prefix}/lib";' \
323 -e 's;^\(my \$PATH_SHARE =\) "/usr/local/share";\1 "%{l_prefix}/share";' \
324 -e 's;^\(my $path = \)"/tmp/";\1"%{l_prefix}/var/opensips/";' \
325 scripts/osipsconsole
326 %{l_shtool} subst \
327 -e 's;if ( -x "/usr/bin/";if ( -x "%{l_prefix}/bin";' \
328 -e 's;if \[ -x "/usr/bin/\$1" \];if [ -x "%{l_prefix}/bin/$1" ];' \
329 -e 's;\$TOOLPATH = "/usr/bin/";$TOOLPATH = "%{l_prefix}/bin/";' \
330 -e 's;TOOLPATH="/usr/bin/\$1";TOOLPATH="%{l_prefix}/bin/$1";' \
331 -e 's;if ( -x "/bin/";if ( -x "/usr/bin/";' \
332 -e 's;if \[ -x "/bin/\$1" \];if [ -x "/usr/bin/$1" ];' \
333 -e 's;\$TOOLPATH = "/bin/";$TOOLPATH = "/usr/bin/";' \
334 -e 's;TOOLPATH="/bin/\$1";TOOLPATH="/usr/bin/$1";' \
335 -e 's;if ( -x "/usr/local/bin/\$1";if ( -x "/bin/$1";' \
336 -e 's;if \[ -x "/usr/local/bin/\$1" \];if [ -x "/bin/$1" ];' \
337 -e 's;\$TOOLPATH = "/usr/local/bin/;$TOOLPATH = "/bin/;' \
338 -e 's;TOOLPATH="/usr/local/bin/\$1";TOOLPATH="/bin/$1";' \
339 scripts/osipsconsole \
340 scripts/opensipsctl.base
341 %{l_shtool} subst \
342 -e 's;^\(DEFS+=\).*\\$;\1 \\;' \
343 -e "s;\-I[^ \t][^ \t]*;`%{l_prefix}/bin/pkg-config --cflags-only-I libcurl libxml-2.0`;g" \
344 -e "s;^\(LIBS=\).*;\1`%{l_prefix}/bin/pkg-config --libs libcurl libxml-2.0`;" \
345 modules/xcap_client/Makefile
346 %{l_shtool} subst \
347 -e 's;^\(DEFS+=\).*\\$;\1 \\;' \
348 -e "s;\-I[^ \t][^ \t]*;`%{l_prefix}/bin/pkg-config --cflags-only-I libxml-2.0`;g" \
349 -e "s;^\(LIBS=\).*;\1`%{l_prefix}/bin/pkg-config --libs libxml-2.0`;" \
350 modules/cpl-c/Makefile \
351 modules/presence/Makefile \
352 modules/presence_dialoginfo/Makefile \
353 modules/presence_xml/Makefile \
354 modules/pua/Makefile \
355 modules/pua_bla/Makefile \
356 modules/pua_dialoginfo/Makefile \
357 modules/pua_mi/Makefile \
358 modules/pua_usrloc/Makefile \
359 modules/pua_xmpp/Makefile \
360 modules/b2b_logic/Makefile \
361 modules/rls/Makefile
362 %{l_shtool} subst \
363 -e 's;^\(DEFS+= *\);\1-D__EXTENSIONS__ ;' \
364 modules/presence_xml/Makefile
365 %{l_shtool} subst \
366 -e 's;^\(DEFS+=\).*;\1`%{l_prefix}/bin/pkg-config --cflags-only-I libconfuse`;' \
367 -e 's;^\(LIBS=\).*;\1`%{l_prefix}/bin/pkg-config --libs libconfuse`;' \
368 modules/carrierroute/Makefile
369 %{l_shtool} subst \
370 -e 's;\(LIBS = .*-L\$(shell pg_config --libdir) -lpq\);\1 $(shell pg_config --libs);' \
371 modules/db_postgres/Makefile
372 %{l_shtool} subst \
373 -e 's;-I\$(LOCALBASE)/BerkeleyDB[0-9\.\-]*/include[\t ]*;;' \
374 -e 's;-L\$(LOCALBASE)/BerkeleyDB[0-9\.\-]*/lib[\t ]*;;' \
375 modules/db_berkeley/Makefile \
376 utils/db_berkeley/Makefile
377 %{l_shtool} subst \
378 -e 's;\(\$(cfg-prefix)\)\$(shell net-snmp-config --prefix);\1;' \
379 modules/snmpstats/Makefile
380 %{l_shtool} subst \
381 -e 's;LM_WARN(\(\"uac does not spread across\);LM_NOTICE(\1;' \
382 modules/tm/uac.c
383 %{l_shtool} subst \
384 -e 's;u_int\([0-9]*\)_t;uint\1_t;g' \
385 modules/db_berkeley/db_berkeley.c \
386 modules/db_berkeley/bdb_lib.h \
387 modules/sipcapture/sipcapture.h \
388 modules/lua/sipwatch.h \
389 modules/lua/crc32.h
390 %{l_shtool} subst \
391 -e 's;\(LM_ERR("\)\(failed to retrieve SO_ERROR (%d) %s\\n",\);\1addr (%s) port (%d), \2 inet_ntoa(((struct sockaddr_in *)servaddr)->sin_addr), ntohs(((struct sockaddr_in *)servaddr)->sin_port),;' \
392 tcp_main.c
393 %{l_shtool} subst \
394 -e 's;\(sock_info->socket = socket(AF2PF(addr->s.sa_family), SOCK_SEQPACKET,\) 0;\1 IPPROTO_SCTP;' \
395 sctp_server.c
396 %{l_shtool} subst \
397 -e 's;\(#define MAX_SSL_RETRIES\) 32;\1 1024;' \
398 tls/tls_server.c
399 %{l_shtool} subst \
400 -e 's;LM_ERR(\("unable to load\);LM_WARN(\1;g' \
401 tls/tls_init.c
402 %{l_shtool} subst \
403 -e 's;^\(default_bits[ \t]*=[ \t]*\)2048;\14096;' \
404 etc/tls/ca.conf
405 %{l_shtool} subst \
406 -e '1,2d' \
407 etc/tls/README
408 %{l_shtool} subst \
409 -e 's;\(radiusclient\)-ng;\1;g' \
410 -e 's;/usr/local\(/etc/radiusclient/radiusclient.conf\);%{l_prefix}\1;' \
411 radius.h
413 %build
414 # select modules
415 modslist='b2b_entities b2b_logic cpl-c db_http dialplan identity jabber perl perlvdb presence presence_dialoginfo presence_mwi presence_xml pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp regex rls tlsops xcap_client xmpp'
416 %if "%{with_croute}" == "yes"
417 modslist="$modslist carrierroute"
418 %endif
419 %if "%{with_json}" == "yes"
420 modslist="$modslist json"
421 %endif
422 %if "%{with_ldap}" == "yes"
423 modslist="$modslist h350 ldap"
424 %endif
425 %if "%{with_memcached}" == "yes"
426 modslist="$modslist memcached"
427 %endif
428 %if "%{with_osp}" == "yes"
429 modslist="$modslist osp"
430 %endif
431 %if "%{with_radius}" == "yes"
432 modslist="$modslist aaa_radius auth_aaa group uri"
433 %endif
434 %if "%{with_snmp}" == "yes"
435 modslist="$modslist snmpstats"
436 %endif
437 %if "%{with_bdb}" == "yes"
438 modslist="$modslist db_berkeley"
439 %endif
440 %if "%{with_mysql}" == "yes"
441 modslist="$modslist db_mysql"
442 %endif
443 %if "%{with_pgsql}" == "yes"
444 modslist="$modslist db_postgres"
445 %endif
446 %if "%{with_odbc}" == "yes"
447 modslist="$modslist db_unixodbc"
448 %endif
449 %if "%{with_geoip}" == "yes"
450 modslist="$modslist mmgeoip"
451 %endif
453 # build dependencies
454 %{l_make} %{l_mflags} \
455 CC="%{l_cc}" \
456 %if "%{with_sctp}" == "yes"
457 SCTP=1 \
458 %endif
459 %if "%{with_ssl}" == "yes"
460 TLS=1 \
461 %endif
462 prefix=%{l_prefix} \
463 dep >/dev/null 2>&1 || true
465 # build program
466 %{l_make} %{l_mflags -O} \
467 CC="%{l_cc}" \
468 %if "%{with_sctp}" == "yes"
469 SCTP=1 \
470 %endif
471 %if "%{with_ssl}" == "yes"
472 TLS=1 \
473 %endif
474 prefix=%{l_prefix} \
475 opensips
477 # build utilities
478 %{l_make} %{l_mflags -O} \
479 CC="%{l_cc}" \
480 %if "%{with_sctp}" == "yes"
481 SCTP=1 \
482 %endif
483 %if "%{with_ssl}" == "yes"
484 TLS=1 \
485 %endif
486 prefix=%{l_prefix} \
487 modules="$modslist" \
488 utils
490 # build modules
491 %{l_make} %{l_mflags -O} \
492 CC="%{l_cc}" \
493 %if "%{with_sctp}" == "yes"
494 SCTP=1 \
495 %endif
496 %if "%{with_ssl}" == "yes"
497 TLS=1 \
498 %endif
499 include_modules="$modslist" \
500 skip_modules="" \
501 prefix=%{l_prefix} \
502 modules
504 # build menuconfig
505 %{l_make} %{l_mflags} \
506 prefix=%{l_prefix} \
507 cfg-prefix=$RPM_BUILD_ROOT%{l_prefix}/etc \
508 data-prefix=$RPM_BUILD_ROOT%{l_prefix}/share \
509 opensipsmc
511 # build rtpproxy extension
512 ( cd rtpproxy-%{V_rtpproxy}
513 export CC="%{l_cc}"
514 export CFLAGS="%{l_cflags -O}"
515 export CPPFLAGS=""
516 case "%{l_platform -t}" in
517 *-sunos5.11 ) CPPFLAGS="$CPPFLAGS -DGE_SOL11" ;;
518 esac
519 export LIBS=""
520 case "%{l_platform -t}" in
521 *-sunos* ) LIBS="$LIBS -lsocket -lnsl -lrt" ;;
522 esac
523 export GREP="grep"
524 ./configure
525 %{l_make} %{l_mflags -O}
526 ) || exit $?
528 %install
529 # select modules
530 modslist='b2b_entities b2b_logic cpl-c db_http identity jabber perl perlvdb presence presence_dialoginfo presence_mwi presence_xml pua pua_bla pua_dialoginfo pua_mi pua_usrloc pua_xmpp regex rls tlsops xcap_client xmpp'
531 %if "%{with_croute}" == "yes"
532 modslist="$modslist carrierroute"
533 %endif
534 %if "%{with_json}" == "yes"
535 modslist="$modslist json"
536 %endif
537 %if "%{with_ldap}" == "yes"
538 modslist="$modslist h350 ldap"
539 %endif
540 %if "%{with_memcached}" == "yes"
541 modslist="$modslist memcached"
542 %endif
543 %if "%{with_osp}" == "yes"
544 modslist="$modslist osp"
545 %endif
546 %if "%{with_radius}" == "yes"
547 modslist="$modslist aaa_radius auth_aaa group uri"
548 %endif
549 %if "%{with_snmp}" == "yes"
550 modslist="$modslist snmpstats"
551 %endif
552 %if "%{with_bdb}" == "yes"
553 modslist="$modslist db_berkeley"
554 %endif
555 %if "%{with_mysql}" == "yes"
556 modslist="$modslist db_mysql"
557 %endif
558 %if "%{with_pgsql}" == "yes"
559 modslist="$modslist db_postgres"
560 %endif
561 %if "%{with_odbc}" == "yes"
562 modslist="$modslist db_unixodbc"
563 %endif
564 %if "%{with_geoip}" == "yes"
565 modslist="$modslist mmgeoip"
566 %endif
568 # install program, utils, and modules
569 %{l_make} %{l_mflags} \
570 INSTALL="%{l_shtool} install%{l_nil} -c" \
571 basedir=$RPM_BUILD_ROOT \
572 prefix=%{l_prefix} \
573 doc-dir=share/opensips/doc \
574 man-dir=man \
575 data-dir=share/opensips \
576 include_modules="$modslist" \
577 skip_modules="" \
578 install
580 # install rtpproxy software
581 %{l_shtool} install -c -s -m 755 \
582 rtpproxy-%{V_rtpproxy}/rtpproxy \
583 $RPM_BUILD_ROOT%{l_prefix}/sbin/rtpproxy
585 # strip down installation
586 strip $RPM_BUILD_ROOT%{l_prefix}/sbin/* >/dev/null 2>&1 || true
588 # create installation hierarchy
589 %{l_shtool} mkdir -f -p -m 700 \
590 $RPM_BUILD_ROOT%{l_prefix}/var/opensips/acc \
591 $RPM_BUILD_ROOT%{l_prefix}/var/opensips/tmp
593 # install default configuration
594 %{l_shtool} mkdir -f -p -m 755 \
595 $RPM_BUILD_ROOT%{l_prefix}/etc/opensips
596 %{l_shtool} install -c -m 644 %{l_value -s -a} \
597 %{SOURCE opensips.cfg} \
598 $RPM_BUILD_ROOT%{l_prefix}/etc/opensips/
600 # conditionally remove osipsconsole resources
601 %if "%{with_cons}" != "yes"
602 rm $RPM_BUILD_ROOT%{l_prefix}/sbin/osipsconsole
603 rm $RPM_BUILD_ROOT%{l_prefix}/etc/opensips/osipsconsolerc
604 %endif
606 # install OSSP fsl configuration
607 %{l_shtool} mkdir -f -p -m 755 \
608 $RPM_BUILD_ROOT%{l_prefix}/etc/fsl
609 %{l_shtool} install -c -m 644 %{l_value -s -a} \
610 %{SOURCE fsl.opensips} \
611 $RPM_BUILD_ROOT%{l_prefix}/etc/fsl/
613 # install runcommand script
614 %{l_shtool} mkdir -f -p -m 755 \
615 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
616 %{l_shtool} install -c -m 755 %{l_value -s -a} \
617 %{SOURCE rc.opensips} \
618 $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
620 # determine installation files
621 %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
622 %{l_files_std} \
623 '%not %dir %{l_prefix}/etc/fsl' \
624 '%config %{l_prefix}/etc/fsl/*' \
625 '%config %{l_prefix}/etc/opensips/*' \
626 '%doc %{l_prefix}/share/opensips/doc/*' \
627 '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/opensips'
629 %files -f files
631 %clean
633 %post
634 # on install, setup database (osipsconsole db create /pfx/var/opensips/db)
635 if [ ! -d $RPM_INSTALL_PREFIX/var/opensips/db ]; then
636 %{l_shtool} mkdir -f -p -m 700 -o %{l_rusr} -g %{l_rgrp} \
637 $RPM_INSTALL_PREFIX/var/opensips/db
638 rm -f $RPM_INSTALL_PREFIX/share/opensips/dbtext/*.orig
639 %{l_shtool} install -c -m 600 -o %{l_rusr} -g %{l_rgrp} \
640 $RPM_INSTALL_PREFIX/share/opensips/dbtext/* \
641 $RPM_INSTALL_PREFIX/var/opensips/db/
642 fi
644 # after upgrade, restart service
645 [ $1 -eq 2 ] || exit 0
646 eval `%{l_rc} opensips status 2>/dev/null`
647 [ ".$opensips_active" = .yes ] && %{l_rc} opensips restart
648 exit 0
650 %preun
651 # before erase, stop service and remove log files
652 [ $1 -eq 0 ] || exit 0
653 %{l_rc} opensips stop 2>/dev/null
654 rm -rf $RPM_INSTALL_PREFIX/var/opensips/db 2>/dev/null || true
655 rm -f $RPM_INSTALL_PREFIX/var/opensips/* 2>/dev/null || true
656 exit 0