# - vpb (libvpb, vpbapi.h)
# - make package for moh sound files
# - build res_ari_mailboxes as an alternative for voicemail subpackages
-# - +x missing:
-# ldd: warning: you do not have execution permission for `/usr/lib/libasteriskssl.so.1'
#
# Conditional build:
%bcond_with corosync # res_corosync module (broken in 12.0.0)
%bcond_without pjsip # build without PJSIP stack
%bcond_without opus_vp8 # build without Opus codec and VP8 passthrough
%bcond_with malloc_debug # build with MALLOC_DEBUG
+%bcond_with system_pjproject # build with system pjproject (see below)
%bcond_without apidocs # disable apidocs building
%bcond_without verbose # verbose build
+# NOTE:
+# Building with system pjproject may be not a good idea. pjproject comes
+# optimized for client usage and asterisk is a SIP server. Asterisk requries
+# pjproject properly patched and configured and keeping our pjproject in sync
+# with Asterisk requirements may be tricky. Also, Asterisk is the only
+# package using pjproject in PLD, so there is little gain with using system
+# one.
+#
+# Before switching the 'system_pjproject' bcond make sure the pjproject
+# package is updated to the version used by Asterisk, with all Asterisk
+# patches applied and with configuration synced.
+
+%define pjproject_version 2.7.2
+
%define opus_commit a6b9521f10817c1f39f21f90fecd3f00bbb164d0
Summary: Asterisk PBX
Summary(pl.UTF-8): Centralka (PBX) Asterisk
Name: asterisk
-Version: 13.15.0
-Release: 2
+Version: 15.6.0
+Release: 4
License: GPL v2
Group: Applications/System
Source0: http://downloads.digium.com/pub/asterisk/releases/%{name}-%{version}.tar.gz
-# Source0-md5: 9f72e200b01e7ccc7e8d44bb5d9ff3c7
+# Source0-md5: 195f02b0c6118852525e027a1a610ea5
Source1: %{name}.init
Source2: %{name}.sysconfig
Source3: %{name}.tmpfiles
# https://github.com/traud/asterisk-opus
Source8: https://github.com/seanbright/asterisk-opus/archive/%{opus_commit}/asterisk-opus-%{opus_commit}.tar.gz
# Source8-md5: d2deae1095b6b42331d3060700c25493
-Patch0: lua51-path.patch
+Source9: https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/%{pjproject_version}/pjproject-%{pjproject_version}.tar.bz2
+# Source9-md5: fa3f0bc098c4bff48ddd92db1c016a7a
+Patch0: lua_versions.patch
Patch1: %{name}-ppc.patch
Patch2: FHS-paths.patch
Patch3: pld-banner.patch
Patch4: lpc10-system.patch
Patch5: %{name}-histedit.patch
Patch6: x32.patch
-Patch7: %{name}-ilbc.patch
-Patch8: asterisk-opus.patch
+#Patch7: %{name}-ilbc.patch
URL: http://www.asterisk.org/
BuildRequires: OSPToolkit-devel >= 4.0.0
%{?with_oss:BuildRequires: SDL-devel}
# TODO: switch to 2.6
BuildRequires: gmime22-devel
BuildRequires: iksemel-devel
-BuildRequires: imap-devel
+BuildRequires: imap-devel >= 1:2007f-5
%{?with_jack:BuildRequires: jack-audio-connection-kit-devel}
-BuildRequires: jansson-devel
+BuildRequires: jansson-devel >= 2.11-2
+BuildRequires: libatomic-devel
BuildRequires: libcap-devel
BuildRequires: libedit-devel
BuildRequires: libgsm-devel
BuildRequires: libxml2-devel >= 2.0
BuildRequires: libxslt-devel
BuildRequires: lpc10-devel
-BuildRequires: lua51-devel >= 5.1
+BuildRequires: lua53-devel >= 5.3
#BuildRequires: mISDNuser-devel < 2
%{?with_mysql:BuildRequires: mysql-devel}
BuildRequires: ncurses-devel
BuildRequires: opus-devel
%{?with_opus_vp8:BuildRequires: opusfile-devel}
BuildRequires: pam-devel
-%{?with_pjsip:BuildRequires: pjproject-devel >= 2.3}
+%if %{with system_pjproject} && %{with pjsip}
+BuildRequires: pjproject-devel >= 2.6-4
+%endif
BuildRequires: pkgconfig
BuildRequires: popt-devel
%{?with_portaudio:BuildRequires: portaudio-devel >= 19}
BuildRequires: speexdsp-devel
%{?with_sqlite2:BuildRequires: sqlite-devel >= 2}
BuildRequires: sqlite3-devel
-BuildRequires: srtp-devel
-Requires(post,preun,postun): systemd-units >= 38
-Requires: systemd-units >= 0.38
+BuildRequires: libsrtp2-devel
+BuildRequires: unbound-devel
%{?with_odbc:BuildRequires: unixODBC-devel}
BuildRequires: uriparser-devel
%{?with_ilbc:BuildRequires: webrtc-libilbc-devel >= 2}
BuildRequires: xorg-lib-libX11-devel
BuildRequires: zlib-devel
+Requires(post,preun,postun): systemd-units >= 38
+Requires: systemd-units >= 0.38
Requires(post,preun): /sbin/chkconfig
Requires(postun): /usr/sbin/groupdel
Requires(postun): /usr/sbin/userdel
Requires: rc-scripts
Provides: group(asterisk)
Provides: user(asterisk)
+#Obsoletes: asterisk-ais # should be in -corosync package (when built)?
+Obsoletes: asterisk-examples
+Obsoletes: asterisk-h323 < 13
+#Obsoletes: asterisk-misdn # what is the status of this plugin?
+Obsoletes: asterisk-usbradio < 10.4.0
Conflicts: logrotate < 3.8.0
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
# references symbols in the asterisk binary
-%define skip_post_check_so libasteriskssl.so.*
+%define skip_post_check_so libasteriskssl.so.* libasteriskpj.so.*
-%define _noautoprovfiles %{_libdir}/asterisk/modules/.*
+%define _noautoprovfiles %{_libdir}/asterisk/modules/.*
%description
Asterisk is an Open Source PBX and telephony development platform that
Summary: PJSIP Asterisk modules
Summary(pl.UTF-8): Moduły Asteriska PJSIP
Group: Applications/Networking
+Requires: pjproject >= 2.6-4
Requires: %{name} = %{version}-%{release}
%description pjsip
%patch4 -p1
%patch5 -p1
%patch6 -p1
-%patch7 -p1
%if %{with opus_vp8}
-%patch8 -p1
cp -a asterisk-opus-%{opus_commit}/codecs/* codecs
cp -a asterisk-opus-%{opus_commit}/formats/* formats
cp -a asterisk-opus-%{opus_commit}/include/asterisk/* include/asterisk
%endif
+%if %{without system_pjproject} && %{with pjsip}
+mkdir externals
+ln -s %{SOURCE9} externals
+md5sum %{SOURCE9} > externals/pjproject-%{pjproject_version}.md5
+%endif
+
# Fixup makefile so sound archives aren't downloaded/installed
%{__sed} -i -e 's/^all:.*$/all:/' sounds/Makefile
%{__sed} -i -e 's/^install:.*$/install:/' sounds/Makefile
export ASTLDFLAGS="%{rpmldflags}"
export WGET="/bin/true"
+%if %{without system_pjproject} && %{with pjsip}
+export EXTERNALS_CACHE_DIR="$PWD/externals"
+export PJPROJECT_CONFIGURE_OPTS="--disable-bcg729"
+%endif
+
# be sure to invoke ./configure with our flags
cd menuselect
%{__aclocal} -I ../autoconf
cd ..
%configure \
+ %{__without_if system_pjproject pjproject-bundled} \
+ --without-jansson-bundled \
+ --with-unbound \
%{__without oss SDL_image} \
%{__without bluetooth bluetooth} \
--without-gtk2 \
%files
%defattr(644,root,root,755)
-%doc README *.txt ChangeLog BUGS CREDITS configs
+%doc README*.md *.txt ChangeLog CHANGES BUGS CREDITS configs LICENSE
%doc doc/asterisk.sgml
%attr(755,root,root) %{_sbindir}/astcanary
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/phoneprov.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/queuerules.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/queues.conf
+%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/resolver_unbound.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/res_parking.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/res_pktccops.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/res_stun_monitor.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/users.conf
%attr(640,root,asterisk) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/asterisk/vpb.conf
-%{_libdir}/libasteriskssl.so.1
+%attr(755,root,root) %{_libdir}/libasteriskssl.so.1
+%if %{without system_pjproject} && %{with pjsip}
+%attr(755,root,root) %{_libdir}/libasteriskpj.so.2
+%endif
%dir %{_libdir}/asterisk
%dir %{_libdir}/asterisk/modules
%attr(755,root,root) %{_libdir}/asterisk/modules/app_alarmreceiver.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_amd.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_authenticate.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/app_bridgeaddchan.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_bridgewait.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_cdr.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_celgenuserevent.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_speech_utils.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_stack.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_stasis.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/app_statsd.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/app_stream_echo.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_system.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_talkdetect.so
%attr(755,root,root) %{_libdir}/asterisk/modules/app_test.so
%attr(755,root,root) %{_libdir}/asterisk/modules/chan_bridge_media.so
%attr(755,root,root) %{_libdir}/asterisk/modules/chan_iax2.so
%attr(755,root,root) %{_libdir}/asterisk/modules/chan_mgcp.so
-%attr(755,root,root) %{_libdir}/asterisk/modules/chan_multicast_rtp.so
-%attr(755,root,root) %{_libdir}/asterisk/modules/chan_phone.so
+#%attr(755,root,root) %{_libdir}/asterisk/modules/chan_phone.so
%attr(755,root,root) %{_libdir}/asterisk/modules/chan_rtp.so
%attr(755,root,root) %{_libdir}/asterisk/modules/chan_sip.so
%attr(755,root,root) %{_libdir}/asterisk/modules/codec_a_mu.so
%if %{with opus_vp8}
%attr(755,root,root) %{_libdir}/asterisk/modules/res_format_attr_vp8.so
%endif
+%attr(755,root,root) %{_libdir}/asterisk/modules/res_http_media_cache.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_http_websocket.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_limit.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_manager_devicestate.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_phoneprov.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pktccops.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_realtime.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/res_resolver_unbound.so
# res_rtp_asterisk.so pulls some pjproject libs, but it still looks like a core module
%attr(755,root,root) %{_libdir}/asterisk/modules/res_rtp_asterisk.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_rtp_multicast.so
+#%attr(755,root,root) %{_libdir}/asterisk/modules/res_sdp_translator_pjmedia.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_security_log.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_smdi.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_sorcery_astdb.so
%files devel
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libasteriskssl.so
+%if %{without system_pjproject} && %{with pjsip}
+%attr(755,root,root) %{_libdir}/libasteriskpj.so
+%endif
%dir %{_includedir}/asterisk
%{_includedir}/asterisk/*.h
%{_includedir}/asterisk.h
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/asterisk/modules/codec_ilbc.so
%attr(755,root,root) %{_libdir}/asterisk/modules/format_ilbc.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/res_format_attr_ilbc.so
%endif
%files jabber
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip_sips_contact.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip_t38.so
-%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip_transport_management.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip_transport_websocket.so
%attr(755,root,root) %{_libdir}/asterisk/modules/res_pjsip_xpidf_body_generator.so
%endif
%files speex
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/asterisk/modules/codec_speex.so
+%attr(755,root,root) %{_libdir}/asterisk/modules/format_ogg_speex.so
%attr(755,root,root) %{_libdir}/asterisk/modules/func_speex.so
%if %{with sqlite2}