File opensips.spec of Package opensips

#
# spec file for package OpenSIPS v.3.4 LTS
#
# Created by jamesp@vicidial.com
#
# Copyright (c) 2023 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/

#Compat macro for new _fillupdir macro introduced in Nov 2017
%if ! %{defined _fillupdir}
  %define _fillupdir /var/adm/fillup-templates
%endif

Name:           opensips
Version:        3.4.14
Release:        0
License:        GPL-2.0
Summary:        A very fast and flexible SIP Proxy server
Url:            http://opensips.org
Group:          Productivity/Telephony/SIP/Servers
Source:         opensips-%{version}.tar.gz
Source1:        opensips.service
Source2:        sysconfig.opensips
Source3:        opensips.init.suse
#Patch0:         
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  bison
BuildRequires:  cmake
BuildRequires:  fdupes
BuildRequires:  flex
BuildRequires:  freeradius-client-devel
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  glibc
BuildRequires:  hiredis-devel
BuildRequires:  libconfuse-devel
BuildRequires:  libcurl-devel
BuildRequires:  libdb-4_8-devel
BuildRequires:  libev-devel
BuildRequires:  libexpat-devel
BuildRequires:  libGeoIP-devel
BuildRequires:  libjson-c-devel
BuildRequires:  libmaxminddb-devel
BuildRequires:  libmemcached-devel
BuildRequires:  libmicrohttpd-devel
BuildRequires:  librdkafka-devel
BuildRequires:  libtool
BuildRequires:  libuuid-devel
BuildRequires:  libxml2-devel
BuildRequires:  libxslt-tools
BuildRequires:  lksctp-tools-devel
BuildRequires:  lua51-devel
BuildRequires:  lynx
BuildRequires:  mysql-devel
BuildRequires:  ncurses-devel
BuildRequires:  net-snmp-devel
BuildRequires:  openldap2-devel
#BuildRequires:  osp-toolkit-devel
BuildRequires:  pcre-devel
BuildRequires:  pkg-config
BuildRequires:  postgresql-devel
BuildRequires:  python-devel
BuildRequires:  sqlite3-devel
BuildRequires:  unixODBC-devel
BuildRequires:  zlib-devel
BuildRequires:  libopenssl-1_1-devel

%if 0%{?sle_version} >= 150300
BuildRequires: librabbitmq-devel
%endif


Requires:       glibc
Recommends:     python3-opensips-cli
BuildRoot:      %{_tmppath}/%{name}-%{version}-build


# BuildArch:

# Excluded mainly through lib dependencies, although some are just problematic
# 
%if 0%{?sle_version} >= 150300
%define EXCLUDED_MODULES aaa_diameter auth_jwt cachedb_cassandra cachedb_couchbase cachedb_mongodb db_oracle osp sngtc
%else
%define EXCLUDED_MODULES aaa_diameter auth_jwt cachedb_cassandra cachedb_couchbase cachedb_mongodb db_oracle osp sngtc event_rabbitmq rabbitmq_consumer rabbitmq
%endif

%description
OpenSIPS is an Open Source SIP proxy/server for voice, video, IM, presence and
any other SIP extensions.

OpenSIPS is a multi-functional, multi-purpose signaling SIP server used by
carriers, telecoms or ITSPs for solutions like Class4/5 Residential Platforms,
Trunking / Wholesale, Enterprise / Virtual PBX Solutions, Session Border
Controllers, Application Servers, Front-End Load Balancers, IMS Platforms, Call
Centers, and many others - see the full Set of Features at
http://www.opensips.org/About/Features

The following modules are not included since the libraries to compile them 
aren't available as a package or the module is just problematic :
  %{EXCLUDED_MODULES}


%package        bdb
Summary:        Berkeley DB connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       db
Requires:       %{name} = %{version}

%description    bdb
The %{name}-bdb package contains Berkeley database connectivity that you
need to use digest authentication module or persistent user location
entries.


%package        cpl
Summary:        CPL interpreter engine for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    cpl
The opensips-cpl package contains a SIP CPL interpreter engine.


%package        dbtext
Summary:        DBText connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    dbtext
The %{name}-dbtext package contains dbtext database connectivity that you
need to use digest authentication module or persistent user location
entries.


%package        jabber
Summary:        SIP jabber message translation support for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       expat
Requires:       %{name} = %{version}

%description    jabber
The %{name}-jabber package contains a sip to jabber message translator.


%package        lua
Summary:        LUA interface for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    lua
The %{name}-lua package contains lua connectivity module for OpenSIPS.


%package        mysql
Summary:        MySQL connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       mysql
Requires:       %{name} = %{version}

%description    mysql
The %{name}-mysql package contains MySQL database connectivity that you
need to use digest authentication module or persistent user location
entries.

%if 0%{?sle_version} >= 150300
%package        rabbitmq
Summary:        RabbitMQ Client and Consumer modules
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    rabbitmq
The %{name}-rabbitmq package contains the rabbitmq client and Consumer
modules. The client module provide thes implementation of a RabbitMQ client
for the Event Interface. It is used to send AMQP messages to a RabbitMQ
server each time the Event Interface triggers an event subscribed for. The
consumer module can subscribe consumers to a RabbitMQ broker in order to
receive AMQP messages for specified queues. The messages will be delivered
by triggering events through the OpenSIPS Event Interface.
%endif

%package        sqlite
Summary:        SQLite connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       sqlite3
Requires:       %{name} = %{version}

%description    sqlite
The %{name}-sqlite package contains SQLite database connectivity that you
need to use digest authentication module or persistent user location
entries.


%package        odbc
Summary:        UnixODBC connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       unixODBC
Requires:       %{name} = %{version}

%description    odbc
The %{name}-pgsql package contains ODBC database connectivity that you
need to use digest authentication module or persistent user location
entries.


%package        cachedb
Summary:        CacheDB connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    cachedb
The %{name}-cachedb package will expose the same front db api, however
it will run on top of a NoSQL back-end, emulating the SQL calls to the
back-end specific queries. Thus, any OpenSIPS module that would 
regularily need a regular SQL-based database, will now be able to run
over a NoSQL back-end, allowing for a much easier distribution and
integration of the currently existing OpenSIPS modules in a distributed
environment.


%package        perl
Summary:        Perl modules for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       perl
Requires:       %{name} = %{version}

%description    perl
The %{name}-perl package contains perl modules for OpenSIPS.


%package        pgsql
Summary:        PostgreSQL connectivity for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       postgresql
Requires:       %{name} = %{version}

%description    pgsql
The %{name}-pgsql package contains PostgreSQL database connectivity that you
need to use digest authentication module or persistent user location
entries.


%package        python
Summary:        Python modules for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       python
Requires:       %{name} = %{version}

%description    python
The %{name}-python package contains python modules for OpenSIPS.


%package        radius
Summary:        RADIUS authentication, group and uri check modules for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       freeradius-client
Requires:       %{name} = %{version}

%description radius
The %{name}-radius package contains modules for radius authentication, group
 membership and uri checking.

 
%package        rest
Summary:        Rest modules for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description    rest
The %{name}-perl package provides a means of interacting with an HTTP server
by doing RESTful queries, such as GET and POST.


%package        rtpproxy
Summary:        Rtpproxy modules for OpenSIPS
Group:          Productivity/Telephony/SIP/Servers
Requires:       rtpproxy
Requires:       %{name} = %{version}

%description    rtpproxy
The %{name}-rtpproxy package contains rtpproxy modules for OpenSIPS.


%package	rtpengine
Summary:	RTPEngine modules for OpenSIPS
Group:		Productivity/Telephony/SIP/Servers
Requires:	%{name} = %{version}

%description	rtpengine
The %{name}-rtpengine packages contains RTP engine modules for OpenSIPS.


%package		http
Summary:		The pi_http modules for OpenSIPS
Group:			Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description	http
The %{name}-http package contains pi_http modules for OpenSIPS.


%package		event
Summary:		The event modules for OpenSIPS
Group:			Productivity/Telephony/SIP/Servers
Requires:       %{name} = %{version}

%description	event
The %{name}-event package contains event modules for OpenSIPS.


%prep
%setup -q -n %{name}-%{version}
#%patch -P 0 -p1

%build
export CFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export CXXFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export TLS=1
export RADIUSCLIENT=FREERADIUS

make %{?jobs:-j%jobs} all exclude_modules="%EXCLUDED_MODULES" \
                PREFIX=%{_prefix} \
                basedir=/ \
                cfg-prefix=/ \
                cfg-dir=/etc/%{name}/ \
                doc-prefix=/ \
                doc-dir=%{_docdir}/%{name}/ \
                modules-dir=%_lib/%{name}/modules/


%install
export CFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export CXXFLAGS="$RPM_OPT_FLAGS -DNDEBUG"
export TLS=1
export RADIUSCLIENT=FREERADIUS

make install exclude_modules="%EXCLUDED_MODULES" \
                PREFIX=%{_prefix} \
                basedir=%{buildroot} \
                cfg-prefix=%{buildroot} \
                cfg-dir=/etc/%{name}/ \
                doc-prefix=%{buildroot} \
                doc-dir=%{_docdir}/%{name}/ \
                modules-dir=%_lib/%{name}/modules/

# Setup init/systemd files and such
install -d -m 755 %{buildroot}%{_initddir}
install -m 0755 %{SOURCE3} ./opensips.init
install -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/opensips.service
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcopensips
install -d -m 755 %{buildroot}%{_fillupdir}
install -m 644 %{SOURCE2} %{buildroot}%{_fillupdir}


# Fix-ups since none of the make options appear to change where things are installed
mv %{buildroot}/usr/%{_sysconfdir}/%{name} %{buildroot}/%{_sysconfdir}/
mkdir -p %{buildroot}/%{_docdir}
mv %{buildroot}/%{_datarootdir}/doc/%{name} %{buildroot}/%{_docdir}/
rm %{buildroot}/%{_docdir}/%{name}/INSTALL
mkdir -p %{buildroot}/%{_datarootdir}/snmp/mibs
mv %{buildroot}/usr/%{_datarootdir}/snmp/mibs %{buildroot}/%{_datarootdir}/snmp/mibs
sed -i 's+^mpath=.*+mpath="%{_prefix}/%_lib/%{name}/modules/"+' %{buildroot}/%{_sysconfdir}/%{name}/opensips.cfg

#rpmlint
%fdupes -s %{buildroot}

%pre
%service_add_pre opensips.service

%post
%{fillup_only -n opensips}
%service_add_post opensips.service


%preun
%service_del_preun opensips.service

%postun
%service_del_postun opensips.service

%clean
%{__rm} -rf %{buildroot}

%files
%defattr(-,root,root)
%dir %{_docdir}/%{name}
%doc %{_docdir}/%{name}/*
%attr(0755,root,root) %dir %{_datarootdir}/%{name}
%attr(0755,root,root) %dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/*
%{_fillupdir}/sysconfig.opensips
%doc opensips.init
%attr(0644,root,root) %{_unitdir}/opensips.service
%attr(0755,root,root) %{_sbindir}/*
%{_datarootdir}/snmp/mibs/*
%attr(0444,root,root) %doc %{_mandir}/man5/*
%attr(0444,root,root) %doc %{_mandir}/man8/*
%dir %{_libdir}/%{name}
%dir %{_libdir}/%{name}/modules
%{_libdir}/%{name}/modules/*
%dir %{_datarootdir}/%{name}/menuconfig_templates
%{_datarootdir}/%{name}/menuconfig_templates/*

# Excluded files cause they're part of installable extensions
%exclude %{_sysconfdir}/%{name}/dictionary.opensips
%exclude %doc %{_docdir}/%{name}/README.*_radius
%exclude %doc %{_docdir}/%{name}/README.cpl_c
%exclude %doc %{_docdir}/%{name}/README.db_berkeley
%exclude %doc %{_docdir}/%{name}/README.db_mysql
%exclude %doc %{_docdir}/%{name}/README.db_sqlite
%exclude %doc %{_docdir}/%{name}/README.db_postgres
%exclude %doc %{_docdir}/%{name}/README.db_text
%exclude %doc %{_docdir}/%{name}/README.db_unixodbc
%exclude %doc %{_docdir}/%{name}/README.jabber
%exclude %doc %{_docdir}/%{name}/README.perl*
%exclude %doc %{_docdir}/%{name}/README.lua*
%exclude %doc %{_docdir}/%{name}/README.rtpproxy*
%exclude %doc %{_docdir}/%{name}/README.rtpengine*
%exclude %{_libdir}/%{name}/modules/python.so
%exclude %{_libdir}/%{name}/modules/rtpproxy.so
%exclude %{_libdir}/%{name}/modules/aaa_radius.so
%exclude %{_libdir}/%{name}/modules/cpl_c.so
%exclude %{_libdir}/%{name}/modules/db_berkeley.so
%exclude %{_libdir}/%{name}/modules/db_mysql.so
%exclude %{_libdir}/%{name}/modules/db_postgres.so
%exclude %{_libdir}/%{name}/modules/db_text.so
%exclude %{_libdir}/%{name}/modules/db_unixodbc.so
%exclude %{_libdir}/%{name}/modules/jabber.so
%exclude %{_libdir}/%{name}/modules/perl.so
%exclude %{_libdir}/%{name}/modules/lua.so
%exclude %{_libdir}/%{name}/modules/cachedb*
%exclude %{_libdir}/%{name}/modules/db_cachedb.so
%exclude %{_libdir}/%{name}/modules/sql_cacher.so
%exclude %{_libdir}/%{name}/modules/event*
%exclude %{_libdir}/%{name}/modules/pi_http.so
%exclude %{_libdir}/%{name}/modules/db_perlvdb.so
%exclude %{_libdir}/%{name}/modules/rest_client.so
%exclude %{_libdir}/%{name}/modules/rtpengine.so
%exclude %{_libdir}/%{name}/modules/db_sqlite.so
%exclude %{_datarootdir}/%{name}/mysql/
%exclude %{_datarootdir}/%{name}/dbtext/
%exclude %{_datarootdir}/%{name}/db_berkeley/
%exclude %{_datarootdir}/%{name}/postgres
%exclude %{_sbindir}/bdb_recover

%if 0%{?sle_version} >= 150300
%exclude %doc %{_docdir}/%{name}/README.rabbitmq*
%exclude %doc %{_docdir}/%{name}/README.event_rabbitmq
%exclude %doc %{_docdir}/%{name}/README.rabbitmq_consumer
%exclude %{_libdir}/%{name}/modules/rabbitmq.so
%exclude %{_libdir}/%{name}/modules/rabbitmq_consumer.so

%files rabbitmq
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rabbitmq.so
%{_libdir}/%{name}/modules/rabbitmq_consumer.so
%doc %{_docdir}/%{name}/README.event_rabbitmq
%doc %{_docdir}/%{name}/README.rabbitmq_consumer
%doc %{_docdir}/%{name}/README.rabbitmq

%endif


%files bdb
%defattr(-,root,root)
%attr(0755,root,root) %{_sbindir}/bdb_recover
%{_libdir}/%{name}/modules/db_berkeley.so
%doc %{_docdir}/%{name}/README.db_berkeley
%dir %{_datarootdir}/%{name}/db_berkeley
%{_datarootdir}/%{name}/db_berkeley/*

%files cpl
%defattr(-,root,root)
%{_libdir}/%{name}/modules/cpl_c.so
%doc %{_docdir}/%{name}/README.cpl_c

%files dbtext
%defattr(-,root,root)
%dir %{_datarootdir}/%{name}/dbtext
%{_libdir}/%{name}/modules/db_text.so
%doc %{_docdir}/%{name}/README.db_text
%{_datarootdir}/%{name}/dbtext/*

%files jabber
%defattr(-,root,root)
%{_libdir}/%{name}/modules/jabber.so
%doc %{_docdir}/%{name}/README.jabber

%files lua
%defattr(-,root,root)
%{_libdir}/%{name}/modules/lua.so
%doc %{_docdir}/%{name}/README.lua

%files mysql
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_mysql.so
%doc %{_docdir}/%{name}/README.db_mysql
%dir %{_datarootdir}/%{name}/mysql
%{_datarootdir}/%{name}/mysql/*

%files sqlite
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_sqlite.so
%doc %{_docdir}/%{name}/README.db_sqlite
%dir %{_datarootdir}/%{name}/sqlite
%{_datarootdir}/%{name}/sqlite/*

%files python
%defattr(-,root,root)
%{_libdir}/%{name}/modules/python.so

%files rtpproxy
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rtpproxy.so
%doc %{_docdir}/%{name}/README.rtpproxy

%files rtpengine
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rtpengine.so
%doc %{_docdir}/%{name}/README.rtpengine

%files cachedb
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_cachedb.so
%{_libdir}/%{name}/modules/cachedb_local.so
%{_libdir}/%{name}/modules/cachedb_memcached.so
%{_libdir}/%{name}/modules/cachedb_redis.so
%{_libdir}/%{name}/modules/cachedb_sql.so
%{_libdir}/%{name}/modules/sql_cacher.so

%files odbc
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_unixodbc.so
%doc %{_docdir}/%{name}/README.db_unixodbc

%files perl
%defattr(-,root,root)
%dir %{_libdir}/%{name}/perl
%{_libdir}/%{name}/modules/perl.so
%{_libdir}/%{name}/modules/db_perlvdb.so
%{_libdir}/%{name}/perl/*
%doc %{_docdir}/%{name}/README.perl

%files pgsql
%defattr(-,root,root)
%{_libdir}/%{name}/modules/db_postgres.so
%doc %{_docdir}/%{name}/README.db_postgres
%dir %{_datarootdir}/%{name}/postgres
%{_datarootdir}/%{name}/postgres/*

%files radius
%defattr(-,root,root)
%{_libdir}/%{name}/modules/*_radius.so
%doc %{_docdir}/%{name}/README.*_radius
%config %{_sysconfdir}/%{name}/dictionary.opensips

%files http
%defattr(-,root,root)
%{_libdir}/%{name}/modules/pi_http.so
%dir %{_datarootdir}/%{name}/pi_http
%{_datarootdir}/%{name}/pi_http/*
%{_libdir}/%{name}/modules/pi_http.so

%files event
%defattr(-,root,root)
%{_libdir}/%{name}/modules/event_flatstore.so
%{_libdir}/%{name}/modules/event_route.so
%{_libdir}/%{name}/modules/event_virtual.so
%{_libdir}/%{name}/modules/event_xmlrpc.so

%files rest
%defattr(-,root,root)
%{_libdir}/%{name}/modules/rest_client.so

%changelog
openSUSE Build Service is sponsored by