Merge branch 'staged'
[dports.git] / net / asterisk18 / Makefile
1 PORTNAME=       asterisk
2 PORTVERSION=    18.19.0
3 CATEGORIES=     net
4 MASTER_SITES=   https://downloads.asterisk.org/pub/telephony/%SUBDIR%/:DEFAULT,g729
5 MASTER_SITE_SUBDIR=     asterisk/ \
6                         asterisk/old-releases/ \
7                         sounds/releases/:g729
8 PKGNAMESUFFIX=  18
9 DISTFILES=      ${DISTNAME}${EXTRACT_SUFX}
10 DIST_SUBDIR=    ${PORTNAME}
11 EXTRACT_ONLY:=  ${DISTNAME}${EXTRACT_SUFX}
12
13 MAINTAINER=     ports@FreeBSD.org
14 COMMENT=        Open Source PBX and telephony toolkit
15 WWW=            https://www.asterisk.org
16
17 LICENSE=        GPLv2
18 LICENSE_FILE=   ${WRKSRC}/LICENSE
19
20 LIB_DEPENDS=    libuuid.so:misc/e2fsprogs-libuuid \
21                 libjansson.so:devel/jansson
22
23 USES=           bison compiler:c11 cpe gmake gnome iconv libedit localbase \
24                 pkgconfig shebangfix sqlite ssl ncurses
25 CPE_VENDOR=     digium
26 USE_GITHUB=     nodefault
27 USE_GNOME=      libxml2
28 USE_LDCONFIG=   yes
29 USE_RC_SUBR=    asterisk
30
31 SHEBANG_FILES=  agi/agi-test.agi \
32                 agi/jukebox.agi \
33                 contrib/scripts/astversion
34
35 GNU_CONFIGURE=  yes
36 CONFIGURE_ARGS= --datarootdir=${DATADIR} \
37                 --with-ilbc=internal \
38                 --with-crypto=${OPENSSLBASE} \
39                 --with-ssl=${OPENSSLBASE} \
40                 --with-externals-cache=${DISTDIR}/${DIST_SUBDIR}
41
42 MAKE_ARGS+=     NOISY_BUILD=yes \
43                 ASTDATADIR=${DATADIR}
44 MAKE_ENV=       PTHREAD_LIBS="-lpthread" \
45                 MKDIR="${MKDIR}" \
46                 PWLIBDIR=${LOCALBASE}/share/pwlib \
47                 OSVERSION=${OSVERSION} \
48                 DOCSDIR=${DOCSDIR} \
49                 ASTCFLAGS="${CFLAGS}" \
50                 ASTLDFLAGS="${LDFLAGS}"
51
52 LDFLAGS+=       -L.
53
54 CONFLICTS=              ossp-uuid
55 CONFLICTS_BUILD=        linuxthreads
56 CONFLICTS_INSTALL=      asterisk13 asterisk16
57
58 USERS=  ${ASTERISK_USER}
59 GROUPS= ${ASTERISK_GROUP} dahdi
60
61 OPTIONS_DEFINE=                 ASTVERSION BACKTRACE CURL EXCHANGE FREETDS G729 LDAP LUA MACRO \
62                                 MP3PLAYER OOH323 OPTIMIZED_CFLAGS PJSIP PORTAUDIO RADIUS SNMP \
63                                 SPANDSP SRTP SYSINFO URIPARSER XMLDOC XMPP
64 OPTIONS_DEFINE_aarch64=         GEOLOCATION
65 OPTIONS_DEFINE_x86_64=          DAHDI GEOLOCATION
66 OPTIONS_DEFINE_i386=            DAHDI GEOLOCATION
67 OPTIONS_DEFINE_powerpc=         DAHDI
68 OPTIONS_DEFINE_powerpc64=       DAHDI
69 OPTIONS_DEFINE_powerpc64le=     DAHDI
70 OPTIONS_DEFINE_sparc64=         DAHDI
71 OPTIONS_DEFAULT=                CURL FREETDS GSM LUA MACRO MP3PLAYER NEWT ODBC OPUS MYSQL PGSQL \
72                                 PJSIP PORTAUDIO RADIUS SNMP SPANDSP SPEEX SRTP URIPARSER \
73                                 VORBIS XMLDOC
74 OPTIONS_DEFAULT_x86_64=         DAHDI XMPP
75 OPTIONS_DEFAULT_i386=           DAHDI XMPP
76 OPTIONS_DEFAULT_powerpc=        DAHDI XMPP
77 OPTIONS_DEFAULT_powerpc64=      DAHDI XMPP
78 OPTIONS_DEFAULT_powerpc64le=    DAHDI XMPP
79 OPTIONS_DEFAULT_sparc64=        DAHDI XMPP
80
81 OPTIONS_GROUP=                  CODECS DATABASE
82 OPTIONS_GROUP_CODECS=           GSM NEWG711 OPUS SPEEX VORBIS
83 OPTIONS_GROUP_DATABASE=         MYSQL ODBC PGSQL
84
85 OPTIONS_MULTI=                  MENU
86 OPTIONS_MULTI_MENU=             NCURSES NEWT
87 OPTIONS_SUB=            yes
88
89 ASTVERSION_DESC?= Install astversion (requires bash)
90 BACKTRACE_DESC?= Stack backtrace support via (lib)execinfo
91 CODECS_DESC=                    Encoder/Decoder (Codec) Support
92 DAHDI_DESC?=    DAHDI support
93 DATABASE_DESC=                  Database Support
94 EXCHANGE_DESC?= Exchange calendar support
95 G729_DESC?=     Install G.729 format sounds for Music-on-Hold (MoH)
96 GEOLOCATION_DESC?= Enable SIP Geolocation support
97 MACRO_DESC?=    Enable app_macro (deprecated)
98 MENU_DESC=                      Menuselect Interface Backend
99 MP3PLAYER_DESC= Install MP3 Player for Music-On-Hold (mpg123)
100 NEWG711_DESC?=  New G711 Codec
101 NEWT_DESC=                      Newt User Interface
102 OOH323_DESC?=   ooh323 support
103 OPUS_DESC?=     Opus Codec
104 PJSIP_DESC?=    Build the PJSIP based SIP channel
105 SRTP_DESC?=     SecureRTP support
106 SYSINFO_DESC?=  Use devel/libsysinfo to get system information
107 URIPARSER_DESC?= Use RFC 3986 compliant uriparser library
108 XMLDOC_DESC?=   Build and install XML documentation
109 XMPP_DESC?=     XMPP/GTALK support
110
111 ASTVERSION_RUN_DEPENDS=         bash:shells/bash
112
113 BACKTRACE_CONFIGURE_WITH=       execinfo
114
115 CURL_LIB_DEPENDS=       libcurl.so:ftp/curl
116 CURL_CONFIGURE_WITH=    libcurl
117
118 DAHDI_LIB_DEPENDS=      libpri.so:misc/libpri \
119                         libopenr2.so:misc/openr2 \
120                         libtonezone.so:misc/dahdi
121 DAHDI_CONFIGURE_WITH=   dahdi openr2
122
123 EXCHANGE_LIB_DEPENDS=   libneon.so:www/neon \
124                         libexpat.so:textproc/expat2
125 EXCHANGE_USES=          gettext-runtime
126 EXCHANGE_CONFIGURE_OFF= --without-neon --without-neon29
127
128 FREETDS_LIB_DEPENDS=    libsybdb.so:databases/freetds
129 FREETDS_CONFIGURE_ON=   --with-tds=${LOCALBASE}
130 FREETDS_CONFIGURE_OFF=  --without-tds
131
132 G729_DISTFILES=                 ${ASTERISK_CORE_G729_SOUNDS}:g729 \
133                                 ${ASTERISK_MOH_G729_SOUNDS}:g729
134
135 GEOLOCATION_USE=        GNOME=libxslt
136
137 GSM_LIB_DEPENDS=        libgsm.so:audio/gsm
138 GSM_CONFIGURE_WITH=     gsm
139
140 LDAP_USES=              ldap
141 LDAP_CONFIGURE_WITH=    ldap
142
143 LUA_USES=               lua
144 LUA_CONFIGURE_WITH=     lua
145 LUA_CFLAGS=             -I${LUA_INCDIR}
146 LUA_LDFLAGS=            -L${LUA_LIBDIR}
147
148 MP3PLAYER_RUN_DEPENDS=  mpg123:audio/mpg123
149
150 MYSQL_LIB_DEPENDS=      libzstd.so:archivers/zstd \
151                 libunwind.so:devel/libunwind
152 MYSQL_USES=             mysql
153 MYSQL_CONFIGURE_WITH=   mysqlclient
154
155 NCURSES_USES=           ncurses
156
157 NEWT_LIB_DEPENDS=       libnewt.so:devel/newt
158
159 ODBC_LIB_DEPENDS=       libodbc.so:databases/unixODBC \
160                         libltdl.so:devel/libltdl
161 ODBC_CONFIGURE_ON=      --with-ltdl
162 ODBC_CONFIGURE_WITH=    unixodbc
163
164 OPUS_EXTRACT_ONLY=      ${DISTFILE_opus}
165 OPUS_LIB_DEPENDS=       libopus.so:audio/opus
166 OPUS_GH_TUPLE=          traud:asterisk-opus:83e1b458c77e0e287adeca494eeb79edb077b0ff:opus
167
168 PGSQL_USES=             pgsql
169 PGSQL_CONFIGURE_WITH=   postgres
170
171 PJSIP_LIB_DEPENDS=      libsrtp2.so:net/libsrtp2 \
172                         libspeex.so:audio/speex \
173                         libspeexdsp.so:audio/speexdsp
174 PJSIP_GH_TUPLE=         pjsip:pjproject:${PJSIP_VERSION}:pjsip
175 PJSIP_CONFIGURE_WITH=   pjproject pjproject-bundled
176
177 PORTAUDIO_LIB_DEPENDS=  libportaudio.so:audio/portaudio
178 PORTAUDIO_CONFIGURE_WITH=       portaudio
179
180 RADIUS_LIB_DEPENDS=     libradiusclient-ng.so:net/radiusclient
181 RADIUS_CONFIGURE_WITH=  radius
182
183 SNMP_LIB_DEPENDS=       libnetsnmp.so:net-mgmt/net-snmp \
184                         libpkg.so:${PKG_ORIGIN}
185 SNMP_CONFIGURE_WITH=    netsnmp
186
187 SPANDSP_LIB_DEPENDS=    libspandsp.so:comms/spandsp \
188                         libtiff.so:graphics/tiff
189 SPANDSP_CONFIGURE_WITH= spandsp
190
191 SPEEX_LIB_DEPENDS=      libspeex.so:audio/speex \
192                         libspeexdsp.so:audio/speexdsp
193 SPEEX_CONFIGURE_WITH=   speex
194
195 SRTP_LIB_DEPENDS=       libsrtp2.so:net/libsrtp2
196 SRTP_CONFIGURE_WITH=    srtp
197
198 SYSINFO_LIB_DEPENDS=    libsysinfo.so:devel/libsysinfo
199
200 URIPARSER_LIB_DEPENDS=  liburiparser.so:net/uriparser
201 URIPARSER_CONFIGURE_WITH=       uriparser
202
203 VORBIS_LIB_DEPENDS=     libvorbis.so:audio/libvorbis \
204                         libogg.so:audio/libogg
205 VORBIS_CONFIGURE_WITH=  ogg
206
207 XMLDOC_CONFIGURE_ENABLE=        xmldoc
208
209 XMPP_LIB_DEPENDS=       libiksemel.so:textproc/iksemel
210 XMPP_CONFIGURE_WITH=    iksemel
211
212 ASTERISK_CORE_G729_SOUNDS=      asterisk-core-sounds-en-g729-1.5.tar.gz
213 ASTERISK_MOH_G729_SOUNDS=       asterisk-moh-opsound-g729-2.03.tar.gz
214 ASTERISK_USER?=         asterisk
215 ASTERISK_GROUP?=        asterisk
216
217 PJSIP_VERSION=  2.13.1
218
219 .include <bsd.port.options.mk>
220
221 .if ${OPSYS} == FreeBSD && ( ${OSVERSION} >= 1400079 || ( ${OSVERSION} >= 1302505 && ${OSVERSION} < 1400000 ))
222 USES+=          llvm:max=14
223 .endif
224
225 .include <bsd.port.pre.mk>
226
227 .if ( ${OPSYS} == FreeBSD && ${OSVERSION} >= 1400092 && ${SSL_DEFAULT} == base ) || ${SSL_DEFAULT:Mopenssl3*}
228 LIB_DEPENDS+=   libgnutls.so:security/gnutls
229 CFLAGS+=        -DOPENSSL_API_COMPAT=0x10100000L
230 LDFLAGS+=       -lgnutls
231 .endif
232
233 .if empty(ICONV_LIB)
234 CONFIGURE_ARGS+=ac_cv_lib_iconv_iconv_open=no \
235                 ac_cv_lib_iconv_libiconv_open=no
236 .endif
237
238 .if ${PREFIX} == ${LOCALBASE}
239 VARDIR=/var
240 .else
241 VARDIR=${PREFIX}/var
242 .endif
243
244 SUB_LIST+=      ASTERISK_USER=${ASTERISK_USER}
245 PLIST_SUB+=     ASTERISK_USER=${ASTERISK_USER} \
246                 ASTERISK_GROUP=${ASTERISK_GROUP} \
247                 VARDIR=${VARDIR}
248
249 .if ${PORT_OPTIONS:MGEOLOCATION}
250 .if ${ARCH} == i386
251 LLD_EMULATION=  elf_i386
252 .elif ${ARCH} == x86_64
253 LLD_EMULATION=  elf_x86_64
254 .elif ${ARCH} == aarch64
255 LLD_EMULATION=  aarch64elf
256 .endif
257 .endif
258
259 post-extract:
260         @${FIND} ${WRKSRC} -name '*.d' -delete
261
262 post-extract-G729-on:
263         ${CP} ${DISTDIR}/${DIST_SUBDIR}/${ASTERISK_CORE_G729_SOUNDS} ${WRKSRC}/sounds
264         ${CP} ${DISTDIR}/${DIST_SUBDIR}/${ASTERISK_MOH_G729_SOUNDS} ${WRKSRC}/sounds
265
266 post-extract-OPUS-on:
267         ${CP} ${WRKSRC_opus}/include/asterisk/* ${WRKSRC}/include/asterisk
268         ${CP} ${WRKSRC_opus}/codecs/* ${WRKSRC}/codecs
269         ${CP} ${WRKSRC_opus}/res/* ${WRKSRC}/res
270
271 post-patch:
272         @${REINPLACE_CMD} -e 's|/var/lib|${PREFIX}/share|g' ${WRKSRC}/configs/samples/musiconhold.conf.sample
273         @${REINPLACE_CMD} -e 's/@XMLSTARLET@//' ${WRKSRC}/makeopts.in
274         @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC}/main/term.c
275 .if exists(${FILESDIR}/.asterisk.makeopts)
276         ${CP} ${FILESDIR}/.asterisk.makeopts ${WRKSRC}/menuselect.makeopts
277 .endif
278
279 post-patch-GEOLOCATION-on:
280         @${REINPLACE_CMD} -e 's/%%LLD_EMULATION%%/${LLD_EMULATION}/' ${WRKSRC}/Makefile.rules
281
282 post-patch-SYSINFO-on:
283         @${REINPLACE_CMD} -e 's/%%LIBSYSINFO%%/-lsysinfo/' ${WRKSRC}/main/Makefile
284
285 post-patch-SYSINFO-off:
286         @${REINPLACE_CMD} -e '/#define HAVE_SYSINFO 1/d' ${WRKSRC}/configure
287         @${REINPLACE_CMD} -e '/%%LIBSYSINFO%%/d' ${WRKSRC}/main/Makefile
288
289 post-configure:
290         @cd ${WRKSRC} && ${MAKE_CMD} menuselect.makeopts
291         @cd ${WRKSRC} && ./menuselect/menuselect --disable res_timing_kqueue menuselect.makeopts
292         @cd ${WRKSRC} && ./menuselect/menuselect --enable chan_mgcp menuselect.makeopts
293         @cd ${WRKSRC} && ./menuselect/menuselect --enable res_pktccops menuselect.makeopts
294
295 post-configure-GEOLOCATION-on:
296         @cd ${WRKSRC} && ./menuselect/menuselect --enable res_geolocation menuselect.makeopts
297
298 post-configure-GEOLOCATION-off:
299         @cd ${WRKSRC} && ./menuselect/menuselect --disable res_geolocation menuselect.makeopts
300
301 post-configure-MACRO-on:
302         @cd ${WRKSRC} && ./menuselect/menuselect --enable app_macro menuselect.makeopts
303
304 post-configure-MYSQL-on:
305         @cd ${WRKSRC} && ./menuselect/menuselect --enable res_config_mysql menuselect.makeopts
306         @cd ${WRKSRC} && ./menuselect/menuselect --enable app_mysql menuselect.makeopts
307         @cd ${WRKSRC} && ./menuselect/menuselect --enable cdr_mysql menuselect.makeopts
308
309 post-configure-OOH323-on:
310         @cd ${WRKSRC} && ./menuselect/menuselect --enable chan_ooh323 menuselect.makeopts
311
312 post-configure-NEWG711-on:
313         @cd ${WRKSRC} && ./menuselect/menuselect --enable G711_NEW_ALGORITHM menuselect.makeopts
314
315 post-configure-OPTIMIZED_CFLAGS-off:
316         @cd ${WRKSRC} && ./menuselect/menuselect --disable BUILD_NATIVE menuselect.makeopts
317
318 post-configure-OPUS-on:
319         @cd ${WRKSRC} && ./menuselect/menuselect --enable codec_opus_open_source menuselect.makeopts
320
321 post-install:
322         @${RM} ${STAGEDIR}${ETCDIR}/*.conf ${STAGEDIR}${ETCDIR}/extensions.ael ${STAGEDIR}${ETCDIR}/extensions.lua
323         @${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/ast[a-f]* ${STAGEDIR}${PREFIX}/lib/*.so.* ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/modules/*.so ${STAGEDIR}${DATADIR}/agi-bin/eagi-*
324         ${FIND} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/modules -type f -name '*.so' | ${SED} "s,^${STAGEDIR}${PREFIX}/,," >> ${TMPPLIST}
325         ${FIND} ${STAGEDIR}${DATADIR}/sounds -type f | ${SED} "s,^${STAGEDIR}${DATADIR},${DATADIR}," >> ${TMPPLIST}
326         ${FIND} ${STAGEDIR}${DATADIR}/moh -type f | ${SED} "s,^${STAGEDIR}${DATADIR},${DATADIR}," >> ${TMPPLIST}
327
328         (cd ${STAGEDIR} && \
329                 ${ECHO} "@owner ${ASTERISK_USER}" >> ${TMPPLIST} && \
330                 ${ECHO} "@group ${ASTERISK_GROUP}" >> ${TMPPLIST} && \
331                 ${FIND} var/spool/${PORTNAME}/voicemail/default -type f | ${SED} "s,^,/," >> ${TMPPLIST} && \
332                 ${FIND} var/spool/${PORTNAME}/voicemail/ -type d | ${SED} "s,^,@dir /," >> ${TMPPLIST} && \
333                 ${ECHO} "@owner" >> ${TMPPLIST} && \
334                 ${ECHO} "@group" >> ${TMPPLIST});
335
336 post-install-ASTVERSION-off:
337         @${RM} ${STAGEDIR}${PREFIX}/sbin/astversion
338
339 .include <bsd.port.post.mk>