git: d2de2e1ecfc0 - main - Add net/asterisk22: LTS version of Asterisk PBX software

From: Li-Wen Hsu <lwhsu_at_FreeBSD.org>
Date: Sat, 18 Jan 2025 18:07:33 UTC
The branch main has been updated by lwhsu:

URL: https://cgit.FreeBSD.org/ports/commit/?id=d2de2e1ecfc00e3d271ef8a966654e7cf8f72e07

commit d2de2e1ecfc00e3d271ef8a966654e7cf8f72e07
Author:     Oleksandr Kryvulia <o.kryvulia@flex-it.com.ua>
AuthorDate: 2025-01-14 04:44:12 +0000
Commit:     Li-Wen Hsu <lwhsu@FreeBSD.org>
CommitDate: 2025-01-18 17:42:50 +0000

    Add net/asterisk22: LTS version of Asterisk PBX software
    
    PR:             284056
    Sponsored by:   FLEX-IT LLC
---
 net/Makefile                                       |   1 +
 net/asterisk22/Makefile                            | 327 ++++++++++++++++
 net/asterisk22/distinfo                            |  11 +
 net/asterisk22/files/asterisk.in                   |  86 +++++
 net/asterisk22/files/patch-Makefile                | 135 +++++++
 net/asterisk22/files/patch-Makefile.rules          |  27 ++
 net/asterisk22/files/patch-agi_Makefile            |  13 +
 .../patch-build__tools_make__xml__documentation    |  11 +
 net/asterisk22/files/patch-channels_chan__dahdi.c  |  33 ++
 net/asterisk22/files/patch-configure               |  88 +++++
 net/asterisk22/files/patch-contrib_Makefile        |  23 ++
 net/asterisk22/files/patch-main_Makefile           |  14 +
 net/asterisk22/files/patch-main_lock.c             |  12 +
 net/asterisk22/files/patch-main_term.c             |  10 +
 net/asterisk22/files/patch-menuselect_configure    |  11 +
 .../files/patch-third-party_pjproject_Makefile     |  30 ++
 .../patch-third-party_pjproject_Makefile.rules     |  20 +
 net/asterisk22/pkg-descr                           |   3 +
 net/asterisk22/pkg-message                         |  42 +++
 net/asterisk22/pkg-plist                           | 419 +++++++++++++++++++++
 20 files changed, 1316 insertions(+)

diff --git a/net/Makefile b/net/Makefile
index 8f1970232468..e2fa5e90c569 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -35,6 +35,7 @@
     SUBDIR += asterisk-g72x
     SUBDIR += asterisk18
     SUBDIR += asterisk20
+    SUBDIR += asterisk22
     SUBDIR += astron
     SUBDIR += avahi
     SUBDIR += avahi-app
diff --git a/net/asterisk22/Makefile b/net/asterisk22/Makefile
new file mode 100644
index 000000000000..553da890d404
--- /dev/null
+++ b/net/asterisk22/Makefile
@@ -0,0 +1,327 @@
+PORTNAME=	asterisk
+DISTVERSION=	22.1.1
+CATEGORIES=	net
+MASTER_SITES=	https://downloads.asterisk.org/pub/telephony/%SUBDIR%/:DEFAULT,g729
+MASTER_SITE_SUBDIR=	asterisk/ \
+			asterisk/old-releases/ \
+			sounds/releases/:g729
+PKGNAMESUFFIX=	22
+DISTFILES=	${DISTNAME}${EXTRACT_SUFX} \
+		${ASTERISK_CORE_G729_SOUNDS}:g729 \
+		${ASTERISK_MOH_G729_SOUNDS}:g729
+DIST_SUBDIR=	${PORTNAME}
+EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER=	o.kryvulia@flex-it.com.ua
+COMMENT=	Open Source PBX and telephony toolkit
+WWW=		https://www.asterisk.org
+
+LICENSE=	GPLv2
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+LIB_DEPENDS=	libjansson.so:devel/jansson \
+		libuuid.so:misc/e2fsprogs-libuuid
+
+USES=		bison compiler:c11 cpe gmake gnome iconv libedit localbase \
+		ncurses pkgconfig shebangfix sqlite ssl
+CPE_VENDOR=	digium
+USE_GITHUB=	nodefault
+USE_GNOME=	libxml2
+USE_LDCONFIG=	yes
+USE_RC_SUBR=	asterisk
+
+SHEBANG_FILES=	agi/agi-test.agi \
+		agi/jukebox.agi \
+		contrib/scripts/astversion \
+		contrib/scripts/ast_coredumper
+
+GNU_CONFIGURE=	yes
+CONFIGURE_ARGS=	--datarootdir=${DATADIR} \
+		--with-crypto=${OPENSSLBASE} \
+		--with-externals-cache=${DISTDIR}/${DIST_SUBDIR} \
+		--with-ilbc=internal \
+		--with-ssl=${OPENSSLBASE}
+
+MAKE_ARGS+=	ASTDATADIR=${DATADIR} \
+		NOISY_BUILD=yes
+MAKE_ENV=	ASTCFLAGS="${CFLAGS}" \
+		ASTLDFLAGS="${LDFLAGS}" \
+		DOCSDIR=${DOCSDIR} \
+		MKDIR="${MKDIR}" \
+		OSVERSION=${OSVERSION} \
+		PTHREAD_LIBS="-lpthread" \
+		PWLIBDIR=${LOCALBASE}/share/pwlib
+
+LDFLAGS+=	-L. -Wl,--undefined-version
+
+CONFLICTS=		ossp-uuid
+CONFLICTS_BUILD=	linuxthreads
+CONFLICTS_INSTALL=	asterisk18 asterisk20
+
+USERS=	${ASTERISK_USER}
+GROUPS=	${ASTERISK_GROUP} dahdi
+
+OPTIONS_DEFINE=			ASTVERSION BACKTRACE CURL EXCHANGE FREETDS G729 LDAP LUA \
+				MP3PLAYER OOH323 OPTIMIZED_CFLAGS PJSIP PORTAUDIO RADIUS SNMP \
+				SPANDSP SRTP SYSINFO URIPARSER XMLDOC XMPP
+OPTIONS_DEFINE_aarch64=		GEOLOCATION
+OPTIONS_DEFINE_amd64=		DAHDI GEOLOCATION
+OPTIONS_DEFINE_i386=		DAHDI GEOLOCATION
+OPTIONS_DEFINE_powerpc=		DAHDI
+OPTIONS_DEFINE_powerpc64=	DAHDI
+OPTIONS_DEFINE_powerpc64le=	DAHDI
+OPTIONS_DEFAULT=		CURL FREETDS GSM LUA MP3PLAYER NEWT ODBC OPUS MYSQL PGSQL \
+				PJSIP PORTAUDIO RADIUS SNMP SPANDSP SPEEX SRTP URIPARSER \
+				VORBIS XMLDOC
+OPTIONS_DEFAULT_amd64=		DAHDI XMPP
+OPTIONS_DEFAULT_i386=		DAHDI XMPP
+OPTIONS_DEFAULT_powerpc=	DAHDI XMPP
+OPTIONS_DEFAULT_powerpc64=	DAHDI XMPP
+OPTIONS_DEFAULT_powerpc64le=	DAHDI XMPP
+
+OPTIONS_GROUP=			CODECS DATABASE
+OPTIONS_GROUP_CODECS=		GSM NEWG711 OPUS SPEEX VORBIS
+OPTIONS_GROUP_DATABASE=		MYSQL ODBC PGSQL
+
+OPTIONS_MULTI=			MENU
+OPTIONS_MULTI_MENU=		NCURSES NEWT
+OPTIONS_SUB=		yes
+
+ASTVERSION_DESC=	Install astversion (requires bash)
+BACKTRACE_DESC=	Stack backtrace support via (lib)execinfo
+CODECS_DESC=	Encoder/Decoder (Codec) Support
+DAHDI_DESC=	DAHDI support
+DATABASE_DESC=	Database Support
+EXCHANGE_DESC=	Exchange calendar support
+G729_DESC=	Install G.729 format sounds for Music-on-Hold (MoH)
+GEOLOCATION_DESC=	Enable SIP Geolocation support
+MENU_DESC=	Menuselect Interface Backend
+MP3PLAYER_DESC=	Install MP3 Player for Music-On-Hold (mpg123)
+NEWG711_DESC=	New G711 Codec
+NEWT_DESC=	Newt User Interface
+OOH323_DESC=	ooh323 support
+OPUS_DESC=	Opus Codec
+PJSIP_DESC=	Build the PJSIP based SIP channel
+SRTP_DESC=	SecureRTP support
+SYSINFO_DESC=	Use devel/libsysinfo to get system information
+URIPARSER_DESC=	Use RFC 3986 compliant uriparser library
+XMLDOC_DESC=	Build and install XML documentation
+XMPP_DESC=	XMPP/GTALK support
+
+ASTVERSION_RUN_DEPENDS=	bash:shells/bash
+
+BACKTRACE_CONFIGURE_WITH=	execinfo
+
+CURL_LIB_DEPENDS=	libcurl.so:ftp/curl
+CURL_CONFIGURE_WITH=	libcurl
+
+DAHDI_LIB_DEPENDS=	libpri.so:misc/libpri \
+			libopenr2.so:misc/openr2 \
+			libtonezone.so:misc/dahdi
+DAHDI_CONFIGURE_WITH=	dahdi openr2
+
+EXCHANGE_LIB_DEPENDS=	libexpat.so:textproc/expat2 \
+			libneon.so:www/neon
+EXCHANGE_USES=		gettext-runtime
+EXCHANGE_CONFIGURE_OFF=	--without-neon --without-neon29
+
+FREETDS_LIB_DEPENDS=	libsybdb.so:databases/freetds
+FREETDS_CONFIGURE_ON=	--with-tds=${LOCALBASE}
+FREETDS_CONFIGURE_OFF=	--without-tds
+
+GEOLOCATION_USE=	GNOME=libxslt
+
+GSM_LIB_DEPENDS=	libgsm.so:audio/gsm
+GSM_CONFIGURE_WITH=	gsm
+
+LDAP_USES=		ldap
+LDAP_CONFIGURE_WITH=	ldap
+
+LUA_USES=		lua
+LUA_CONFIGURE_WITH=	lua
+LUA_CFLAGS=		-I${LUA_INCDIR}
+LUA_LDFLAGS=		-L${LUA_LIBDIR}
+
+MP3PLAYER_RUN_DEPENDS=	mpg123:audio/mpg123
+
+MYSQL_LIB_DEPENDS=	libzstd.so:archivers/zstd \
+			libunwind.so:devel/libunwind
+MYSQL_USES=		mysql
+MYSQL_CONFIGURE_WITH=	mysqlclient
+
+NCURSES_USES=		ncurses
+
+NEWT_LIB_DEPENDS=	libnewt.so:devel/newt
+
+ODBC_LIB_DEPENDS=	libodbc.so:databases/unixODBC \
+			libltdl.so:devel/libltdl
+ODBC_CONFIGURE_ON=	--with-ltdl
+ODBC_CONFIGURE_WITH=	unixodbc
+
+OPUS_EXTRACT_ONLY=	${DISTFILE_opus}
+OPUS_LIB_DEPENDS=	libopus.so:audio/opus
+OPUS_GH_TUPLE=		traud:asterisk-opus:83e1b458c77e0e287adeca494eeb79edb077b0ff:opus
+
+PGSQL_USES=		pgsql
+PGSQL_CONFIGURE_WITH=	postgres
+
+PJSIP_LIB_DEPENDS=	libsrtp2.so:net/libsrtp2 \
+			libspeex.so:audio/speex \
+			libspeexdsp.so:audio/speexdsp
+PJSIP_GH_TUPLE=		pjsip:pjproject:${PJSIP_VERSION}:pjsip
+PJSIP_CONFIGURE_WITH=	pjproject pjproject-bundled
+
+PORTAUDIO_LIB_DEPENDS=	libportaudio.so:audio/portaudio
+PORTAUDIO_CONFIGURE_WITH=	portaudio
+
+RADIUS_LIB_DEPENDS=	libradiusclient-ng.so:net/radiusclient
+RADIUS_CONFIGURE_WITH=	radius
+
+SNMP_LIB_DEPENDS=	libnetsnmp.so:net-mgmt/net-snmp \
+			libpkg.so:${PKG_ORIGIN}
+SNMP_CONFIGURE_WITH=	netsnmp
+
+SPANDSP_LIB_DEPENDS=	libspandsp.so:comms/spandsp \
+			libtiff.so:graphics/tiff
+SPANDSP_CONFIGURE_WITH=	spandsp
+
+SPEEX_LIB_DEPENDS=	libspeex.so:audio/speex \
+			libspeexdsp.so:audio/speexdsp
+SPEEX_CONFIGURE_WITH=	speex
+
+SRTP_LIB_DEPENDS=	libsrtp2.so:net/libsrtp2
+SRTP_CONFIGURE_WITH=	srtp
+
+SYSINFO_LIB_DEPENDS=	libsysinfo.so:devel/libsysinfo
+
+URIPARSER_LIB_DEPENDS=	liburiparser.so:net/uriparser
+URIPARSER_CONFIGURE_WITH=	uriparser
+
+VORBIS_LIB_DEPENDS=	libvorbis.so:audio/libvorbis \
+			libogg.so:audio/libogg
+VORBIS_CONFIGURE_WITH=	ogg
+
+XMLDOC_CONFIGURE_ENABLE=	xmldoc
+
+XMPP_LIB_DEPENDS=	libiksemel.so:textproc/iksemel
+XMPP_CONFIGURE_WITH=	iksemel
+
+ASTERISK_CORE_G729_SOUNDS=	asterisk-core-sounds-en-g729-1.6.tar.gz
+ASTERISK_MOH_G729_SOUNDS=	asterisk-moh-opsound-g729-2.03.tar.gz
+
+ASTERISK_USER=	asterisk
+ASTERISK_GROUP=	asterisk
+
+PJSIP_VERSION=	2.14.1
+
+.include <bsd.port.options.mk>
+
+.include <bsd.port.pre.mk>
+
+.if (${OPSYS} == FreeBSD && ${OSVERSION} >= 1400092 && ${SSL_DEFAULT} == base) || \
+	${SSL_DEFAULT:Mopenssl3*}
+LIB_DEPENDS+=	libgnutls.so:security/gnutls
+CFLAGS+=	-DOPENSSL_API_COMPAT=0x10100000L
+LDFLAGS+=	-lgnutls
+.endif
+
+.if empty(ICONV_LIB)
+CONFIGURE_ARGS+=	ac_cv_lib_iconv_iconv_open=no \
+			ac_cv_lib_iconv_libiconv_open=no
+.endif
+
+.if ${PREFIX} == ${LOCALBASE}
+VARDIR=		/var
+.else
+VARDIR=		${PREFIX}/var
+.endif
+
+SUB_LIST+=	ASTERISK_USER=${ASTERISK_USER}
+PLIST_SUB+=	ASTERISK_GROUP=${ASTERISK_GROUP} \
+		ASTERISK_USER=${ASTERISK_USER} \
+		VARDIR=${VARDIR}
+
+.if ${PORT_OPTIONS:MGEOLOCATION}
+.if ${ARCH} == i386
+LLD_EMULATION=	elf_i386
+.elif ${ARCH} == amd64
+LLD_EMULATION=	elf_x86_64
+.elif ${ARCH} == aarch64
+LLD_EMULATION=	aarch64elf
+.endif
+.endif
+
+post-extract:
+	@${FIND} ${WRKSRC} -name '*.d' -delete
+
+post-extract-G729-on:
+	${CP} ${DISTDIR}/${DIST_SUBDIR}/${ASTERISK_CORE_G729_SOUNDS} ${WRKSRC}/sounds
+	${CP} ${DISTDIR}/${DIST_SUBDIR}/${ASTERISK_MOH_G729_SOUNDS} ${WRKSRC}/sounds
+
+post-extract-OPUS-on:
+	${CP} ${WRKSRC_opus}/include/asterisk/* ${WRKSRC}/include/asterisk
+	${CP} ${WRKSRC_opus}/codecs/* ${WRKSRC}/codecs
+	${CP} ${WRKSRC_opus}/res/* ${WRKSRC}/res
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|/var/lib|${PREFIX}/share|g' ${WRKSRC}/configs/samples/musiconhold.conf.sample
+	@${REINPLACE_CMD} -e 's/@XMLSTARLET@//' ${WRKSRC}/makeopts.in
+	@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC}/main/term.c
+.if exists(${FILESDIR}/.asterisk.makeopts)
+	${CP} ${FILESDIR}/.asterisk.makeopts ${WRKSRC}/menuselect.makeopts
+.endif
+
+post-patch-GEOLOCATION-on:
+	@${REINPLACE_CMD} -e 's/%%LLD_EMULATION%%/${LLD_EMULATION}/' ${WRKSRC}/Makefile.rules
+
+post-patch-SYSINFO-on:
+	@${REINPLACE_CMD} -e 's/%%LIBSYSINFO%%/-lsysinfo/' ${WRKSRC}/main/Makefile
+
+post-patch-SYSINFO-off:
+	@${REINPLACE_CMD} -e '/#define HAVE_SYSINFO 1/d' ${WRKSRC}/configure
+	@${REINPLACE_CMD} -e '/%%LIBSYSINFO%%/d' ${WRKSRC}/main/Makefile
+
+post-configure:
+	@cd ${WRKSRC} && ${MAKE_CMD} menuselect.makeopts
+	@cd ${WRKSRC} && ./menuselect/menuselect --disable res_timing_kqueue menuselect.makeopts
+
+post-configure-GEOLOCATION-on:
+	@cd ${WRKSRC} && ./menuselect/menuselect --enable res_geolocation menuselect.makeopts
+
+post-configure-GEOLOCATION-off:
+	@cd ${WRKSRC} && ./menuselect/menuselect --disable res_geolocation menuselect.makeopts
+
+post-configure-MYSQL-on:
+	@cd ${WRKSRC} && ./menuselect/menuselect --enable res_config_mysql menuselect.makeopts
+
+post-configure-OOH323-on:
+	@cd ${WRKSRC} && ./menuselect/menuselect --enable chan_ooh323 menuselect.makeopts
+
+post-configure-NEWG711-on:
+	@cd ${WRKSRC} && ./menuselect/menuselect --enable G711_NEW_ALGORITHM menuselect.makeopts
+
+post-configure-OPTIMIZED_CFLAGS-off:
+	@cd ${WRKSRC} && ./menuselect/menuselect --disable BUILD_NATIVE menuselect.makeopts
+
+post-configure-OPUS-on:
+	@cd ${WRKSRC} && ./menuselect/menuselect --enable codec_opus_open_source menuselect.makeopts
+
+post-install:
+	@${RM} ${STAGEDIR}${ETCDIR}/*.conf ${STAGEDIR}${ETCDIR}/extensions.ael ${STAGEDIR}${ETCDIR}/extensions.lua
+	@${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/ast[a-f]* ${STAGEDIR}${PREFIX}/lib/*.so.* ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/modules/*.so ${STAGEDIR}${DATADIR}/agi-bin/eagi-*
+	${FIND} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/modules -type f -name '*.so' | ${SED} "s,^${STAGEDIR}${PREFIX}/,," >> ${TMPPLIST}
+	${FIND} ${STAGEDIR}${DATADIR}/sounds -type f | ${SED} "s,^${STAGEDIR}${DATADIR},${DATADIR}," >> ${TMPPLIST}
+	${FIND} ${STAGEDIR}${DATADIR}/moh -type f | ${SED} "s,^${STAGEDIR}${DATADIR},${DATADIR}," >> ${TMPPLIST}
+
+	(cd ${STAGEDIR} && \
+		${ECHO} "@owner ${ASTERISK_USER}" >> ${TMPPLIST} && \
+		${ECHO} "@group ${ASTERISK_GROUP}" >> ${TMPPLIST} && \
+		${FIND} var/spool/${PORTNAME}/voicemail/default -type f | ${SED} "s,^,/," >> ${TMPPLIST} && \
+		${FIND} var/spool/${PORTNAME}/voicemail/ -type d | ${SED} "s,^,@dir /," >> ${TMPPLIST} && \
+		${ECHO} "@owner" >> ${TMPPLIST} && \
+		${ECHO} "@group" >> ${TMPPLIST});
+
+post-install-ASTVERSION-off:
+	@${RM} ${STAGEDIR}${PREFIX}/sbin/astversion
+
+.include <bsd.port.post.mk>
diff --git a/net/asterisk22/distinfo b/net/asterisk22/distinfo
new file mode 100644
index 000000000000..180da5697443
--- /dev/null
+++ b/net/asterisk22/distinfo
@@ -0,0 +1,11 @@
+TIMESTAMP = 1736765958
+SHA256 (asterisk/asterisk-22.1.1.tar.gz) = e697740d91c33bf02d506d4da04635da48bfb0b5bb79bf8863c1a9b8f791264f
+SIZE (asterisk/asterisk-22.1.1.tar.gz) = 26220027
+SHA256 (asterisk/asterisk-core-sounds-en-g729-1.6.tar.gz) = b49dec15e07bb9bff6af0da3a07180651a38ef54d3ea54a3f20c35f081ed8714
+SIZE (asterisk/asterisk-core-sounds-en-g729-1.6.tar.gz) = 1557798
+SHA256 (asterisk/asterisk-moh-opsound-g729-2.03.tar.gz) = 0147ca9a97f0c550227aacb7793499057c4d2c64e021c95f93722f27d5549585
+SIZE (asterisk/asterisk-moh-opsound-g729-2.03.tar.gz) = 1103000
+SHA256 (asterisk/traud-asterisk-opus-83e1b458c77e0e287adeca494eeb79edb077b0ff_GH0.tar.gz) = 572a3c956371ed62b44a4bcd973db10eb4c84f3040cf7156e3acfad3b6bf3ded
+SIZE (asterisk/traud-asterisk-opus-83e1b458c77e0e287adeca494eeb79edb077b0ff_GH0.tar.gz) = 24044
+SHA256 (asterisk/pjsip-pjproject-2.14.1_GH0.tar.gz) = 6140f7a97e318caa89c17e8d5468599671c6eed12d64a7c160dac879ba004c68
+SIZE (asterisk/pjsip-pjproject-2.14.1_GH0.tar.gz) = 10322231
diff --git a/net/asterisk22/files/asterisk.in b/net/asterisk22/files/asterisk.in
new file mode 100644
index 000000000000..5fab82c5700e
--- /dev/null
+++ b/net/asterisk22/files/asterisk.in
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# PROVIDE: asterisk
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable asterisk:
+#
+# asterisk_enable (bool):	Set it to "YES" to enable asterisk
+#				Default is "NO"
+# asterisk_user (string):	User asterisk runs as
+#				Default is %%ASTERISK_USER%%
+# asterisk_group (string):	Group asterisk runs as
+#				Default is %%ASTERISK_GROUP%%
+# asterisk_args (string):	Extra argumeents to pass to asterisk at startup
+# 				Default is "-n"
+# asterisk_pidfile (string):	Location of the asterisk pid file
+#				Default is /var/run/asterisk/asterisk.pid
+# asterisk_stopsleep (int):	Number of seconds to sleep before sending stop command
+#				Default is 0, which disables it
+# asterisk_umask (string):	File creation mode mask to run asterisk with
+#
+
+. /etc/rc.subr
+
+name=asterisk
+rcvar=asterisk_enable
+desc="Asterisk PBX server"
+
+load_rc_config $name
+
+: ${asterisk_enable:=NO}
+: ${asterisk_user:=%%ASTERISK_USER%%}
+: ${asterisk_group:=%%ASTERISK_GROUP%%}
+: ${asterisk_args=-n}
+: ${asterisk_pidfile:=/var/run/asterisk/asterisk.pid}
+: ${asterisk_stopsleep:=0}
+
+extra_commands=reload
+
+start_precmd=asterisk_precmd
+stop_cmd=asterisk_stop
+reload_cmd=asterisk_reload
+
+pidfile="${asterisk_pidfile}"
+
+command="%%PREFIX%%/sbin/asterisk"
+command_args="${asterisk_args} -F -U ${asterisk_user}"
+
+asterisk_precmd()
+{
+	local rundir=${asterisk_pidfile%/*}
+	if [ ! -d $rundir ] ; then
+		install -d -m 0750 -o "${asterisk_user}" -g "${asterisk_group}" "$rundir"
+	fi
+	if [ -n "${asterisk_umask}" ]; then
+		umask ${asterisk_umask}
+	fi
+}
+
+asterisk_stop()
+{
+	if [ -z "$rc_pid" ]; then
+		[ -n "$rc_fast" ] && return 0
+		_run_rc_notrunning
+		return 1
+	fi
+	echo 'Stopping asterisk.'
+	if [ ${asterisk_stopsleep} -gt 0 ]; then
+		sleep ${asterisk_stopsleep}
+	fi
+	$command -rx 'core stop now'
+	wait_for_pids $rc_pid
+}
+
+asterisk_reload()
+{
+	if [ -z "$rc_pid" ]; then
+		_run_rc_notrunning
+		return 1
+	fi
+	echo 'Reloading asterisk.'
+	$command -rx 'reload'
+}
+
+run_rc_command "$1"
diff --git a/net/asterisk22/files/patch-Makefile b/net/asterisk22/files/patch-Makefile
new file mode 100644
index 000000000000..30def8923871
--- /dev/null
+++ b/net/asterisk22/files/patch-Makefile
@@ -0,0 +1,135 @@
+--- Makefile.orig	2022-08-18 15:18:29 UTC
++++ Makefile
+@@ -144,7 +144,7 @@ ASTTOPDIR:=$(subst $(space),\$(space),$(CURDIR))
+ OVERWRITE=y
+ 
+ # Include debug and macro symbols in the executables (-g) and profiling info (-pg)
+-DEBUG=-g3
++#DEBUG=-g3
+ 
+ # Asterisk.conf is located in ASTETCDIR or by using the -C flag
+ # when starting Asterisk
+@@ -168,7 +168,7 @@ LINKER_SYMBOL_PREFIX=
+ #_ASTCFLAGS+=-DOLD_DSP_ROUTINES
+ 
+ # Default install directory for DAHDI hooks.
+-DAHDI_UDEV_HOOK_DIR = /usr/share/dahdi/span_config.d
++#DAHDI_UDEV_HOOK_DIR = /usr/share/dahdi/span_config.d
+ 
+ # If the file .asterisk.makeopts is present in your home directory, you can
+ # include all of your favorite menuselect options so that every time you download
+@@ -226,12 +226,6 @@ else ifneq ($(findstring BSD,$(OSARCH)),)
+   _ASTCFLAGS+=-isystem /usr/local/include
+ endif
+ 
+-ifeq ($(OSARCH),FreeBSD)
+-  # -V is understood by BSD Make, not by GNU make.
+-  BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
+-  _ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
+-endif
+-
+ ifeq ($(OSARCH),NetBSD)
+   _ASTCFLAGS+=-pthread -D__LIBPTHREAD_SOURCE__ -I/usr/pkg/include
+ endif
+@@ -475,8 +469,12 @@ endif
+ 			$(INSTALL) -m 644 $$n "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
+ 		done \
+ 	fi
++	if [ ! -d $(DESTDIR)$(DOCSDIR)/images ]; then \
++		$(MKDIR) $(DESTDIR)$(DOCSDIR)/images; \
++	fi
++
+ 	for x in images/*.jpg; do \
+-		$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/images" ; \
++		$(INSTALL) -m 644 $$x "$(DESTDIR)$(DOCSDIR)/images" ; \
+ 	done
+ 	$(MAKE) -C sounds install
+ 	find rest-api -name "*.json" | while read x; do \
+@@ -545,7 +543,7 @@ INSTALLDIRS="$(ASTLIBDIR)" "$(ASTMODDIR)" "$(ASTSBINDI
+ 	"$(ASTDATADIR)/firmware/iax" "$(ASTDATADIR)/images" "$(ASTDATADIR)/keys" \
+ 	"$(ASTDATADIR)/phoneprov" "$(ASTDATADIR)/rest-api" "$(ASTDATADIR)/static-http" \
+ 	"$(ASTDATADIR)/sounds" "$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)" \
+-	"$(ASTDATADIR)/third-party" "${ASTDATADIR}/keys/stir_shaken" "${ASTDATADIR}/keys/stir_shaken/cache"
++	"$(ASTDATADIR)/third-party" "${ASTDATADIR}/keys/stir_shaken" "$(ASTSPOOLDIR)/outgoing"
+ 
+ installdirs:
+ 	@for i in $(INSTALLDIRS); do \
+@@ -557,7 +555,7 @@ installdirs:
+ main-bininstall:
+ 	+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTLIBDIR="$(ASTLIBDIR)" $(SUBMAKE) -C main bininstall
+ 
+-bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
++bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall install-headers
+ 	$(INSTALL) -m 755 contrib/scripts/astversion "$(DESTDIR)$(ASTSBINDIR)/"
+ 	$(INSTALL) -m 755 contrib/scripts/astgenkey "$(DESTDIR)$(ASTSBINDIR)/"
+ 	$(INSTALL) -m 755 contrib/scripts/autosupport "$(DESTDIR)$(ASTSBINDIR)/"
+@@ -578,10 +576,10 @@ endif
+ 	if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
+ 		$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin "$(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin"; \
+ 	fi
+-ifeq ($(HAVE_DAHDI),1)
+-	$(INSTALL) -d $(DESTDIR)/$(DAHDI_UDEV_HOOK_DIR)
+-	$(INSTALL) -m 644 contrib/scripts/dahdi_span_config_hook $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
+-endif
++#ifeq ($(HAVE_DAHDI),1)
++#	$(INSTALL) -d $(DESTDIR)/$(DAHDI_UDEV_HOOK_DIR)
++#	$(INSTALL) -m 644 contrib/scripts/dahdi_span_config_hook $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
++#endif
+ 
+ $(SUBDIRS_INSTALL):
+ 	+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTDATADIR="$(ASTDATADIR)" $(SUBMAKE) -C $(@:-install=) install
+@@ -706,7 +704,7 @@ ifeq ($(ASTERISKVERSION),UNKNOWN__git_check_fail)
+ endif
+ 
+ 
+-install: badshell versioncheck bininstall datafiles
++install: badshell versioncheck bininstall datafiles samples
+ 	@if [ -x /usr/sbin/asterisk-post-install ]; then \
+ 		/usr/sbin/asterisk-post-install "$(DESTDIR)" . ; \
+ 	fi
+@@ -751,23 +749,10 @@ upgrade: bininstall
+ #  (2) the extension to strip off
+ define INSTALL_CONFIGS
+ 	@for x in $(1)/*$(2); do \
+-		dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x $(2)`"; \
+-		if [ -f "$${dst}" ]; then \
+-			if [ "$(OVERWRITE)" = "y" ]; then \
+-				if cmp -s "$${dst}" "$$x" ; then \
+-					echo "Config file $$x is unchanged"; \
+-					continue; \
+-				fi ; \
+-				mv -f "$${dst}" "$${dst}.old" ; \
+-			else \
+-				echo "Skipping config file $$x"; \
+-				continue; \
+-			fi ;\
+-		fi ; \
+ 		echo "Installing file $$x"; \
+-		$(INSTALL) -m 644 "$$x" "$${dst}" ;\
++		$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`.sample ; \
+ 	done ; \
+-	if [ "$(OVERWRITE)" = "y" ]; then \
++	if true; then \
+ 		echo "Updating asterisk.conf" ; \
+ 		sed -e 's|^astcachedir.*$$|astcachedir => $(ASTCACHEDIR)|' \
+ 			-e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
+@@ -781,8 +766,8 @@ define INSTALL_CONFIGS
+ 			-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
+ 			-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
+ 			-e 's|^astsbindir.*$$|astsbindir => $(ASTSBINDIR)|' \
+-			"$(DESTDIR)$(ASTCONFPATH)" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
+-		$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH)" ; \
++			"$(DESTDIR)$(ASTCONFPATH).sample" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
++		$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH).sample" ; \
+ 		rm -f "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
+ 	fi
+ endef
+@@ -816,7 +801,7 @@ adsi:
+ 		else \
+ 			echo "Installing $$x" ; \
+ 		fi ; \
+-		$(INSTALL) -m 644 "$$x" "$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`" ; \
++		$(INSTALL) -m 644 "$$x" "$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x`.sample" ; \
+ 	done
+ 
+ samples: adsi
diff --git a/net/asterisk22/files/patch-Makefile.rules b/net/asterisk22/files/patch-Makefile.rules
new file mode 100644
index 000000000000..4c4adf5b830a
--- /dev/null
+++ b/net/asterisk22/files/patch-Makefile.rules
@@ -0,0 +1,27 @@
+--- Makefile.rules.orig	2023-01-12 11:42:40 UTC
++++ Makefile.rules
+@@ -107,6 +107,11 @@ ifeq ($(C_COMPILER_FAMILY),clang)
+ # Clang -Werror warning suppressions
+ ifeq ($(C_COMPILER_FAMILY),clang)
+ 	CC_CFLAGS+=-Wno-unused-value -Wno-parentheses-equality
++	BINARY_LLD_FLAGS= -z noexecstack
++	LLD_EMULATION=%%LLD_EMULATION%%
++else
++	BINARY_LLD_FLAGS=
++	LLD_EMULATION=
+ endif
+ 
+ ifeq ($(GNU_LD),1)
+@@ -213,10 +218,10 @@ endif
+ # extern const size_t _binary_abc_def_xml_size;
+ %.o: %.xml
+ 	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
+-	$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles  -nodefaultlibs -nostdlib -r -Wl,-b,binary -o $@ $^
++	$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles  -nodefaultlibs -nostdlib $(BINARY_LLD_FLAGS) -r -Wl,-b,binary,-m,$(LLD_EMULATION) -o $@ $^
+ 
+ %.o: %.xslt
+ 	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
+-	$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles  -nodefaultlibs -nostdlib -r -Wl,-b,binary -o $@ $^
++	$(CMD_PREFIX) $(CC) -g -Wl,-znoexecstack -nostartfiles  -nodefaultlibs -nostdlib $(BINARY_LLD_FLAGS) -r -Wl,-b,binary,-m,$(LLD_EMULATION) -o $@ $^
+ 
+ dist-clean:: clean
diff --git a/net/asterisk22/files/patch-agi_Makefile b/net/asterisk22/files/patch-agi_Makefile
new file mode 100644
index 000000000000..019ad10e1ef9
--- /dev/null
+++ b/net/asterisk22/files/patch-agi_Makefile
@@ -0,0 +1,13 @@
+--- agi/Makefile.orig	2020-07-09 15:39:17 UTC
++++ agi/Makefile
+@@ -16,7 +16,9 @@ ASTTOPDIR?=..
+ 
+ .PHONY: clean all uninstall
+ 
+-AGIS=$(MENUSELECT_AGIS)
++AGIS_BIN=eagi-test eagi-sphinx-test
++AGIS_SCR=agi-test.agi jukebox.agi
++AGIS=$(AGIS_SCR) $(AGIS_BIN)
+ 
+ ifeq ($(OSARCH),SunOS)
+   LIBS+=-lsocket -lnsl
diff --git a/net/asterisk22/files/patch-build__tools_make__xml__documentation b/net/asterisk22/files/patch-build__tools_make__xml__documentation
new file mode 100644
index 000000000000..af57b9e6dc2c
--- /dev/null
+++ b/net/asterisk22/files/patch-build__tools_make__xml__documentation
@@ -0,0 +1,11 @@
+--- build_tools/make_xml_documentation.orig	2024-10-17 16:00:41 UTC
++++ build_tools/make_xml_documentation
+@@ -220,7 +220,7 @@ for subdir in ${mod_subdirs} ; do
+ 					${XMLSTARLET} val -e -d "${source_tree}/doc/appdocsxml.dtd" "${i}" || { echo "" ; exit 1 ; }
+ 			fi
+ 		fi
+-		${SED} -r "/^\s*(<[?]xml|<.DOCTYPE|<.?docs)/d" "${i}" >> "${output_file}"
++		${SED} -r "/^[[:space:]]*(<[?]xml|<.DOCTYPE|<.?docs)/d" "${i}" >> "${output_file}"
+ 	done
+ done
+ echo "</docs>" >> "${output_file}"
diff --git a/net/asterisk22/files/patch-channels_chan__dahdi.c b/net/asterisk22/files/patch-channels_chan__dahdi.c
new file mode 100644
index 000000000000..e062d643f2fd
--- /dev/null
+++ b/net/asterisk22/files/patch-channels_chan__dahdi.c
@@ -0,0 +1,33 @@
+--- channels/chan_dahdi.c.orig	2024-10-17 16:00:41 UTC
++++ channels/chan_dahdi.c
+@@ -4909,6 +4909,8 @@ void dahdi_ec_enable(struct dahdi_pvt *p)
+ 		return;
+ 	}
+ 	if (p->echocancel.head.tap_length) {
++		struct dahdi_echocanparams *pecp;
++
+ #if defined(HAVE_PRI) || defined(HAVE_SS7)
+ 		switch (p->sig) {
+ #if defined(HAVE_PRI)
+@@ -4939,7 +4941,9 @@ void dahdi_ec_enable(struct dahdi_pvt *p)
+ 			break;
+ 		}
+ #endif	/* defined(HAVE_PRI) || defined(HAVE_SS7) */
+-		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &p->echocancel);
++
++		pecp = &p->echocancel.head;
++		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp);
+ 		if (res) {
+ 			ast_log(LOG_WARNING, "Unable to enable echo cancellation on channel %d (%s)\n", p->channel, strerror(errno));
+ 		} else {
+@@ -4973,8 +4977,9 @@ void dahdi_ec_disable(struct dahdi_pvt *p)
+ 
+ 	if (p->echocanon) {
+ 		struct dahdi_echocanparams ecp = { .tap_length = 0 };
++		struct dahdi_echocanparams *pecp = &ecp;
+ 
+-		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &ecp);
++		res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_ECHOCANCEL_PARAMS, &pecp);
+ 
+ 		if (res)
+ 			ast_log(LOG_WARNING, "Unable to disable echo cancellation on channel %d: %s\n", p->channel, strerror(errno));
diff --git a/net/asterisk22/files/patch-configure b/net/asterisk22/files/patch-configure
new file mode 100644
index 000000000000..2a0a4e4648eb
--- /dev/null
+++ b/net/asterisk22/files/patch-configure
@@ -0,0 +1,88 @@
+--- configure.orig	2024-07-25 15:24:13 UTC
++++ configure
+@@ -5101,8 +5101,6 @@ case "${host_os}" in
+      ;;
+      dragonfly*|freebsd*)
+      ac_default_prefix=/usr/local
+-     CPPFLAGS=-I/usr/local/include
+-     LDFLAGS=-L/usr/local/lib
+      ;;
+      openbsd*)
+      ac_default_prefix=/usr/local
+@@ -21439,8 +21437,6 @@ printf "%s\n" "yes" >&6; }
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ printf "%s\n" "yes" >&6; }
+ 
+-printf "%s\n" "#define HAVE_SYSINFO 1" >>confdefs.h
+-
+ else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ printf "%s\n" "no" >&6; }
+@@ -23085,6 +23081,8 @@ printf %s "checking for getifaddrs() support... " >&6;
+ 
+ 	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
++ #include <sys/types.h>
++ #include <sys/socket.h>
+  #include <ifaddrs.h>
+ int
+ main (void)
+@@ -31990,6 +31988,8 @@ for ver in ${LUA_VERSIONS:-5.4 5.3 5.2 5.1}; do
+ 
+ for ver in ${LUA_VERSIONS:-5.4 5.3 5.2 5.1}; do
+ 
++vernodot=`echo ${ver} | sed 's/\.//'`
++
+ if test "x${PBX_LUA}" != "x1" -a "${USE_LUA}" != "no"; then
+    pbxlibdir=""
+    # if --with-LUA=DIR has been specified, use it.
+@@ -32004,14 +32004,14 @@ if test "x${PBX_LUA}" != "x1" -a "${USE_LUA}" != "no";
+       ast_ext_lib_check_save_CFLAGS="${CFLAGS}"
+       CFLAGS="${CFLAGS} "
+       as_ac_Lib=`printf "%s\n" "ac_cv_lib_lua${ver}""_luaL_newstate" | $as_tr_sh`
+-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua${ver}" >&5
+-printf %s "checking for luaL_newstate in -llua${ver}... " >&6; }
++{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-${ver}" >&5
++printf %s "checking for luaL_newstate in -llua-${ver}... " >&6; }
+ if eval test \${$as_ac_Lib+y}
+ then :
+   printf %s "(cached) " >&6
+ else $as_nop
+   ac_check_lib_save_LIBS=$LIBS
+-LIBS="-llua${ver} ${pbxlibdir} -lm $LIBS"
++LIBS="-llua-${ver} ${pbxlibdir} -lm $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+@@ -32052,7 +32052,7 @@ fi
+ 
+    # now check for the header.
+    if test "${AST_LUA_FOUND}" = "yes"; then
+-      LUA_LIB="${pbxlibdir} -llua${ver} -lm"
++      LUA_LIB="${pbxlibdir} -llua-${ver} -lm"
+       # if --with-LUA=DIR has been specified, use it.
+       if test "x${LUA_DIR}" != "x"; then
+          LUA_INCLUDE="-I${LUA_DIR}/include"
+@@ -32062,8 +32062,8 @@ fi
+          # check for the header
+          ast_ext_lib_check_saved_CPPFLAGS="${CPPFLAGS}"
+          CPPFLAGS="${CPPFLAGS} ${LUA_INCLUDE}"
+-         as_ac_Header=`printf "%s\n" "ac_cv_header_lua${ver}/lua.h" | $as_tr_sh`
+-ac_fn_c_check_header_compile "$LINENO" "lua${ver}/lua.h" "$as_ac_Header" "$ac_includes_default"
++         as_ac_Header=`printf "%s\n" "ac_cv_header_lua${vernodot}/lua.h" | $as_tr_sh`
++ac_fn_c_check_header_compile "$LINENO" "lua${vernodot}/lua.h" "$as_ac_Header" "$ac_includes_default"
+ if eval test \"x\$"$as_ac_Header"\" = x"yes"
+ then :
+   LUA_HEADER_FOUND=1
+@@ -32090,9 +32090,9 @@ fi
+ 
+ 	if test "x${PBX_LUA}" = "x1" ; then
+ 		if test x"${LUA_DIR}" = x; then
+-			LUA_INCLUDE="${LUA_INCLUDE} -I/usr/include/lua${ver}"
++			LUA_INCLUDE="${LUA_INCLUDE} -I/usr/include/lua${vernodot}"
+ 		else
+-			LUA_INCLUDE="${LUA_INCLUDE} -I${LUA_DIR}/lua${ver}"
++			LUA_INCLUDE="${LUA_INCLUDE} -I${LUA_DIR}/lua${vernodot}"
+ 		fi
+ 		break;
+ 	fi
diff --git a/net/asterisk22/files/patch-contrib_Makefile b/net/asterisk22/files/patch-contrib_Makefile
new file mode 100644
index 000000000000..dc38a639baad
--- /dev/null
+++ b/net/asterisk22/files/patch-contrib_Makefile
@@ -0,0 +1,23 @@
+--- contrib/Makefile.orig	2020-07-09 15:39:17 UTC
++++ contrib/Makefile
+@@ -24,14 +24,14 @@ install:
+ 	$(INSTALL) -m 755 scripts/ast_logescalator "$(DESTDIR)$(ASTDATADIR)/scripts/ast_logescalator"
+ 	$(INSTALL) -m 755 scripts/ast_loggrabber "$(DESTDIR)$(ASTDATADIR)/scripts/ast_loggrabber"
+ 	$(INSTALL) -m 755 scripts/ast_coredumper "$(DESTDIR)$(ASTDATADIR)/scripts/ast_coredumper"
+-	$(INSTALL) -m 755 scripts/refcounter.py "$(DESTDIR)$(ASTDATADIR)/scripts/refcounter.py"
+-	$(INSTALL) -m 755 scripts/refstats.py "$(DESTDIR)$(ASTDATADIR)/scripts/refstats.py"
+-	$(INSTALL) -m 755 scripts/reflocks.py "$(DESTDIR)$(ASTDATADIR)/scripts/reflocks.py"
++#	$(INSTALL) -m 755 scripts/refcounter.py "$(DESTDIR)$(ASTDATADIR)/scripts/refcounter.py"
++#	$(INSTALL) -m 755 scripts/refstats.py "$(DESTDIR)$(ASTDATADIR)/scripts/refstats.py"
++#	$(INSTALL) -m 755 scripts/reflocks.py "$(DESTDIR)$(ASTDATADIR)/scripts/reflocks.py"
+ 
+ uninstall:
+ 	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/ast_logescalator"
+ 	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/ast_loggrabber"
+ 	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/ast_coredumper"
+-	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/refcounter.py"
+-	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/refstats.py"
+-	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/reflocks.py"
++#	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/refcounter.py"
++#	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/refstats.py"
++#	-rm -f "$(DESTDIR)$(ASTDATADIR)/scripts/reflocks.py"
diff --git a/net/asterisk22/files/patch-main_Makefile b/net/asterisk22/files/patch-main_Makefile
new file mode 100644
index 000000000000..62f7a4504a4e
--- /dev/null
+++ b/net/asterisk22/files/patch-main_Makefile
@@ -0,0 +1,14 @@
+--- main/Makefile.orig	2022-08-18 15:18:29 UTC
++++ main/Makefile
+@@ -79,9 +79,8 @@ else
+ endif
+ 
+ ifeq ($(OSARCH),FreeBSD)
+-  # -V is understood by BSD Make, not by GNU make.
+-  BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
+-  AST_LIBS+=$(shell if test $(BSDVERSION) -lt 502102 ; then echo "-lc_r"; else echo "-pthread"; fi)
++  AST_LIBS+=-pthread
++  CRYPT_LIB=-lcrypt
+   AST_LIBS+=-lcrypto
+ endif
+ 
diff --git a/net/asterisk22/files/patch-main_lock.c b/net/asterisk22/files/patch-main_lock.c
new file mode 100644
index 000000000000..5292db43b5a1
--- /dev/null
+++ b/net/asterisk22/files/patch-main_lock.c
@@ -0,0 +1,12 @@
+--- main/lock.c.orig	2024-10-17 16:00:41 UTC
++++ main/lock.c
+@@ -718,9 +718,6 @@ int __ast_rwlock_init(int tracking, const char *filena
+ #endif /* DEBUG_THREADS */
+ 
+ 	pthread_rwlockattr_init(&attr);
+-#ifdef HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NP
+-	pthread_rwlockattr_setkind_np(&attr, PTHREAD_RWLOCK_PREFER_WRITER_NP);
+-#endif
+ 	res = pthread_rwlock_init(&t->lock, &attr);
+ 	pthread_rwlockattr_destroy(&attr);
+ 
diff --git a/net/asterisk22/files/patch-main_term.c b/net/asterisk22/files/patch-main_term.c
new file mode 100644
index 000000000000..01eafa9e2633
--- /dev/null
+++ b/net/asterisk22/files/patch-main_term.c
@@ -0,0 +1,10 @@
+--- main/term.c.orig	2024-10-17 16:00:41 UTC
++++ main/term.c
+@@ -46,6 +46,7 @@ static const char * const termpath[] = {
+ static char quitdata[80] = "";
+ 
+ static const char * const termpath[] = {
++	"%%LOCALBASE%%/share/terminfo",
+ 	"/usr/share/terminfo",
+ 	"/usr/local/share/misc/terminfo",
+ 	"/usr/lib/terminfo",
diff --git a/net/asterisk22/files/patch-menuselect_configure b/net/asterisk22/files/patch-menuselect_configure
new file mode 100644
index 000000000000..0bba133d6749
--- /dev/null
+++ b/net/asterisk22/files/patch-menuselect_configure
@@ -0,0 +1,11 @@
+--- menuselect/configure.orig	2022-06-23 15:26:13 UTC
++++ menuselect/configure
+@@ -5099,7 +5099,7 @@ else
+ printf "%s\n" "yes" >&6; }
+ 
+             PBX_LIBXML2=1
+-            LIBXML2_INCLUDE=$(echo ${LIBXML2_CFLAGS} | $SED -e "s|-std=c99||g")
++            LIBXML2_INCLUDE=$(echo ${LIBXML2_CFLAGS} | sed -e "s|-std=c99||g")
+             LIBXML2_LIB="$LIBXML2_LIBS"
+ 
+ printf "%s\n" "#define HAVE_LIBXML2 1" >>confdefs.h
diff --git a/net/asterisk22/files/patch-third-party_pjproject_Makefile b/net/asterisk22/files/patch-third-party_pjproject_Makefile
new file mode 100644
index 000000000000..dcfd4d618e80
--- /dev/null
+++ b/net/asterisk22/files/patch-third-party_pjproject_Makefile
@@ -0,0 +1,30 @@
+--- third-party/pjproject/Makefile.orig	2022-02-03 12:25:09 UTC
++++ third-party/pjproject/Makefile
+@@ -98,15 +98,11 @@ SHELL_ECHO_PREFIX := echo '[pjproject] '
+ 
+ _all: $(TARGETS)
+ 
+-$(DOWNLOAD_DIR)/$(TARBALL_FILE): ../versions.mak
+-	$(CMD_PREFIX) ($(TARBALL_EXISTS) && $(TARBALL_VERIFY) && touch $@) || (rm -rf $@ ;\
+-	$(TARBALL_DOWNLOAD)) || (rm -rf $@ ;\
+-	$(SHELL_ECHO_PREFIX) Retrying download ; $(TARBALL_DOWNLOAD))
++$(DOWNLOAD_DIR)/$(TARBALL_FILE):
++	@true
+ 
+ source/.unpacked: $(DOWNLOAD_DIR)/$(TARBALL_FILE)
+-	$(CMD_PREFIX) \
+-		$(TARBALL_VERIFY) || (rm -rf $@ ; $(SHELL_ECHO_PREFIX) Retrying download ; $(TARBALL_DOWNLOAD)) ;\
+-		$(SHELL_ECHO_PREFIX) Unpacking $< ;\
++	$(SHELL_ECHO_PREFIX) Unpacking $< ;\
+ 		rm -rf source pjproject-*/ $(REALLY_QUIET) || : ;\
+ 		$(TAR) -xjf $< ;\
+ 		mv pjproject-$(PJPROJECT_VERSION) source
+@@ -212,7 +208,7 @@ $(ALL_LIB_FILES): source/build.mak source/pjlib/includ
+ 
+ pjproject.symbols: $(ALL_LIB_FILES)
+ 	$(ECHO_PREFIX) Generating symbols
+-	$(CMD_PREFIX) $(NM) -Pog $(ALL_LIB_FILES) | $(SED) -n -E -e "s/.+: ([_]?[pP][jJ][^ ]+) .+/\1/gp" | sort -u > pjproject.symbols
++	$(CMD_PREFIX) $(NM) -Pog $(ALL_LIB_FILES) | $(SED) -n -r -e "s/^([pP][jJ][^ ]+) .+/\1/gp" | sort -u > pjproject.symbols
+ 
+ source/pjsip-apps/src/asterisk_malloc_debug.c: patches/asterisk_malloc_debug.c
+ 	$(ECHO_PREFIX) Copying $< to $@
diff --git a/net/asterisk22/files/patch-third-party_pjproject_Makefile.rules b/net/asterisk22/files/patch-third-party_pjproject_Makefile.rules
new file mode 100644
index 000000000000..e908a08b6511
--- /dev/null
+++ b/net/asterisk22/files/patch-third-party_pjproject_Makefile.rules
@@ -0,0 +1,20 @@
+--- third-party/pjproject/Makefile.rules.orig	2024-10-17 16:00:41 UTC
++++ third-party/pjproject/Makefile.rules
+@@ -7,7 +7,7 @@ PACKAGE_URL ?= https://raw.githubusercontent.com/aster
+ # PACKAGE_URL ?= http://www.pjsip.org/release/$(PJPROJECT_VERSION)
+ 
+ PACKAGE_URL ?= https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/$(PJPROJECT_VERSION)
+-TARBALL_FILE = pjproject-$(PJPROJECT_VERSION).tar.bz2
++TARBALL_FILE = pjsip-pjproject-$(PJPROJECT_VERSION)_GH0.tar.gz
+ 
+ # PJPROJECT_CONFIGURE_OPTS could come from the command line or could be
*** 492 LINES SKIPPED ***