bridge_channel_write_frame: Check for NULL channel
[asterisk/asterisk.git] / configure.ac
1 AC_PREREQ(2.60a)
2
3 AC_INIT([asterisk], [trunk], [https://issues.asterisk.org])
4
5 # cross-compile macros
6 AC_CANONICAL_BUILD
7 AC_CANONICAL_HOST
8
9 # check existence of the package
10 AC_CONFIG_SRCDIR([main/asterisk.c])
11
12 AC_COPYRIGHT("Asterisk")
13
14 # preserve any CFLAGS or LDFLAGS that may be set
15 # NOTE: This must be done before calling any macros that end up
16 # calling AC_PROG_CC or the like, since they will set a default
17 # set of CFLAGS ("-g -O2") if the user did not supply any, and
18 # we don't want those default flags to be carried over into the
19 # rest of the build system since we have other means of controlling
20 # debugging symbol generation and optimization.
21 CONFIG_CFLAGS="${CFLAGS}"
22 CONFIG_LDFLAGS="${LDFLAGS}"
23 AC_SUBST(CONFIG_CFLAGS)
24 AC_SUBST(CONFIG_LDFLAGS)
25
26 # specify output header file
27 AC_CONFIG_HEADER(include/asterisk/autoconfig.h)
28
29 # Note: AC_PROG_CC *must* be specified before AC_USE_SYSTEM_EXTENSIONS or any
30 # other macro that uses the C compiler, or the default order will be used.
31 AC_PROG_CC([gcc cc])
32
33 AC_USE_SYSTEM_EXTENSIONS        dnl note- does not work on FreeBSD
34
35 # System default paths
36 AC_SUBST([astsbindir],        ['${sbindir}'])dnl
37 AC_SUBST([astcachedir],       ['${localstatedir}/cache/asterisk'])dnl
38 AC_SUBST([astetcdir],         ['${sysconfdir}/asterisk'])dnl
39 AC_SUBST([astheaderdir],      ['${includedir}/asterisk'])dnl
40 AC_SUBST([astlibdir],         ['${libdir}'])dnl
41 AC_SUBST([astmoddir],         ['${libdir}/asterisk/modules'])dnl
42 AC_SUBST([astmandir],         ['${mandir}'])dnl
43 AC_SUBST([astvarlibdir],      ['${localstatedir}/lib/asterisk'])dnl
44 AC_SUBST([astdatadir],        ['${astvarlibdir}'])dnl
45 AC_SUBST([astdbdir],          ['${astvarlibdir}'])dnl
46 AC_SUBST([astkeydir],         ['${astvarlibdir}'])dnl
47 AC_SUBST([astspooldir],       ['${localstatedir}/spool/asterisk'])dnl
48 AC_SUBST([astlogdir],         ['${localstatedir}/log/asterisk'])dnl
49 AC_SUBST([astvarrundir],      ['${localstatedir}/run/asterisk'])dnl
50
51 case "${host_os}" in
52      *bsd*)
53      if test ${prefix} != 'NONE'; then
54         astvarlibdir='${prefix}/share/asterisk'
55         astdbdir='${localstatedir}/db/asterisk'
56      fi
57      ;;
58      darwin*)
59      if test ${prefix} = 'NONE'; then
60         astvarrundir='/Library/Application Support/Asterisk/Run'
61      fi
62      ;;
63 esac
64
65 case "${host_os}" in
66      netbsd*)
67      ac_default_prefix=/usr/pkg
68      CPPFLAGS=-I/usr/pkg/include
69      LDFLAGS=-L/usr/pkg/lib
70      ;;
71      dragonfly*|freebsd*)
72      ac_default_prefix=/usr/local
73      CPPFLAGS=-I/usr/local/include
74      LDFLAGS=-L/usr/local/lib
75      ;;
76      openbsd*)
77      ac_default_prefix=/usr/local
78      if test ${prefix} = '/usr/local' || test ${prefix} = 'NONE'; then
79         if test ${sysconfdir} = '${prefix}/etc'; then
80            astetcdir=/etc/asterisk
81         fi
82         if test ${mandir} = '${prefix}/man'; then
83            astmandir=/usr/share/man
84         fi
85      fi
86      CPPFLAGS=-I/usr/local/include
87      LDFLAGS=-L/usr/local/lib
88      ;;
89      darwin*)
90      ac_default_prefix=/usr/local
91      if test ${prefix} = 'NONE'; then
92         astmoddir='/Library/Application Support/Asterisk/Modules'
93         astvarlibdir='/Library/Application Support/Asterisk'
94         astlogdir=/Library/Logs/Asterisk
95         astvarrundir='/Library/Application Support/Asterisk/Run'
96      fi
97      AC_DEFINE([AST_POLL_COMPAT], 1, [Define to 1 if internal poll should be used.])
98      AC_DEFINE([_DARWIN_UNLIMITED_SELECT], 1, [Define to 1 if running on Darwin.])
99      ;;
100      solaris*)
101      if test ${prefix} = 'NONE'; then
102         astcachedir=/var/cache/asterisk
103         astetcdir=/var/etc/asterisk
104         astsbindir=/opt/asterisk/sbin
105         astlibdir=/opt/asterisk/lib
106         astmoddir=/opt/asterisk/lib/modules
107         astheaderdir=/opt/asterisk/include
108         astmandir=/opt/asterisk/man
109         astvarlibdir=/var/opt/asterisk
110         astspooldir=/var/spool/asterisk
111         astlogdir=/var/log/asterisk
112         astvarrundir=/var/run/asterisk
113      fi
114      ;;
115      *)
116      ac_default_prefix=/usr
117      if test ${prefix} = '/usr' || test ${prefix} = 'NONE'; then
118         if test ${sysconfdir} = '${prefix}/etc'; then
119            sysconfdir=/etc
120         fi
121         if test ${mandir} = '${prefix}/man'; then
122            mandir=/usr/share/man
123         fi
124      fi
125      ;;
126 esac
127
128 if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then
129      if test ${localstatedir} = '${prefix}/var'; then
130         localstatedir=/var
131      fi
132 fi
133
134 BUILD_PLATFORM=${build}
135 BUILD_CPU=${build_cpu}
136 BUILD_VENDOR=${build_vendor}
137 BUILD_OS=${build_os}
138
139 AC_SUBST(BUILD_PLATFORM)
140 AC_SUBST(BUILD_CPU)
141 AC_SUBST(BUILD_VENDOR)
142 AC_SUBST(BUILD_OS)
143
144 HOST_PLATFORM=${host}
145 HOST_CPU=${host_cpu}
146 HOST_VENDOR=${host_vendor}
147 HOST_OS=${host_os}
148
149 AC_SUBST(HOST_PLATFORM)
150 AC_SUBST(HOST_CPU)
151 AC_SUBST(HOST_VENDOR)
152 AC_SUBST(HOST_OS)
153
154 PBX_WINARCH=0
155
156 case "${host_os}" in
157      dragonfly*|freebsd*)
158      OSARCH=FreeBSD
159      ;;
160      netbsd*)
161      OSARCH=NetBSD
162      ;;
163      openbsd*)
164      OSARCH=OpenBSD
165      ;;
166      solaris*)
167      OSARCH=SunOS
168      ;;
169      mingw32)
170      OSARCH=mingw32
171      PBX_WINARCH=1
172      ;;
173      cygwin)
174      OSARCH=cygwin
175      PBX_WINARCH=1
176      ;;
177      linux-gnu*)
178      OSARCH=linux-gnu
179      ;;
180      linux-musl*)
181      OSARCH=linux-musl
182      ;;
183      kfreebsd*-gnu)
184      OSARCH=kfreebsd-gnu
185      ;;
186      *)
187      OSARCH=${host_os}
188      ;;
189 esac
190
191 AC_SUBST(OSARCH)
192 AC_SUBST(PBX_WINARCH)
193
194 AC_MSG_CHECKING(whether char is unsigned)
195 AC_COMPILE_IFELSE(
196         [
197                 AC_LANG_SOURCE(
198 #include <limits.h>
199 #if CHAR_MIN == 0
200 #error
201 #endif
202                 )
203         ],[
204                 AC_MSG_RESULT(no)
205                 CONFIG_SIGNED_CHAR=""
206         ],[
207                 AC_MSG_RESULT(yes)
208                 CONFIG_SIGNED_CHAR="-fsigned-char"
209         ]
210 )
211 AC_SUBST(CONFIG_SIGNED_CHAR)
212
213 #  check for uname
214 AC_PATH_TOOL([UNAME], [uname], No)
215 if test ! x"${UNAME}" = xNo; then
216    PBX_OSREV=$(${UNAME} -r)
217 fi
218 AC_SUBST(PBX_OSREV)
219
220 AH_TOP([#ifndef ASTERISK_AUTOCONFIG_H
221 #define ASTERISK_AUTOCONFIG_H
222 /* IWYU pragma: private, include "asterisk.h" */
223
224 #include "asterisk/buildopts.h" /* IWYU pragma: export */])
225
226 AH_BOTTOM([#endif       /* ASTERISK_AUTOCONFIG_H */])
227
228 # cross-compile checks
229 if test "${cross_compiling}" = "yes";
230 then
231    AC_CHECK_TOOL(CC, gcc, :)
232    AC_CHECK_TOOL(CXX, g++, :)
233    AC_CHECK_TOOL(LD, ld, :)
234    AC_CHECK_TOOL(RANLIB, ranlib, :)
235    CROSS_COMPILING=1
236    AC_SUBST(CROSS_COMPILING)
237 fi
238
239 # Checks for programs.
240 AC_PROG_CXX
241 AC_PROG_CPP
242 AC_PROG_CXXCPP
243 # This macro is just copied into our local acinclude.m4 from libtool.m4 so that
244 # the developers regenerating the configure script don't have to install libtool.
245 AST_PROG_LD     # note, does not work on FreeBSD
246 AC_PROG_AWK
247 AC_PROG_INSTALL
248 AC_PROG_LN_S
249 AC_PROG_RANLIB
250 AST_CHECK_GNU_MAKE
251 AC_PROG_EGREP
252
253 AC_CHECK_TOOLS([STRIP], [strip gstrip], :)
254 AC_CHECK_TOOLS([AR], [ar gar], :)
255
256 GNU_LD=0
257 if test "x$with_gnu_ld" = "xyes" ; then
258    GNU_LD=1
259 fi
260 AC_SUBST(GNU_LD)
261
262 AC_PATH_PROG([BISON], [bison], :)
263 AC_PATH_PROG([CMP], [cmp], :)
264 AC_PATH_PROG([CAT], [cat], :)
265 AC_PATH_PROG([CUT], [cut], :)
266 AC_PATH_PROG([FLEX], [flex], :)
267 AC_PATH_PROG([GREP], [grep], :)
268 AC_PATH_PROGS([PYTHON], [python2.7 python2 python python3], :)
269 AC_PATH_PROG([FIND], [find], :)
270 AC_PATH_PROG([BASENAME], [basename], :)
271 AC_PATH_PROG([DIRNAME], [dirname], :)
272 AC_PATH_PROG([SHELL], [sh], :)
273 AC_PATH_PROG([LN], [ln], :)
274 AC_PATH_PROG([DOXYGEN], [doxygen], :)
275 AC_PATH_PROG([DOT], [dot], :)
276 AC_PATH_PROG([WGET], [wget], :)
277 AC_PATH_PROG([CURL], [curl], :)
278 AC_PATH_PROG([XMLLINT], [xmllint], :)
279 AC_PATH_PROGS([XMLSTARLET], [xmlstarlet xml], :)
280 AC_PATH_PROG([BASH], [bash], :)
281 AC_PATH_PROG([GIT], [git], :)
282 AC_PATH_PROG([ALEMBIC], [alembic], :)
283 AC_PATH_PROG([BZIP2], [bzip2], :)
284 AC_PATH_PROG([TAR], [tar], :)
285 AC_PATH_PROG([PATCH], [patch], :)
286 AC_PATH_PROG([SED], [sed], :)
287 AC_PATH_PROG([NM], [nm], :)
288
289 DOWNLOAD=":"
290 DOWNLOAD_TO_STDOUT=
291 DOWNLOAD_TIMEOUT=
292 if test "${WGET}" != ":" ; then
293   DOWNLOAD=${WGET}
294   DOWNLOAD_TO_STDOUT="${WGET} -q -O-"
295   DOWNLOAD_TIMEOUT='--timeout=$1'
296 elif test "${CURL}" != ":" ; then
297   DOWNLOAD="${CURL} -O --progress-bar -w \"%{url_effective}\n\""
298   DOWNLOAD_TO_STDOUT="${CURL} -Ls"
299   DOWNLOAD_TIMEOUT='--max-time $(or $2,$1)'
300 else
301   AC_PATH_PROG([FETCH], [fetch], :)
302   if test "${FETCH}" != ":" ; then
303     DOWNLOAD=${FETCH}
304     DOWNLOAD_TO_STDOUT="${FETCH} -o-"
305     DOWNLOAD_TIMEOUT='--timeout=$(or $2,$1)'
306   fi
307 fi
308 AC_SUBST(DOWNLOAD)
309 AC_SUBST(DOWNLOAD_TO_STDOUT)
310 AC_SUBST(DOWNLOAD_TIMEOUT)
311
312 AC_PATH_PROG([LDCONFIG], [ldconfig], :)
313 AC_PATH_PROG([SHA1SUM], [sha1sum], $ac_aux_dir/build_tools/sha1sum-sh)
314 AC_PATH_PROG([OPENSSL], [openssl], :)
315
316 AC_CACHE_CHECK([for bison that supports parse-param], [ac_cv_path_BISON2], [
317         if test "x$BISON" != "x:" ; then
318                 # Create a temporary directory $tmp in $TMPDIR (default /tmp).
319                 # Use mktemp if possible; otherwise fall back on mkdir,
320                 # with $RANDOM to make collisions less likely.
321                 : ${TMPDIR=/tmp}
322                 {
323                   tmp=`
324                     (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
325                   ` &&
326                   test -n "$tmp" && test -d "$tmp"
327                 } || {
328                   tmp=$TMPDIR/foo$$-$RANDOM
329                   (umask 077 && mkdir "$tmp")
330                 } || exit $?
331                 cat >$tmp/test.y <<__EOL__
332 %parse-param {struct parse_io *parseio}
333 %%
334 file : { \$\$ = parseio->pval = 1; }
335         ;
336 %%
337 __EOL__
338                 ${BISON} -o ${tmp}/test.tab.c ${tmp}/test.y >/dev/null 2>&1
339                 if test -e "${tmp}/test.tab.c"; then
340                         ac_cv_path_BISON2=${BISON}
341                 fi
342                 rm -rf ${tmp}
343         fi
344         ])
345 if test "x${ac_cv_path_BISON2}" = "x" ; then
346         BISON=:
347         PBX_BISON=0
348 else
349         PBX_BISON=1
350 fi
351 AC_SUBST(PBX_BISON)
352 if test "x${FLEX}" = "x:" ; then
353         PBX_FLEX=0
354 else
355         PBX_FLEX=1
356 fi
357 AC_SUBST(PBX_FLEX)
358
359 if test "x${XMLSTARLET}" = "x:" ; then
360         PBX_XMLSTARLET=0
361 else
362         PBX_XMLSTARLET=1
363 fi
364 AC_SUBST(PBX_XMLSTARLET)
365
366 if test "x${BASH}" = "x:" ; then
367         PBX_BASH=0
368 else
369         PBX_BASH=1
370 fi
371 AC_SUBST(PBX_BASH)
372
373 AC_CHECK_TOOL([SOXMIX], [soxmix], [:])
374 if test "${SOXMIX}" != ":" ; then
375         AC_DEFINE([HAVE_SOXMIX], 1, [Define to 1 if your system has soxmix application.])
376 fi
377
378 AC_CHECK_PROGS([MD5], [md5 md5sum gmd5sum digest])
379
380 if test "${MD5}" = "digest" ; then
381    MD5="${MD5} -a md5"
382 fi
383
384 AX_PTHREAD
385
386 AC_LANG(C)
387
388 PBX_NO_BINARY_MODULES=0
389 AC_ARG_ENABLE([binary-modules],
390         [AS_HELP_STRING([--disable-binary-modules],
391                 [Block installation of binary modules.])],
392         [case "${enableval}" in
393               y|ye|yes) PBX_NO_BINARY_MODULES=0 ;;
394               n|no)  PBX_NO_BINARY_MODULES=1 ;;
395               *) AC_MSG_ERROR(bad value ${enableval} for --disable-binary-modules)  ;;
396         esac])
397 AC_SUBST(PBX_NO_BINARY_MODULES)
398
399 AC_ARG_ENABLE([dev-mode],
400         [AS_HELP_STRING([--enable-dev-mode],
401                 [Turn on developer mode])],
402         [case "${enableval}" in
403               y|ye|yes) AST_DEVMODE=yes ;;
404               n|no)  AST_DEVMODE=no ;;
405               noisy)
406               AST_DEVMODE=yes
407               NOISY_BUILD=yes
408               ;;
409               strict)
410               AST_DEVMODE=yes
411               AST_DEVMODE_STRICT=yes
412               ;;
413               *) AC_MSG_ERROR(bad value ${enableval} for --enable-dev-mode)  ;;
414         esac])
415 AC_SUBST(NOISY_BUILD)
416 AC_SUBST(AST_DEVMODE)
417 AC_SUBST(AST_DEVMODE_STRICT)
418
419 AST_OPTION_ONLY([download-cache], [AST_DOWNLOAD_CACHE], [cached sound AND external module tarfiles], [])
420 AST_OPTION_ONLY([sounds-cache], [SOUNDS_CACHE_DIR], [cached sound tarfiles], [])
421 AST_OPTION_ONLY([externals-cache], [EXTERNALS_CACHE_DIR], [cached external module tarfiles], [])
422
423 AST_CODE_COVERAGE=no
424 AC_ARG_ENABLE([coverage],
425         [AS_HELP_STRING([--enable-coverage],
426                 [Turn on code coverage tracking (for gcov)])],
427         [case "${enableval}" in
428               y|ye|yes) AST_CODE_COVERAGE=yes ;;
429               n|no) AST_CODE_COVERAGE=no ;;
430               *) AC_MSG_ERROR(bad value ${enableval} for --enable-coverage)  ;;
431         esac])
432 AC_SUBST(AST_CODE_COVERAGE)
433
434 AST_CHECK_RAII()
435 AST_CHECK_STRSEP_ARRAY_BOUNDS()
436
437 JANSSON_BUNDLED=no
438 AC_ARG_WITH([jansson-bundled],
439         [AS_HELP_STRING([--with-jansson-bundled],
440                 [Use bundled jansson library])],
441         [case "${withval}" in
442                 y|yes) JANSSON_BUNDLED=yes ;;
443                 *) JANSSON_BUNDLED=no ;;
444         esac])
445
446 PJPROJECT_BUNDLED=yes
447 AH_TEMPLATE(m4_bpatsubst([[HAVE_PJPROJECT_BUNDLED]], [(.*)]), [Define to 1 when using the bundled pjproject.])
448
449 AC_ARG_WITH([pjproject-bundled],
450         [AS_HELP_STRING([--with-pjproject-bundled],
451                 [Use bundled pjproject libraries (default)])],
452         [case "${withval}" in
453               n|no) PJPROJECT_BUNDLED=no ;;
454               *) PJPROJECT_BUNDLED=yes ;;
455         esac])
456
457 if test "${with_pjproject}" == "no" || test "${with_pjproject}" == "n" ; then
458         PJPROJECT_BUNDLED=no
459 fi
460
461 THIRD_PARTY_CONFIGURE()
462
463 # AST_EXT_LIB_SETUP is used to tell configure to handle variables for
464 # various packages.
465 # $1 is the prefix for the variables in makeopts and autoconfig.h
466 # $2 is the short comment, $4 is the long comment
467 # $3 is the name used in --with- or --without- flags for configure.
468 #
469 # Package option names should be in alphabetical order
470 # by the --with option name (the third field),
471 # to make things easier for the users.
472
473 AST_EXT_LIB_SETUP([ALSA], [Advanced Linux Sound Architecture], [asound])
474 AST_EXT_LIB_SETUP([BFD], [Debug symbol decoding], [bfd])
475
476 # BKTR is used for backtrace support on platforms that do not
477 # have it natively.
478 AST_EXT_LIB_SETUP([BKTR], [Stack Backtrace], [execinfo])
479 AST_EXT_LIB_SETUP([BLUETOOTH], [Bluetooth], [bluetooth])
480 AST_EXT_LIB_SETUP([CAP], [POSIX 1.e capabilities], [cap])
481 AST_EXT_LIB_SETUP([CODEC2], [Codec 2 Audio Decoder/Encoder], [codec2])
482 AST_EXT_LIB_SETUP([COROSYNC], [Corosync], [cpg])
483 AST_EXT_LIB_SETUP_OPTIONAL([COROSYNC_CFG_STATE_TRACK], [A callback only in corosync 1.x], [COROSYNC], [cfg])
484 AST_EXT_LIB_SETUP([CRYPT], [password and data encryption], [crypt])
485 AST_EXT_LIB_SETUP([CRYPTO], [OpenSSL Cryptography], [crypto])
486 AST_EXT_LIB_SETUP_OPTIONAL([OPENSSL_SRTP], [OpenSSL SRTP Extension Support], [CRYPTO], [crypto])
487 AST_EXT_LIB_SETUP_OPTIONAL([OPENSSL_BIO_METHOD], [OpenSSL BIO Method Support], [CRYPTO], [crypto])
488 AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi])
489 AST_EXT_LIB_SETUP([FFMPEG], [Ffmpeg and avcodec], [avcodec])
490 AST_EXT_LIB_SETUP([GSM], [External GSM], [gsm], [, use 'internal' GSM otherwise])
491 AST_EXT_LIB_SETUP([ILBC], [System iLBC], [ilbc], [, use 'internal' iLBC otherwise])
492 AST_EXT_LIB_SETUP([GTK2], [gtk2], [gtk2])
493 AST_EXT_LIB_SETUP([GMIME], [GMime], [gmime])
494 AST_EXT_LIB_SETUP([HOARD], [Hoard Memory Allocator], [hoard])
495 AST_EXT_LIB_SETUP([ICAL], [iCal], [ical])
496 AST_EXT_LIB_SETUP([ICONV], [Iconv], [iconv])
497 AST_EXT_LIB_SETUP([IKSEMEL], [Iksemel Jabber], [iksemel])
498 AST_EXT_LIB_SETUP([IMAP_TK], [UW IMAP Toolkit], [imap])
499 AST_EXT_LIB_SETUP([INOTIFY], [inotify support], [inotify])
500 AST_EXT_LIB_SETUP([IODBC], [iODBC], [iodbc])
501 AST_EXT_LIB_SETUP([ISDNNET], [ISDN4Linux], [isdnnet])
502 AST_EXT_LIB_SETUP([JACK], [Jack Audio Connection Kit], [jack])
503 AST_EXT_LIB_SETUP([JANSSON], [Jansson JSON library], [jansson])
504 AST_EXT_LIB_SETUP([URIPARSER], [uriparser library], [uriparser])
505 AST_EXT_LIB_SETUP([KQUEUE], [kqueue support], [kqueue])
506 AST_EXT_LIB_SETUP([LDAP], [OpenLDAP], [ldap])
507 AST_LIBCURL_CHECK_CONFIG([], [7.10.1])
508 AST_EXT_LIB_SETUP([LIBEDIT], [NetBSD Editline library], [libedit])
509 AST_EXT_LIB_SETUP_OPTIONAL([LIBEDIT_IS_UNICODE], [Libedit compiled for unicode], [LIBEDIT], [libedit])
510 AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2])
511 AST_EXT_LIB_SETUP([LIBXSLT], [LibXSLT], [libxslt])
512 AST_EXT_LIB_SETUP_OPTIONAL([LIBXSLT_CLEANUP], [LibXSLT Library Cleanup Function], [LIBXSLT], [libxslt])
513 AST_EXT_LIB_SETUP([LUA], [Lua], [lua])
514 AC_ARG_VAR([LUA_VERSIONS],[A space separated list of target lua versions to test.])
515 AST_EXT_LIB_SETUP([MISDN], [mISDN user], [misdn])
516 AST_EXT_LIB_SETUP([MYSQLCLIENT], [MySQL client], [mysqlclient])
517 AST_EXT_LIB_SETUP([NBS], [Network Broadcast Sound], [nbs])
518 AST_EXT_LIB_SETUP([NEON], [neon], [neon])
519 AST_EXT_LIB_SETUP([NEON29], [neon29], [neon29])
520 AST_EXT_LIB_SETUP([NETSNMP], [Net-SNMP], [netsnmp])
521 AST_EXT_LIB_SETUP([NEWT], [newt], [newt])
522 AST_EXT_LIB_SETUP([OGG], [OGG], [ogg])
523 AST_EXT_LIB_SETUP([OPENR2], [MFR2], [openr2])
524 AST_EXT_LIB_SETUP([OPUS], [Opus], [opus])
525 AST_EXT_LIB_SETUP([OPUSFILE], [Opusfile], [opusfile])
526 AST_EXT_LIB_SETUP([OSPTK], [OSP Toolkit], [osptk])
527 AST_EXT_LIB_SETUP([OSS], [Open Sound System], [oss])
528 AST_EXT_LIB_SETUP([PGSQL], [PostgreSQL], [postgres])
529 AST_EXT_LIB_SETUP([BEANSTALK], [Beanstalk Job Queue], [beanstalk])
530
531 if test "x${PBX_PJPROJECT}" != "x1" ; then
532 AST_EXT_LIB_SETUP([PJPROJECT], [PJPROJECT], [pjproject])
533 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_DLG_CREATE_UAS_AND_INC_LOCK], [PJSIP Dialog Create UAS with Incremented Lock], [PJPROJECT], [pjsip])
534 AST_EXT_LIB_SETUP_OPTIONAL([PJ_TRANSACTION_GRP_LOCK], [PJSIP Transaction Group Lock Support], [PJPROJECT], [pjsip])
535 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_REPLACE_MEDIA_STREAM], [PJSIP Media Stream Replacement Support], [PJPROJECT], [pjsip])
536 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_GET_DEST_INFO], [pjsip_get_dest_info support], [PJPROJECT], [pjsip])
537 AST_EXT_LIB_SETUP_OPTIONAL([PJ_SSL_CERT_LOAD_FROM_FILES2], [pj_ssl_cert_load_from_files2 support], [PJPROJECT], [pjsip])
538 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_EXTERNAL_RESOLVER], [PJSIP External Resolver Support], [PJPROJECT], [pjsip])
539 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_TLS_TRANSPORT_PROTO], [PJSIP TLS Transport proto field support], [PJPROJECT], [pjsip])
540 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_EVSUB_GRP_LOCK], [PJSIP EVSUB Group Lock support], [PJPROJECT], [pjsip])
541 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_INV_SESSION_REF], [PJSIP INVITE Session Reference Count support], [PJPROJECT], [pjsip])
542 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_AUTH_CLT_DEINIT], [pjsip_auth_clt_deinit support], [PJPROJECT], [pjsip])
543 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_TSX_LAYER_FIND_TSX2], [pjsip_tsx_layer_find_tsx2 support], [PJPROJECT], [pjsip])
544 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_INV_ACCEPT_MULTIPLE_SDP_ANSWERS], [PJSIP INVITE Accept Multiple SDP Answers], [PJPROJECT], [pjsip])
545 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_ENDPOINT_COMPACT_FORM], [PJSIP Compact Form Support on Endpoint], [PJPROJECT], [pjsip])
546 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_TRANSPORT_DISABLE_CONNECTION_REUSE], [PJSIP Transport Connection Reuse Disabling], [PJPROJECT], [pjsip])
547 AST_EXT_LIB_SETUP_OPTIONAL([PJSIP_OAUTH_AUTHENTICATION], [PJSIP OAuth Authentication Support], [PJPROJECT], [pjsip])
548 fi
549
550 AST_EXT_LIB_SETUP([POPT], [popt], [popt])
551 AST_EXT_LIB_SETUP([PORTAUDIO], [PortAudio], [portaudio])
552 AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
553 AST_EXT_LIB_SETUP_OPTIONAL([PRI_SETUP_ACK_INBAND], [ISDN PRI progress inband ie in SETUP ACK], [PRI], [pri])
554 AST_EXT_LIB_SETUP_OPTIONAL([PRI_L2_PERSISTENCE], [ISDN Layer 2 persistence option], [PRI], [pri])
555 AST_EXT_LIB_SETUP_OPTIONAL([PRI_DATETIME_SEND], [ISDN PRI Date/time ie send policy], [PRI], [pri])
556 AST_EXT_LIB_SETUP_OPTIONAL([PRI_MWI_V2], [ISDN PRI Message Waiting Indication (Fixed)], [PRI], [pri])
557 AST_EXT_LIB_SETUP_OPTIONAL([PRI_DISPLAY_TEXT], [ISDN PRI user display text IE contents during call], [PRI], [pri])
558 AST_EXT_LIB_SETUP_OPTIONAL([PRI_MWI], [ISDN PRI Message Waiting Indication], [PRI], [pri])
559 AST_EXT_LIB_SETUP_OPTIONAL([PRI_MCID], [ISDN PRI Malicious Call ID], [PRI], [pri])
560 AST_EXT_LIB_SETUP_OPTIONAL([PRI_CALL_WAITING], [ISDN PRI call waiting supplementary service], [PRI], [pri])
561 AST_EXT_LIB_SETUP_OPTIONAL([PRI_AOC_EVENTS], [ISDN PRI advice of charge supplementary service events], [PRI], [pri])
562 AST_EXT_LIB_SETUP_OPTIONAL([PRI_TRANSFER], [ISDN PRI call transfer supplementary service], [PRI], [pri])
563 AST_EXT_LIB_SETUP_OPTIONAL([PRI_CCSS], [ISDN PRI call completion supplementary service], [PRI], [pri])
564 AST_EXT_LIB_SETUP_OPTIONAL([PRI_HANGUP_FIX], [ISDN PRI hangup fix], [PRI], [pri])
565 AST_EXT_LIB_SETUP_OPTIONAL([PRI_SUBADDR], [ISDN PRI subaddressing], [PRI], [pri])
566 AST_EXT_LIB_SETUP_OPTIONAL([PRI_CALL_HOLD], [ISDN PRI call hold], [PRI], [pri])
567 AST_EXT_LIB_SETUP_OPTIONAL([PRI_CALL_REROUTING], [ISDN PRI call rerouting and call deflection], [PRI], [pri])
568 AST_EXT_LIB_SETUP_OPTIONAL([PRI_SETUP_KEYPAD], [ISDN PRI keypad facility in SETUP], [PRI], [pri])
569 # ------------------------------------v
570 # TODO: The code can be changed to always include these features now.
571 # These features will always be present if pri_connected_line_update is available.
572 AST_EXT_LIB_SETUP_OPTIONAL([PRI_INBANDDISCONNECT], [ISDN PRI set_inbanddisconnect], [PRI], [pri])
573 AST_EXT_LIB_SETUP_OPTIONAL([PRI_PROG_W_CAUSE], [ISDN progress with cause], [PRI], [pri])
574 AST_EXT_LIB_SETUP_OPTIONAL([PRI_SERVICE_MESSAGES], [ISDN service messages], [PRI], [pri])
575 AST_EXT_LIB_SETUP_OPTIONAL([PRI_REVERSE_CHARGE], [ISDN reverse charge], [PRI], [pri])
576 # ------------------------------------^
577 AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
578 AST_EXT_LIB_SETUP([FFTW3], [LIBFFTW3], [fftw3])
579 AST_EXT_LIB_SETUP([RESAMPLE], [LIBRESAMPLE], [resample])
580 AST_EXT_LIB_SETUP([SNDFILE], [libsndfile], [sndfile])
581 AST_EXT_LIB_SETUP([SDL], [Sdl], [sdl])
582 AST_EXT_LIB_SETUP([SDL_IMAGE], [Sdl Image], [SDL_image])
583 AST_EXT_LIB_SETUP([SPANDSP], [SPANDSP], [spandsp])
584 AST_EXT_LIB_SETUP([SS7], [ISDN SS7], [ss7])
585 AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
586 AST_EXT_LIB_SETUP([SPEEX_PREPROCESS], [Speex preprocess routines], [speex])
587 AST_EXT_LIB_SETUP([SPEEXDSP], [SpeexDSP], [speexdsp])
588 AST_EXT_LIB_SETUP_DEPENDENT([SPEEX_PREPROCESS], [speex_preprocess_ctl], [], [speex])
589 AST_EXT_LIB_SETUP([SQLITE], [SQLite], [sqlite])
590 AST_EXT_LIB_SETUP([SQLITE3], [SQLite], [sqlite3])
591 AST_EXT_LIB_SETUP([SRTP], [Secure RTP], [srtp])
592 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_256], [SRTP Library AES-256 (ICM)], [SRTP], [srtp])
593 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_192], [SRTP Library AES-192 (ICM)], [SRTP], [srtp])
594 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GCM], [SRTP Library AES-128 (GCM) and AES-256 (GCM)], [SRTP], [srtp])
595 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_SHUTDOWN], [SRTP Library Shutdown Function], [SRTP], [srtp])
596 AST_EXT_LIB_SETUP_OPTIONAL([SRTP_GET_VERSION], [SRTP Library Version Function], [SRTP], [srtp])
597 AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer], [ssl])
598 AST_EXT_LIB_SETUP_OPTIONAL([RT], [Realtime functions], [rt])
599 AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
600 AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
601 AST_EXT_LIB_SETUP([TIMERFD], [timerfd], [timerfd])
602 AST_EXT_LIB_SETUP([TONEZONE], [tonezone], [tonezone])
603 AST_EXT_LIB_SETUP([UNBOUND], [unbound], [unbound])
604 AST_EXT_LIB_SETUP([UNIXODBC], [unixODBC], [unixodbc])
605 AST_EXT_LIB_SETUP([VORBIS], [Vorbis], [vorbis])
606 AST_EXT_LIB_SETUP([VPB], [Voicetronix API], [vpb])
607 AST_EXT_LIB_SETUP([X11], [X11], [x11])
608 AST_EXT_LIB_SETUP([ZLIB], [zlib compression], [z])
609
610 # check for basic system features and functionality before
611 # checking for package libraries
612
613 AC_FUNC_ALLOCA
614 AC_HEADER_DIRENT
615 if test -z $ac_header_dirent -o "$ac_header_dirent" = "no"; then
616   AC_MSG_ERROR([*** Could not find dirent header that defines 'DIR'.])
617 fi
618
619 AC_HEADER_SYS_WAIT
620 if test "$ac_cv_header_sys_wait_h" != "yes"; then
621   AC_MSG_ERROR([*** POSIX.1 compatible sys/wait.h is required.])
622 fi
623
624 AC_HEADER_RESOLV
625 if test "$ac_cv_header_resolv_h" != "yes"; then
626   AC_MSG_ERROR([*** resolv.h is required.])
627 fi
628
629 # Check for headers that are unconditionally required on all platforms.  Do not use
630 # this to check for headers that are only needed by modules.
631 AC_CHECK_HEADERS([ \
632   arpa/nameser.h assert.h ctype.h dlfcn.h errno.h fcntl.h float.h grp.h \
633   inttypes.h limits.h locale.h math.h pwd.h netinet/in.h regex.h \
634   sched.h stdarg.h stdint.h stdio.h stdlib.h string.h syslog.h \
635   sys/file.h sys/ioctl.h sys/param.h sys/resource.h sys/socket.h sys/stat.h \
636   sys/time.h sys/types.h sys/un.h \
637   termios.h time.h unistd.h \
638 ], [], [
639   AC_MSG_ERROR([*** A required header was not found.])
640 ])
641
642 AC_CHECK_HEADERS([arpa/inet.h libintl.h malloc.h netdb.h stddef.h strings.h sys/event.h utime.h])
643
644 PKG_PROG_PKG_CONFIG()
645
646 # Find required NetBSD Editline library (libedit).
647 AST_PKG_CONFIG_CHECK(LIBEDIT, libedit)
648 # some platforms do not list libedit via pkg-config, for example OpenBSD 6.2
649 AST_EXT_LIB_CHECK([LIBEDIT], [edit], [history_init], [histedit.h], [-ltermcap])
650 if test "${PBX_LIBEDIT}" != 1; then
651         AC_MSG_ERROR(*** Please install the 'libedit' development package.)
652         exit 1
653 fi
654 AST_C_COMPILE_CHECK([LIBEDIT_IS_UNICODE], [el_rfunc_t *callback;], [histedit.h], [], [Testing for libedit unicode support])
655
656 # Find required UUID support.
657 #  * -luuid on Linux
658 #  * -le2fs-uuid on OpenBSD
659 #  * in libsystem on OS X
660 AST_EXT_LIB_CHECK([LIBUUID], [uuid], [uuid_generate_random], [uuid/uuid.h])
661 if test "x$LIBUUID_LIB" != "x" ; then
662   UUID_INCLUDE="$LIBUUID_INCLUDE"
663   UUID_LIB="$LIBUUID_LIB"
664 else
665   AST_EXT_LIB_CHECK([E2FSUUID], [e2fs-uuid], [uuid_generate_random], [uuid/uuid.h])
666   if test "x$E2FSUUID_LIB" != "x" ; then
667     UUID_INCLUDE="$E2FSUUID_INCLUDE"
668     UUID_LIB="$E2FSUUID_LIB"
669   else
670     AC_CHECK_FUNCS([uuid_generate_random], [SYSUUID=true], [SYSUUID=""])
671     if test "x$SYSUUID" != "x" ; then
672       UUID_INCLUDE=""
673       UUID_LIB=""
674     else
675       AC_MSG_ERROR([*** uuid support not found (this typically means the uuid development package is missing)])
676     fi
677   fi
678 fi
679 AC_SUBST(UUID_INCLUDE)
680 AC_SUBST(UUID_LIB)
681
682 # Find required JSON support if bundled is not enabled.
683 if test "$JANSSON_BUNDLED" = "no" ; then
684         AST_PKG_CONFIG_CHECK([JANSSON], [jansson >= 2.11])
685         # json_sprintf is available in 2.11+
686         AST_EXT_LIB_CHECK([JANSSON], [jansson], [json_sprintf], [jansson.h])
687
688         if test "${PBX_JANSSON}" != 1; then
689                 AC_MSG_NOTICE(*** Asterisk requires libjansson >= 2.11 and no system copy was found.)
690                 AC_MSG_NOTICE(*** Please install the 'libjansson' development package or)
691                 AC_MSG_NOTICE(*** use './configure --with-jansson-bundled')
692                 exit 1
693         fi
694         JANSSON_DEFINE_JSON_INT()
695 else
696         PBX_JANSSON=1
697 fi
698
699 # See if clock_gettime is in librt
700 AST_EXT_LIB_CHECK([RT], [rt], [clock_gettime], [])
701
702 AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , ,
703         [#include <libxml/tree.h>
704         #include <libxml/parser.h>],
705         [LIBXML_TEST_VERSION])
706
707 if test "${PBX_LIBXML2}" != 1; then
708         AC_MSG_NOTICE(*** The Asterisk menuselect tool requires the 'libxml2' development package.)
709         AC_MSG_NOTICE(*** Please install the 'libxml2' development package.)
710         exit 1
711 fi
712
713 AST_EXT_LIB_CHECK([URIPARSER], [uriparser], [uriParseUriA], [uriparser/Uri.h])
714
715 # Another mandatory item (unless it's explicitly disabled)
716 AC_ARG_ENABLE([xmldoc],
717         [AS_HELP_STRING([--disable-xmldoc],
718                 [Explicitly disable XML documentation])],
719         [case "${enableval}" in
720                 y|ye|yes) DISABLE_XMLDOC=no ;;
721                 n|no)  DISABLE_XMLDOC=yes ;;
722                 *) AC_MSG_ERROR(bad value ${enableval} for --disable-xmldoc)  ;;
723         esac], [DISABLE_XMLDOC=no])
724
725 AC_SUBST([DISABLE_XMLDOC])
726 if test "${DISABLE_XMLDOC}" != "yes"; then
727         AC_DEFINE([AST_XML_DOCS], 1, [Define to enable XML documentation.])
728         AST_EXT_LIB_CHECK([LIBXSLT], [xslt], [xsltLoadStylesheetPI], [libxslt/xsltInternals.h], [${LIBXML2_LIB}], [${LIBXML2_INCLUDE}])
729         AST_EXT_LIB_CHECK([LIBXSLT_CLEANUP], [xslt], [xsltCleanupGlobals], [libxslt/xsltInternals.h], [${LIBXML2_LIB}], [${LIBXML2_INCLUDE}])
730
731 fi
732
733 AC_ARG_ENABLE([permanent-dlopen],
734         [AS_HELP_STRING([--enable-permanent-dlopen],
735                 [Enable when your libc has a permanent dlopen like musl])],
736         [case "${enableval}" in
737                 y|ye|yes) PERMANENT_DLOPEN=yes ;;
738                 n|no)  PERMANENT_DLOPEN=no ;;
739                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-permanent-dlopen)  ;;
740         esac], [PERMANENT_DLOPEN=no])
741
742 AC_SUBST([PERMANENT_DLOPEN])
743 if test "${PERMANENT_DLOPEN}" == "yes"; then
744         AC_DEFINE([HAVE_PERMANENT_DLOPEN], 1, [Define to support libc with permanent dlopen.])
745 fi
746
747 # some embedded systems omit internationalization (locale) support
748 AC_CHECK_HEADERS([xlocale.h])
749
750 AC_CHECK_HEADERS([winsock.h winsock2.h])
751
752 AC_CHECK_HEADER([sys/poll.h],
753          [],
754      AC_DEFINE([AST_POLL_COMPAT], 1, [Define to 1 if internal poll should be used.]))
755
756 AC_SYS_LARGEFILE
757
758 # Checks for typedefs, structures, and compiler characteristics.
759 AC_HEADER_STDBOOL
760 AC_C_CONST
761 AC_TYPE_UID_T
762 AC_C_INLINE
763 AC_TYPE_LONG_DOUBLE_WIDER
764 AC_TYPE_MODE_T
765 AC_TYPE_OFF_T
766 AC_TYPE_PID_T
767 AC_TYPE_SIZE_T
768 AC_CHECK_MEMBERS([struct stat.st_blksize])
769 AC_CHECK_MEMBERS([struct ucred.uid, struct ucred.cr_uid, struct sockpeercred.uid], [], [], [#include <sys/types.h>
770 #include <sys/socket.h> ])
771 AC_CHECK_MEMBERS([struct ifreq.ifr_ifru.ifru_hwaddr], [], [], [#include <net/if.h>])
772 AC_HEADER_TIME
773 AC_STRUCT_TM
774 AC_C_VOLATILE
775 AC_CHECK_TYPES([ptrdiff_t])
776 stat_nsec_found=no
777 AC_CHECK_MEMBERS([struct stat.st_mtim, struct stat.st_mtimensec, struct stat.st_mtimespec], [stat_nsec_found=yes], [], [[#include <sys/stat.h>]])
778
779 if test "${stat_nsec_found}" != yes; then
780         AC_MSG_WARN(Cannot determine nanosecond field of struct stat)
781 fi
782
783 # Checks for library functions.
784 AC_FUNC_CHOWN
785 AC_FUNC_CLOSEDIR_VOID
786 AC_FUNC_ERROR_AT_LINE
787 AST_FUNC_FORK
788 AC_FUNC_FSEEKO
789 AC_PROG_GCC_TRADITIONAL
790 # XXX: these are commented out until we determine whether it matters if our malloc()
791 # acts exactly like glibc's or not
792 # AC_FUNC_MALLOC
793 # AC_FUNC_REALLOC
794 AC_FUNC_MEMCMP
795 AC_FUNC_MMAP
796 AC_FUNC_SELECT_ARGTYPES
797 AC_FUNC_STAT
798 AC_FUNC_STRCOLL
799 AC_FUNC_STRFTIME
800 AC_FUNC_STRNLEN
801 AC_FUNC_STRTOD
802 AC_FUNC_UTIME_NULL
803 AC_FUNC_VPRINTF
804 AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ffsll ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob ioperm inet_ntoa isascii memchr memmove memset mkdir mkdtemp munmap newlocale pipe2 ppoll putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtod strtol strtold strtoq unsetenv uselocale utime vasprintf getpeereid sysctl swapctl malloc_trim])
805
806 AC_MSG_CHECKING(for htonll)
807 AC_LINK_IFELSE(
808         [AC_LANG_PROGRAM([#include <arpa/inet.h>],
809                 [return htonll(0);])],
810         AC_MSG_RESULT(yes)
811         AC_DEFINE(HAVE_HTONLL, 1, [Define to 1 if arpa/inet.h includes a htonll definition.]),
812         AC_MSG_RESULT(no)
813 )
814
815 AC_MSG_CHECKING(for ntohll)
816 AC_LINK_IFELSE(
817         [AC_LANG_PROGRAM([#include <arpa/inet.h>],
818                 [return ntohll(0);])],
819         AC_MSG_RESULT(yes)
820         AC_DEFINE(HAVE_NTOHLL, 1, [Define to 1 if arpa/inet.h includes a ntohll definition.]),
821         AC_MSG_RESULT(no)
822 )
823
824 # NOTE: we use AC_CHECK_LIB to get -lm into the arguments for later checks,
825 # so that AC_CHECK_FUNCS can detect functions in that library.
826 AC_CHECK_LIB([m], [sqrt])
827 # BSD might not have exp2, and/or log2
828 AC_CHECK_FUNCS([exp2 log2 exp10 log10 sin cos tan asin acos atan atan2 pow rint exp log remainder fmod round roundf trunc floor ceil])
829
830 # Certain architectures don't really have long double, even though
831 # AC_CHECK_FUNCS would otherwise find the following functions.
832 if test "x${ac_cv_type_long_double_wider}" = "xyes" ; then
833         AC_CHECK_FUNCS([exp2l log2l exp10l log10l sinl cosl tanl asinl acosl atanl atan2l powl sqrtl rintl expl logl remainderl fmodl roundl truncl floorl ceill])
834 fi
835
836 AC_MSG_CHECKING(for LLONG_MAX in limits.h)
837 AC_LINK_IFELSE(
838         [AC_LANG_PROGRAM([#include <limits.h>],
839                 [long long foo = LLONG_MAX])],
840         AC_MSG_RESULT(yes)
841         AC_DEFINE([HAVE_LLONG_MAX], 1, [Define to 1 if limits.h includes a LLONG_MAX definition.]),
842         AC_MSG_RESULT(no)
843 )
844
845 AC_MSG_CHECKING(for timersub in time.h)
846 AC_LINK_IFELSE(
847         [AC_LANG_PROGRAM([#include <sys/time.h>],
848                 [struct timeval *a; timersub(a, a, a);])],
849         AC_MSG_RESULT(yes)
850                 AC_DEFINE([HAVE_TIMERSUB], 1, [Define to 1 if your system defines timersub.]),
851         AC_MSG_RESULT(no)
852 )
853
854 AC_MSG_CHECKING(for a version of GNU ld that supports the --dynamic-list flag)
855 old_LDFLAGS=${LDFLAGS}
856 cat >conftest.dynamics <<_ACEOF
857 {
858         *ast_*;
859 };
860 _ACEOF
861 LDFLAGS="${LDFLAGS} -Wl,--dynamic-list,conftest.dynamics"
862 PBX_DYNAMIC_LIST=0
863 AC_LINK_IFELSE(
864         [AC_LANG_PROGRAM([], [])],
865         PBX_DYNAMIC_LIST=1
866         AC_MSG_RESULT(yes),
867         AC_MSG_RESULT(no)
868 )
869 AC_SUBST(PBX_DYNAMIC_LIST)
870 LDFLAGS=${old_LDFLAGS}
871 rm -f conftest.dynamics
872
873 AC_CHECK_HEADER([sys/poll.h],
874    [HAS_POLL=1]
875    AC_DEFINE([HAVE_SYS_POLL_H], 1, [Define to 1 if your system has working sys/poll.h]),
876    )
877
878 AC_ARG_ENABLE([internal-poll],
879         [AS_HELP_STRING([--enable-internal-poll],
880                 [Use Asterisk's poll implementation])],
881         [case "${enableval}" in
882                 y|ye|yes) HAS_POLL="";;
883                 n|no) HAS_POLL="${HAS_POLL}" ;;
884                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-internal-poll) ;;
885         esac])
886 AC_SUBST(HAS_POLL)
887
888 AC_ARG_ENABLE([asteriskssl],
889         [AS_HELP_STRING([--disable-asteriskssl],
890                 [Disable Asterisk's SSL wrapper library])],
891         [case "${enableval}" in
892                 y|ye|yes) AST_ASTERISKSSL=yes ;;
893                 n|no)  AST_ASTERISKSSL=no ;;
894                 *) AC_MSG_ERROR(bad value ${enableval} for --disable-asteriskssl)  ;;
895         esac], [AST_ASTERISKSSL=yes])
896 AC_SUBST(AST_ASTERISKSSL)
897
898 AC_CHECK_FUNCS([inet_aton])
899
900 # check if we have IP_PKTINFO constant defined
901 AC_MSG_CHECKING(for IP_PKTINFO)
902 AC_LINK_IFELSE(
903                 [AC_LANG_PROGRAM([#include <netinet/in.h>],
904                                                 [int pi = IP_PKTINFO;])],
905                 AC_MSG_RESULT(yes)
906                 AC_DEFINE([HAVE_PKTINFO], 1, [Define to 1 if your system defines IP_PKTINFO.]),
907                 AC_MSG_RESULT(no)
908 )
909
910 # some systems already have gethostbyname_r so we don't need to build ours in main/utils.c
911 AC_SEARCH_LIBS(gethostbyname_r, [socket nsl])
912
913 AC_MSG_CHECKING(for gethostbyname_r with 6 arguments)
914 AC_LINK_IFELSE(
915         [AC_LANG_PROGRAM([#include <stdlib.h>
916                          #include <netdb.h>],
917                         [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (struct hostent **)NULL, (int *)NULL);])],
918         AC_MSG_RESULT(yes)
919         AC_DEFINE([HAVE_GETHOSTBYNAME_R_6], 1, [Define to 1 if your system has gethostbyname_r with 6 arguments.]),
920         AC_MSG_RESULT(no)
921 )
922
923 AC_MSG_CHECKING(for gethostbyname_r with 5 arguments)
924 AC_LINK_IFELSE(
925         [AC_LANG_PROGRAM([#include <stdlib.h>
926                          #include <netdb.h>],
927                         [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (int *)NULL);])],
928         AC_MSG_RESULT(yes)
929         AC_DEFINE([HAVE_GETHOSTBYNAME_R_5], 1, [Define to 1 if your system has gethostbyname_r with 5 arguments.]),
930         AC_MSG_RESULT(no)
931 )
932
933 AC_CHECK_HEADER([byteswap.h], [AC_DEFINE_UNQUOTED([HAVE_BYTESWAP_H], 1, [Define to 1 if byteswap.h macros are available.])])
934
935 AC_MSG_CHECKING(for __swap16 variant of <sys/endian.h> byteswapping macros)
936 AC_LINK_IFELSE(
937 [AC_LANG_PROGRAM([#include <sys/endian.h>], [int a = 1; int b = __swap16(a);])],
938 AC_MSG_RESULT(yes)
939 AC_DEFINE([HAVE_SYS_ENDIAN_SWAP16], 1, [Define to 1 if your sys/endian.h header file provides the __swap16 macro.]),
940 AC_MSG_RESULT(no)
941 )
942
943 AC_MSG_CHECKING(for bswap16 variant of <sys/endian.h> byteswapping macros)
944 AC_LINK_IFELSE(
945 [AC_LANG_PROGRAM([#include <sys/endian.h>], [int a = 1; int b = bswap16(a);])],
946 AC_MSG_RESULT(yes)
947 AC_DEFINE([HAVE_SYS_ENDIAN_BSWAP16], 1, [Define to 1 if your sys/endian.h header file provides the bswap16 macro.]),
948 AC_MSG_RESULT(no)
949 )
950
951 AC_MSG_CHECKING(for locale_t in locale.h)
952 AC_LINK_IFELSE(
953 [AC_LANG_PROGRAM([#include <locale.h>], [locale_t lt = NULL])],
954 AC_MSG_RESULT(yes)
955 AC_DEFINE([HAVE_LOCALE_T_IN_LOCALE_H], 1, [Define to 1 if your system defines the locale_t type in locale.h]),
956 AC_MSG_RESULT(no)
957   AC_MSG_CHECKING(for locale_t in xlocale.h)
958   AC_LINK_IFELSE(
959   [AC_LANG_PROGRAM([#include <xlocale.h>], [locale_t lt = NULL])],
960   AC_MSG_RESULT(yes)
961   AC_DEFINE([HAVE_LOCALE_T_IN_XLOCALE_H], 1, [Define to 1 if your system defines the locale_t type in xlocale.h]),
962   AC_MSG_RESULT(no)
963   )
964 )
965
966 AC_MSG_CHECKING(for O_EVTONLY in fcntl.h)
967 AC_LINK_IFELSE(
968 [AC_LANG_PROGRAM([#include <fcntl.h>], [int a = O_EVTONLY;])],
969 AC_MSG_RESULT(yes)
970 AC_DEFINE([HAVE_O_EVTONLY], 1, [Define to 1 if your system defines the file flag O_EVTONLY in fcntl.h]),
971 AC_MSG_RESULT(no)
972 )
973
974 AC_MSG_CHECKING(for O_SYMLINK in fcntl.h)
975 AC_LINK_IFELSE(
976 [AC_LANG_PROGRAM([#include <fcntl.h>], [int a = O_SYMLINK;])],
977 AC_MSG_RESULT(yes)
978 AC_DEFINE([HAVE_O_SYMLINK], 1, [Define to 1 if your system defines the file flag O_SYMLINK in fcntl.h]),
979 AC_MSG_RESULT(no)
980 )
981
982 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_INITIALIZER], [PTHREAD_RWLOCK_INITIALIZER], [pthread.h])
983
984 AC_MSG_CHECKING(for PTHREAD_RWLOCK_PREFER_WRITER_NP in pthread.h)
985 AC_LINK_IFELSE(
986 [AC_LANG_PROGRAM([#include <pthread.h>], [int a = PTHREAD_RWLOCK_PREFER_WRITER_NP;])],
987 AC_MSG_RESULT(yes)
988 AC_DEFINE([HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NP], 1, [Define to 1 if your system defines PTHREAD_RWLOCK_PREFER_WRITER_NP in pthread.h]),
989 AC_MSG_RESULT(no)
990 )
991
992 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE_NP in pthread.h)
993 AC_LINK_IFELSE(
994 [AC_LANG_PROGRAM([#include <pthread.h>], [int a = PTHREAD_MUTEX_RECURSIVE_NP;])],
995 AC_MSG_RESULT(yes)
996 AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE_NP], 1, [Define to 1 if your system defines PTHREAD_MUTEX_RECURSIVE_NP in pthread.h]),
997 AC_MSG_RESULT(no)
998 )
999
1000 AC_MSG_CHECKING(for PTHREAD_MUTEX_ADAPTIVE_NP in pthread.h)
1001 AC_LINK_IFELSE(
1002 [AC_LANG_PROGRAM([#include <pthread.h>], [int a = PTHREAD_MUTEX_ADAPTIVE_NP;])],
1003 AC_MSG_RESULT(yes)
1004 AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], 1, [Define to 1 if your system defines PTHREAD_MUTEX_ADAPTIVE_NP in pthread.h]),
1005 AC_MSG_RESULT(no)
1006 )
1007
1008 AC_MSG_CHECKING(for pthread_spinlock_t in pthread.h)
1009 AC_LINK_IFELSE(
1010 [AC_LANG_PROGRAM([#include <pthread.h>], [pthread_spinlock_t spin;])],
1011 AC_MSG_RESULT(yes)
1012 AC_DEFINE([HAVE_PTHREAD_SPINLOCK], 1, [Define to 1 if your system has pthread_spinlock_t in pthread.h]),
1013 AC_MSG_RESULT(no)
1014 )
1015
1016 save_LIBS="$LIBS"
1017 save_CFLAGS="$CFLAGS"
1018 LIBS="$PTHREAD_LIBS $LIBS"
1019 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
1020
1021 AC_MSG_CHECKING(for pthread_rwlock_timedwrlock() in pthread.h)
1022 AC_LINK_IFELSE(
1023   [AC_LANG_PROGRAM(
1024     [#include <pthread.h>
1025      #include <time.h>],
1026     [pthread_rwlock_t foo; struct timespec bar; pthread_rwlock_timedwrlock(&foo, &bar)])
1027   ],[
1028     AC_MSG_RESULT(yes)
1029     ac_cv_pthread_rwlock_timedwrlock="yes"
1030   ],[
1031     AC_MSG_RESULT(no)
1032     ac_cv_pthread_rwlock_timedwrlock="no"
1033   ]
1034 )
1035
1036 # Some platforms define sem_init(), but only support sem_open(). joyous.
1037 AC_MSG_CHECKING(for working unnamed semaphores)
1038 AC_RUN_IFELSE(
1039         [AC_LANG_PROGRAM([#include <semaphore.h>],
1040                 [sem_t sem; return sem_init(&sem, 0, 0);])],
1041         AC_MSG_RESULT(yes)
1042         AC_DEFINE([HAS_WORKING_SEMAPHORE], 1, [Define to 1 if anonymous semaphores work.]),
1043         AC_MSG_RESULT(no),
1044         AC_MSG_RESULT(cross-compile)
1045         AC_MSG_NOTICE([WARNING: result yes guessed because of cross compilation])
1046         AC_DEFINE([HAS_WORKING_SEMAPHORE], 1, [Define to 1 if anonymous semaphores work.])
1047 )
1048
1049 LIBS="$save_LIBS"
1050 CFLAGS="$save_CFLAGS"
1051 if test "${ac_cv_pthread_rwlock_timedwrlock}" = "yes"; then
1052   AC_DEFINE([HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK], 1, [Define if your system has pthread_rwlock_timedwrlock()])
1053 fi
1054
1055 AC_MSG_CHECKING(if PTHREAD_ONCE_INIT needs braces)
1056 saved_CFLAGS="${CFLAGS}"
1057 CFLAGS="${CFLAGS} -Werror -Wmissing-braces"
1058 AC_COMPILE_IFELSE(
1059   [AC_LANG_PROGRAM(
1060     [#include <pthread.h>
1061      void empty(){}],
1062         [pthread_once_t once = PTHREAD_ONCE_INIT; pthread_once(&once, empty);])
1063   ],[
1064     AC_MSG_RESULT(no)
1065     ac_cv_pthread_once_needsbraces="no"
1066   ],[
1067     AC_MSG_RESULT(yes)
1068     ac_cv_pthread_once_needsbraces="yes"
1069   ]
1070 )
1071 CFLAGS="${saved_CFLAGS}"
1072 if test "${ac_cv_pthread_once_needsbraces}" = "yes"; then
1073   AC_DEFINE([PTHREAD_ONCE_INIT_NEEDS_BRACES], 1, [Define if your system needs braces around PTHREAD_ONCE_INIT])
1074 fi
1075
1076 AST_C_DEFINE_CHECK([PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], [PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], [pthread.h])
1077
1078 # Can we compare a mutex to its initial value?
1079 # Generally yes on OpenBSD/FreeBSD and no on Mac OS X.
1080 AC_MSG_CHECKING(whether we can compare a mutex to its initial value)
1081 AC_LINK_IFELSE(
1082         [AC_LANG_PROGRAM([#include <pthread.h>], [pthread_mutex_t lock;
1083         if ((lock) != ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
1084                 return 0;
1085         }
1086         return 0])],
1087         AC_MSG_RESULT(yes)
1088         AC_DEFINE([CAN_COMPARE_MUTEX_TO_INIT_VALUE], 1, [Define to 1 if your system's implementation of mutexes supports comparison of a mutex to its initializer.]),
1089         AC_MSG_RESULT(no)
1090 )
1091
1092 #if test "${cross_compiling}" = "no";
1093 #then
1094 #AC_MSG_CHECKING(for working epoll support)
1095 #AC_LINK_IFELSE(
1096 #AC_LANG_PROGRAM([#include <sys/epoll.h>], [int res = epoll_create(10);
1097 #                                         if (res < 0)
1098 #                                            return 1;
1099 #                                         close (res);
1100 #                                         return 0;]),
1101 #AC_MSG_RESULT(yes)
1102 #AC_DEFINE([HAVE_EPOLL], 1, [Define to 1 if your system has working epoll support.]),
1103 #AC_MSG_RESULT(no)
1104 #)
1105 #fi
1106
1107 # for FreeBSD thr_self
1108 AC_CHECK_HEADERS([sys/thr.h])
1109
1110 AC_MSG_CHECKING(for compiler sync operations)
1111 AC_LINK_IFELSE(
1112 [AC_LANG_PROGRAM([], [int foo1; int foo2 = __sync_fetch_and_add(&foo1, 1);])],
1113 AC_MSG_RESULT(yes)
1114 ax_cv_have_gcc_atomics=1
1115 AC_DEFINE([HAVE_GCC_ATOMICS], 1, [Define to 1 if your GCC C compiler provides __sync atomic operations.]),
1116 AC_MSG_RESULT(no)
1117 )
1118
1119 AC_MSG_CHECKING(for compiler atomic operations)
1120 AC_LINK_IFELSE(
1121 [AC_LANG_PROGRAM([], [int foo1; int foo2 = __atomic_fetch_add(&foo1, 1, __ATOMIC_RELAXED);])],
1122 AC_MSG_RESULT(yes)
1123 ax_cv_have_c_atomics=1
1124 AC_DEFINE([HAVE_C_ATOMICS], 1, [Define to 1 if your C compiler provides __atomic operations.]),
1125 AC_MSG_RESULT(no)
1126 )
1127
1128 if test -z $ax_cv_have_c_atomics$ax_cv_have_gcc_atomics; then
1129         AC_MSG_ERROR([*** Atomic operations are not supported by your compiler.])
1130 fi
1131
1132 # glibc, AFAIK, is the only C library that makes printing a NULL to a string safe.
1133 AC_MSG_CHECKING([if your system printf is NULL-safe.])
1134 AC_RUN_IFELSE(
1135         [AC_LANG_PROGRAM([#include <stdio.h>],
1136                 [printf("%s", NULL)])],
1137         AC_DEFINE([HAVE_NULLSAFE_PRINTF], 1, [Define to 1 if your C library can safely print NULL to string formats.])
1138         AC_MSG_RESULT(yes),
1139         AC_MSG_RESULT(no),
1140         # It's unlikely an embedded system will have this.
1141         AC_MSG_RESULT(unknown)
1142 )
1143
1144 AC_MSG_CHECKING([if socket() accepts SOCK_NONBLOCK])
1145 AC_RUN_IFELSE(
1146 [AC_LANG_PROGRAM([
1147         #ifdef HAVE_SYS_TYPES_H
1148         # include <sys/types.h>
1149         #endif
1150         #ifdef HAVE_SYS_SOCKET_H
1151         # include <sys/socket.h>
1152         #endif
1153         ], [
1154            if (socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0) < 0) {
1155               return 1;
1156            }
1157            return 0;
1158         ])],
1159         AC_MSG_RESULT(yes)
1160         AC_DEFINE([HAVE_SOCK_NONBLOCK], 1, [Define to 1 if your socket() implementation can accept SOCK_NONBLOCK.]),
1161         AC_MSG_RESULT(no),
1162         AC_MSG_RESULT(cross-compile)
1163 )
1164
1165 AC_MSG_CHECKING(if we can increase the maximum select-able file descriptor)
1166 AC_RUN_IFELSE(
1167 [AC_LANG_PROGRAM([
1168 #include <stdio.h>
1169 #include <sys/select.h>
1170 #include <sys/time.h>
1171 #include <sys/resource.h>
1172 #include <string.h>
1173 #include <errno.h>
1174 #include <stdlib.h>
1175 #include <sys/types.h>
1176 #include <sys/stat.h>
1177 #include <fcntl.h>
1178 #include <unistd.h>
1179 ], [[
1180         struct rlimit rlim = { FD_SETSIZE * 2, FD_SETSIZE * 2 };
1181         int fd0, fd1;
1182         struct timeval tv = { 0, };
1183         struct ast_fdset { long fds_bits[[1024]]; } fds = { { 0, } };
1184         if (setrlimit(RLIMIT_NOFILE, &rlim)) { exit(1); }
1185         if ((fd0 = open("/dev/null", O_RDONLY)) < 0) { exit(1); }
1186         if (dup2(fd0, (fd1 = FD_SETSIZE + 1)) < 0) { exit(1); }
1187         FD_SET(fd0, (fd_set *) &fds);
1188         FD_SET(fd1, (fd_set *) &fds);
1189         if (select(FD_SETSIZE + 2, (fd_set *) &fds, NULL, NULL, &tv) < 0) { exit(1); }
1190         exit(0)]])],
1191         AC_MSG_RESULT(yes)
1192         AC_DEFINE([HAVE_VARIABLE_FDSET], 1, [Define to 1 if your system can support larger than default select bitmasks.]),
1193         AC_MSG_RESULT(no),
1194         AC_MSG_RESULT(cross-compile)
1195 )
1196
1197 if test "${ac_cv_have_variable_fdset}x" = "0x"; then
1198         AC_RUN_IFELSE(
1199                 [AC_LANG_PROGRAM([
1200 #include <unistd.h>
1201 #include <sys/types.h>
1202 #include <stdlib.h>
1203 ], [if (getuid() != 0) { exit(1); }])],
1204                 AC_DEFINE([CONFIGURE_RAN_AS_ROOT], 1, [Some configure tests will unexpectedly fail if configure is run by a non-root user.  These may be able to be tested at runtime.]))
1205 fi
1206
1207 AC_MSG_CHECKING([if we have usable eventfd support])
1208 AC_RUN_IFELSE(
1209   [AC_LANG_PROGRAM([#include <sys/eventfd.h>],
1210       [return eventfd(0, EFD_NONBLOCK | EFD_SEMAPHORE) == -1;])],
1211   AC_MSG_RESULT(yes)
1212   AC_DEFINE([HAVE_EVENTFD], 1, [Define to 1 if your system supports eventfd and the EFD_NONBLOCK and EFD_SEMAPHORE flags.]),
1213   AC_MSG_RESULT(no),
1214   AC_MSG_RESULT(cross-compile)
1215 )
1216
1217 AST_GCC_ATTRIBUTE(pure)
1218 AST_GCC_ATTRIBUTE(malloc)
1219 AST_GCC_ATTRIBUTE(const)
1220 AST_GCC_ATTRIBUTE(unused)
1221 AST_GCC_ATTRIBUTE(always_inline)
1222 AST_GCC_ATTRIBUTE(deprecated)
1223 AST_GCC_ATTRIBUTE(sentinel)
1224 AST_GCC_ATTRIBUTE(warn_unused_result)
1225 AST_GCC_ATTRIBUTE(may_alias)
1226 AST_GCC_ATTRIBUTE(constructor)
1227 if test "$ax_cv_have_func_attribute_constructor" != "1"; then
1228         AC_MSG_ERROR([*** Function constructor attribute is not supported by your compiler.])
1229 fi
1230
1231 AST_GCC_ATTRIBUTE(destructor)
1232 if test "$ax_cv_have_func_attribute_destructor" != "1"; then
1233         AC_MSG_ERROR([*** Function destructor attribute is not supported by your compiler.])
1234 fi
1235 AST_GCC_ATTRIBUTE(noreturn,noreturn)
1236
1237 AC_MSG_CHECKING(for -fsanitize=address support)
1238 saved_sanitize_CFLAGS="${CFLAGS}"
1239 saved_sanitize_LDFLAGS="${LDFLAGS}"
1240 CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
1241 LDFLAGS="-fsanitize=address"
1242 AC_COMPILE_IFELSE(
1243         [AC_LANG_PROGRAM([], [int x = 1;])],
1244         AC_MSG_RESULT(yes)
1245         [AST_ADDRESS_SANITIZER=1],
1246         [AST_ADDRESS_SANITIZER=0]
1247         AC_MSG_RESULT(no)
1248 )
1249 CFLAGS="${saved_sanitize_CFLAGS}"
1250 LDFLAGS="${saved_sanitize_LDFLAGS}"
1251 AC_SUBST(AST_ADDRESS_SANITIZER)
1252
1253 AC_MSG_CHECKING(for -fsanitize=thread support)
1254 saved_sanitize_CFLAGS="${CFLAGS}"
1255 saved_sanitize_LDFLAGS="${LDFLAGS}"
1256 CFLAGS="-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread"
1257 LDFLAGS="-fsanitize=thread -pie -fPIE"
1258 AC_COMPILE_IFELSE(
1259         [AC_LANG_PROGRAM([], [int x = 1;])],
1260         AC_MSG_RESULT(yes)
1261         [AST_THREAD_SANITIZER=1],
1262         [AST_THREAD_SANITIZER=0]
1263         AC_MSG_RESULT(no)
1264 )
1265 CFLAGS="${saved_sanitize_CFLAGS}"
1266 LDFLAGS="${saved_sanitize_LDFLAGS}"
1267 AC_SUBST(AST_THREAD_SANITIZER)
1268
1269 AC_MSG_CHECKING(for -fsanitize=leak support)
1270 saved_sanitize_CFLAGS="${CFLAGS}"
1271 saved_sanitize_LDFLAGS="${LDFLAGS}"
1272 CFLAGS="-fno-omit-frame-pointer -fsanitize=leak"
1273 LDFLAGS="-fsanitize=leak"
1274 AC_COMPILE_IFELSE(
1275         [AC_LANG_PROGRAM([], [int x = 1;])],
1276         AC_MSG_RESULT(yes)
1277         [AST_LEAK_SANITIZER=1],
1278         [AST_LEAK_SANITIZER=0]
1279         AC_MSG_RESULT(no)
1280 )
1281 CFLAGS="${saved_sanitize_CFLAGS}"
1282 LDFLAGS="${saved_sanitize_LDFLAGS}"
1283 AC_SUBST(AST_LEAK_SANITIZER)
1284
1285 AC_MSG_CHECKING(for -fsanitize=undefined support)
1286 saved_sanitize_CFLAGS="${CFLAGS}"
1287 saved_sanitize_LDFLAGS="${LDFLAGS}"
1288 CFLAGS="-fno-omit-frame-pointer -fsanitize=undefined"
1289 LDFLAGS="-fsanitize=undefined"
1290 AC_COMPILE_IFELSE(
1291         [AC_LANG_PROGRAM([], [int x = 1;])],
1292         AC_MSG_RESULT(yes)
1293         [AST_UNDEFINED_SANITIZER=1],
1294         [AST_UNDEFINED_SANITIZER=0]
1295         AC_MSG_RESULT(no)
1296 )
1297 CFLAGS="${saved_sanitize_CFLAGS}"
1298 LDFLAGS="${saved_sanitize_LDFLAGS}"
1299 AC_SUBST(AST_UNDEFINED_SANITIZER)
1300
1301 AC_MSG_CHECKING(for -Wdeclaration-after-statement support)
1302 if $(${CC} -Wdeclaration-after-statement -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1303         AC_MSG_RESULT(yes)
1304         AST_DECLARATION_AFTER_STATEMENT=-Wdeclaration-after-statement
1305 else
1306         AC_MSG_RESULT(no)
1307         AST_DECLARATION_AFTER_STATEMENT=
1308 fi
1309 AC_SUBST(AST_DECLARATION_AFTER_STATEMENT)
1310
1311 AC_MSG_CHECKING(for -Wtrampolines support)
1312 if $(${CC} -Wtrampolines -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1313         AC_MSG_RESULT(yes)
1314         AST_TRAMPOLINES=-Wtrampolines
1315 else
1316         AC_MSG_RESULT(no)
1317         AST_TRAMPOLINES=
1318 fi
1319 AC_SUBST(AST_TRAMPOLINES)
1320
1321 AC_MSG_CHECKING(for _FORTIFY_SOURCE support)
1322 if $(${CC} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1323         AC_MSG_RESULT(yes)
1324         AST_FORTIFY_SOURCE="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2"
1325 else
1326         AC_MSG_RESULT(no)
1327         AST_FORTIFY_SOURCE=
1328 fi
1329 AC_SUBST(AST_FORTIFY_SOURCE)
1330
1331 AC_MSG_CHECKING(for -fno-strict-overflow)
1332 if $(${CC} -O2 -fno-strict-overflow -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1333         AC_MSG_RESULT(yes)
1334         AST_NO_STRICT_OVERFLOW=-fno-strict-overflow
1335 else
1336         AC_MSG_RESULT(no)
1337         AST_NO_STRICT_OVERFLOW=
1338 fi
1339 AC_SUBST(AST_NO_STRICT_OVERFLOW)
1340
1341 AC_MSG_CHECKING(for -Wno-format-truncation)
1342 if $(${CC} -Wno-format-truncation -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1343         AC_MSG_RESULT(yes)
1344         AST_NO_FORMAT_TRUNCATION=-Wno-format-truncation
1345 else
1346         AC_MSG_RESULT(no)
1347         AST_NO_FORMAT_TRUNCATION=
1348 fi
1349 AC_SUBST(AST_NO_FORMAT_TRUNCATION)
1350
1351 AC_MSG_CHECKING(for -Wno-stringop-truncation)
1352 if $(${CC} -Wno-stringop-truncation -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1353         AC_MSG_RESULT(yes)
1354         AST_NO_STRINGOP_TRUNCATION=-Wno-stringop-truncation
1355 else
1356         AC_MSG_RESULT(no)
1357         AST_NO_STRINGOP_TRUNCATION=
1358 fi
1359 AC_SUBST(AST_NO_STRINGOP_TRUNCATION)
1360
1361 AC_MSG_CHECKING(for -Wshadow)
1362 if $(${CC} -Wshadow -Werror -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1363         AC_MSG_RESULT(yes)
1364         AST_SHADOW_WARNINGS=-Wshadow
1365 else
1366         AC_MSG_RESULT(no)
1367         AST_SHADOW_WARNINGS=
1368 fi
1369 AC_SUBST(AST_SHADOW_WARNINGS)
1370
1371 AC_MSG_CHECKING(for -march=native support)
1372 if $(${CC} -march=native -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
1373         AC_MSG_RESULT(yes)
1374         AST_NATIVE_ARCH=1
1375 else
1376         AC_MSG_RESULT(no)
1377         AST_NATIVE_ARCH=0
1378 fi
1379 AC_SUBST(AST_NATIVE_ARCH)
1380
1381
1382 dnl Check to see if rpath should be set in LDFLAGS
1383 AC_ARG_ENABLE(rpath,
1384         [AS_HELP_STRING([--disable-rpath],
1385                         [Disables rpath linker option checking])],
1386         [case "${enableval}" in
1387                 y|ye|yes) check_rpath=yes ;;
1388                 n|no) check_rpath=no ;;
1389                 *) AC_MSG_ERROR(bad value ${enableval} for --disable-rpath) ;;
1390         esac], [check_rpath=yes])
1391
1392 AC_MSG_CHECKING(whether to use rpath)
1393 AST_RPATH=
1394 if test "${OSARCH}" = "NetBSD"; then
1395         AST_RPATH="-Wl,-rpath,/usr/pkg/lib"
1396 fi
1397 if test "${check_rpath}" != yes; then
1398         AC_MSG_RESULT(skipped)
1399 elif test "${prefix}" = /usr || test "${prefix}" = NONE; then
1400         AC_MSG_RESULT(not needed)
1401 else
1402         AST_RPATH="-Wl,-rpath,${libdir}"
1403 fi
1404 AC_SUBST(AST_RPATH)
1405
1406 AC_MSG_CHECKING(for sysinfo)
1407 AC_LINK_IFELSE(
1408         [AC_LANG_PROGRAM([#include <sys/sysinfo.h>],
1409                         [struct sysinfo sys_info; int uptime = sys_info.uptime])],
1410         AC_MSG_RESULT(yes)
1411         AC_DEFINE([HAVE_SYSINFO], 1, [Define to 1 if your system has sysinfo support]),
1412         AC_MSG_RESULT(no)
1413 )
1414
1415 AC_SEARCH_LIBS(res_9_ninit, resolv)
1416 AC_MSG_CHECKING(for res_ninit)
1417 AC_LINK_IFELSE(
1418         [AC_LANG_PROGRAM([
1419                         #ifdef HAVE_SYS_SOCKET_H
1420                         #include <sys/socket.h>
1421                         #endif
1422                         #ifdef HAVE_NETINET_IN_H
1423                         #include <netinet/in.h>
1424                         #endif
1425                         #ifdef HAVE_ARPA_NAMESER_H
1426                         #include <arpa/nameser.h>
1427                         #endif
1428                         #include <resolv.h>],
1429                         [int foo = res_ninit(NULL);])],
1430         AC_MSG_RESULT(yes)
1431         AC_DEFINE([HAVE_RES_NINIT], 1, [Define to 1 if your system has the re-entrant resolver functions.])
1432         AC_SEARCH_LIBS(res_9_ndestroy, resolv)
1433         AC_MSG_CHECKING(for res_ndestroy)
1434         AC_LINK_IFELSE(
1435                 [AC_LANG_PROGRAM([
1436                                 #ifdef HAVE_SYS_SOCKET_H
1437                                 #include <sys/socket.h>
1438                                 #endif
1439                                 #ifdef HAVE_NETINET_IN_H
1440                                 #include <netinet/in.h>
1441                                 #endif
1442                                 #ifdef HAVE_ARPA_NAMESER_H
1443                                 #include <arpa/nameser.h>
1444                                 #endif
1445                                 #include <resolv.h>],
1446                                 [res_ndestroy(NULL);])],
1447                 AC_MSG_RESULT(yes)
1448                 AC_DEFINE([HAVE_RES_NDESTROY], 1, [Define to 1 if your system has the ndestroy resolver function.]),
1449                 AC_MSG_RESULT(no)
1450         )
1451         AC_SEARCH_LIBS(res_9_close, resolv)
1452         AC_MSG_CHECKING(for res_close)
1453         AC_LINK_IFELSE(
1454                 [AC_LANG_PROGRAM([
1455                                 #ifdef HAVE_SYS_SOCKET_H
1456                                 #include <sys/socket.h>
1457                                 #endif
1458                                 #ifdef HAVE_NETINET_IN_H
1459                                 #include <netinet/in.h>
1460                                 #endif
1461                                 #ifdef HAVE_ARPA_NAMESER_H
1462                                 #include <arpa/nameser.h>
1463                                 #endif
1464                                 #include <resolv.h>],
1465                                 [res_close();])],
1466                 AC_MSG_RESULT(yes)
1467                 AC_DEFINE([HAVE_RES_CLOSE], 1, [Define to 1 if your system has the close resolver function.]),
1468                 AC_MSG_RESULT(no)
1469         ),
1470         AC_MSG_RESULT(no)
1471 )
1472
1473 AC_MSG_CHECKING(for BIND_8_COMPAT required)
1474 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1475 [[
1476 #undef BIND_8_COMPAT
1477 #include <arpa/nameser.h>
1478 ]],
1479 [[int x = NXDOMAIN]])],
1480 AC_MSG_RESULT(no),
1481 AC_MSG_RESULT(yes)
1482 [BIND8_CFLAGS=-DBIND_8_COMPAT])
1483 AC_SUBST(BIND8_CFLAGS)
1484
1485 AST_C_DEFINE_CHECK([GLOB_NOMAGIC], [GLOB_NOMAGIC], [glob.h])
1486
1487 AST_C_DEFINE_CHECK([GLOB_BRACE], [GLOB_BRACE], [glob.h])
1488
1489 AST_C_DEFINE_CHECK([RTLD_NOLOAD], [RTLD_NOLOAD], [dlfcn.h])
1490
1491 AST_C_DEFINE_CHECK([IP_MTU_DISCOVER], [IP_MTU_DISCOVER], [netinet/in.h])
1492
1493 AC_CHECK_SIZEOF([int])
1494 AC_CHECK_SIZEOF([long])
1495 AC_CHECK_SIZEOF([long long])
1496 AC_CHECK_SIZEOF([char *])
1497 AC_CHECK_SIZEOF(long)
1498 AC_CHECK_SIZEOF(long long)
1499 AC_COMPUTE_INT([ac_cv_sizeof_fd_set_fds_bits], [sizeof(foo.fds_bits[[0]])], [$ac_includes_default
1500 fd_set foo;])
1501 # This doesn't actually work; what it does is to use the variable set in the
1502 # previous test as a cached value to set the right output variables.
1503 AC_CHECK_SIZEOF(fd_set.fds_bits)
1504
1505 # Set a type compatible with the previous.  We cannot just use a generic type
1506 # for these bits, because on big-endian systems, the bits won't match up
1507 # correctly if the size is wrong.
1508 if test $ac_cv_sizeof_int = $ac_cv_sizeof_fd_set_fds_bits; then
1509   AC_DEFINE([TYPEOF_FD_SET_FDS_BITS], [int], [Define to a type of the same size as fd_set.fds_bits[[0]]])
1510 elif test $ac_cv_sizeof_long = $ac_cv_sizeof_fd_set_fds_bits; then
1511   AC_DEFINE([TYPEOF_FD_SET_FDS_BITS], [long], [Define to a type of the same size as fd_set.fds_bits[[0]]])
1512 elif test $ac_cv_sizeof_long_long = $ac_cv_sizeof_fd_set_fds_bits; then
1513   AC_DEFINE([TYPEOF_FD_SET_FDS_BITS], [long long], [Define to a type of the same size as fd_set.fds_bits[[0]]])
1514 fi
1515
1516 AC_MSG_CHECKING(for dladdr in dlfcn.h)
1517 PBX_DLADDR=0
1518 old_LIBS=${LIBS}
1519 LIBS="${LIBS} -ldl"
1520 AC_LINK_IFELSE(
1521         [AC_LANG_PROGRAM([#define _GNU_SOURCE 1
1522 #include <dlfcn.h>],
1523                 [dladdr((void *)0, (void *)0)]
1524         )],
1525         AC_MSG_RESULT(yes)
1526         PBX_DLADDR=1
1527         AC_SUBST([PBX_DLADDR])
1528         AC_DEFINE([HAVE_DLADDR], 1, [Define to 1 if your system has the dladdr() GNU extension]),
1529         AC_MSG_RESULT(no)
1530 )
1531 LIBS=${old_LIBS}
1532
1533 # re-check without -ldl
1534 # Non-Linux platforms like FreeBSD and NetBSD do not need a library libdl.so.
1535 if test "${PBX_DLADDR}" = "0"; then
1536         AC_MSG_CHECKING(for dladdr in dlfcn.h without -ldl)
1537         AC_LINK_IFELSE(
1538                 [AC_LANG_PROGRAM([#define _GNU_SOURCE 1
1539 #include <dlfcn.h>],
1540                         [dladdr((void *)0, (void *)0)]
1541                 )],
1542                 AC_MSG_RESULT(yes)
1543                 PBX_DLADDR=1
1544                 AC_SUBST([PBX_DLADDR])
1545                 AC_DEFINE([HAVE_DLADDR], 1, [Define to 1 if your system has the dladdr() GNU extension]),
1546                 AC_MSG_RESULT(no)
1547         )
1548 fi
1549
1550
1551 # do the package library checks now
1552
1553 AST_EXT_LIB_CHECK([ALSA], [asound], [snd_pcm_open], [alsa/asoundlib.h])
1554
1555 AST_EXT_LIB_CHECK([BFD], [bfd], [bfd_openr], [bfd.h])
1556 # Fedora/RedHat/CentOS require extra libraries
1557 AST_EXT_LIB_CHECK([BFD], [bfd], [bfd_openr], [bfd.h], [-ldl -liberty])
1558 # openSUSE requires -lz
1559 AST_EXT_LIB_CHECK([BFD], [bfd], [bfd_openr], [bfd.h], [-ldl -liberty -lz])
1560
1561 case "${OSARCH}" in
1562 linux*)
1563   AST_EXT_LIB_CHECK([CAP], [cap], [cap_from_text], [sys/capability.h])
1564   ;;
1565 esac
1566
1567 AST_C_DEFINE_CHECK([DAHDI], [DAHDI_RESET_COUNTERS], [dahdi/user.h], [230])
1568 AST_C_DEFINE_CHECK([DAHDI], [DAHDI_DEFAULT_MTU_MRU], [dahdi/user.h], [220])
1569 AST_C_DEFINE_CHECK([DAHDI], [DAHDI_CODE], [dahdi/user.h], [200])
1570
1571 AST_C_DEFINE_CHECK([DAHDI_HALF_FULL], [DAHDI_POLICY_HALF_FULL], [dahdi/user.h])
1572
1573 AST_C_COMPILE_CHECK([DAHDI_LINEREVERSE_VMWI], [struct dahdi_vmwi_info booger], [dahdi/user.h], , [enhanced dahdi vmwi support])
1574
1575 AST_C_COMPILE_CHECK([DAHDI_ECHOCANCEL_FAX_MODE], [int foo = DAHDI_ECHOCANCEL_FAX_MODE], [dahdi/user.h])
1576
1577 AST_C_COMPILE_CHECK([GETIFADDRS], [struct ifaddrs *p; getifaddrs(&p)], [ifaddrs.h], , [getifaddrs() support])
1578 AST_C_COMPILE_CHECK([TIMERFD], [timerfd_create(0,0); timerfd_settime(0,0,NULL,NULL);], [sys/timerfd.h], , [timerfd support])
1579
1580 GSM_INTERNAL="yes"
1581 AC_SUBST(GSM_INTERNAL)
1582 GSM_SYSTEM="yes"
1583 if test "${USE_GSM}" != "no"; then
1584    if test "${GSM_DIR}" = "internal"; then
1585       GSM_SYSTEM="no"
1586    elif test "${GSM_DIR}" != ""; then
1587       GSM_INTERNAL="no"
1588    fi
1589    if test "${GSM_SYSTEM}" = "yes"; then
1590       gsmlibdir=""
1591       if test "x${GSM_DIR}" != "x"; then
1592          if test -d ${GSM_DIR}/lib; then
1593             gsmlibdir="-L${GSM_DIR}/lib"
1594          else
1595             gsmlibdir="-L${GSM_DIR}"
1596          fi
1597       fi
1598       AC_CHECK_LIB([gsm], [gsm_create], AC_DEFINE_UNQUOTED([HAVE_GSM], 1,
1599       [Define to indicate the GSM library]), [], ${gsmlibdir})
1600       if test "${ac_cv_lib_gsm_gsm_create}" = "yes"; then
1601          if test "x${GSM_DIR}" != "x" ; then
1602             AC_CHECK_HEADER([${GSM_DIR}/include/gsm.h], [GSM_HEADER_FOUND=1], [GSM_HEADER_FOUND=0])
1603             AC_CHECK_HEADER([${GSM_DIR}/include/gsm/gsm.h], [GSM_GSM_HEADER_FOUND=1], [GSM_GSM_HEADER_FOUND=0])
1604          else
1605             AC_CHECK_HEADER([gsm.h], [GSM_HEADER_FOUND=1], [GSM_HEADER_FOUND=0])
1606             AC_CHECK_HEADER([gsm/gsm.h], [GSM_GSM_HEADER_FOUND=1], [GSM_GSM_HEADER_FOUND=0])
1607          fi
1608          if test "${GSM_HEADER_FOUND}" = "0" ; then
1609             if test "{GSM_GSM_HEADER_FOUND}" = "0" ; then
1610                if test "x${GSM_MANDATORY}" = "xyes" ; then
1611                   AC_MSG_NOTICE([***])
1612                   AC_MSG_NOTICE([*** It appears that you do not have the gsm development package installed.])
1613                   AC_MSG_NOTICE([*** Please install it to include ${GSM_DESCRIP} support, or re-run configure])
1614                   AC_MSG_NOTICE([*** without explicitly specifying --with-${GSM_OPTION}])
1615                   exit 1
1616                fi
1617             fi
1618          fi
1619          GSM_OK=0
1620          if test "${GSM_HEADER_FOUND}" = "1" ; then
1621             AC_DEFINE_UNQUOTED([HAVE_GSM_HEADER], 1, [Define to indicate that gsm.h has no prefix for its location])
1622             GSM_OK=1
1623          elif test "${GSM_GSM_HEADER_FOUND}" = "1" ; then
1624             AC_DEFINE_UNQUOTED([HAVE_GSM_GSM_HEADER], 1, [Define to indicate that gsm.h is in gsm/gsm.h])
1625             GSM_OK=1
1626          fi
1627          if test "${GSM_OK}" = "1" ; then
1628             GSM_LIB="-lgsm"
1629             if test "x${GSM_DIR}" != "x"; then
1630                GSM_LIB="${gsmlibdir} ${GSM_LIB}"
1631                GSM_INCLUDE="-I${GSM_DIR}/include"
1632             fi
1633             PBX_GSM=1
1634             GSM_INTERNAL="no"
1635          fi
1636       fi
1637    fi
1638    if test "${GSM_INTERNAL}" = "yes"; then
1639       PBX_GSM=1
1640       AC_DEFINE_UNQUOTED([HAVE_GSM_HEADER], 1, [Define to indicate that gsm.h has no prefix for its location])
1641    fi
1642 fi
1643
1644 ILBC_INTERNAL="yes"
1645 AC_SUBST(ILBC_INTERNAL)
1646 ILBC_SYSTEM="yes"
1647 if test "${USE_ILBC}" != "no"; then
1648    if test "${ILBC_DIR}" = "internal"; then
1649       ILBC_SYSTEM="no"
1650    elif test "${ILBC_DIR}" != ""; then
1651       ILBC_INTERNAL="no"
1652    fi
1653    if test "${ILBC_SYSTEM}" = "yes"; then
1654       AST_PKG_CONFIG_CHECK(ILBC, libilbc)
1655       if test "$PBX_ILBC" = "1"; then
1656          ILBC_INTERNAL="no"
1657       fi
1658    fi
1659    if test "${ILBC_INTERNAL}" = "yes"; then
1660       PBX_ILBC=1
1661    fi
1662 fi
1663
1664 AST_EXT_LIB_CHECK([ICONV], [iconv], [iconv_open], [iconv.h])
1665 # GNU libiconv #define's iconv_open to libiconv_open, so we need to search for that symbol
1666 AST_EXT_LIB_CHECK([ICONV], [iconv], [libiconv_open], [iconv.h])
1667 # Some versions of Linux package iconv in glibc
1668 AST_EXT_LIB_CHECK([ICONV], [c], [iconv_close], [iconv.h])
1669
1670 # If ical.h is NOT in the libical directory, then it is of a version insufficient for us.
1671 AST_EXT_LIB_CHECK([ICAL], [ical], [icaltimezone_get_utc_timezone], [libical/ical.h], [${PTHREAD_LIBS}], [${PTHREAD_CFLAGS}])
1672
1673 AST_EXT_LIB_CHECK([IKSEMEL], [iksemel], [iks_start_sasl], [iksemel.h])
1674
1675 if test "${USE_IMAP_TK}" != "no"; then
1676         saved_cppflags="${CPPFLAGS}"
1677         saved_libs="${LIBS}"
1678         switch_to_system_on_failure="no"
1679         if test "${IMAP_TK_DIR}" = ""; then
1680                 IMAP_TK_DIR="`pwd`/../imap-2004g"
1681                 switch_to_system_on_failure="yes"
1682         fi
1683         if test "${IMAP_TK_DIR}" != "system"; then
1684                 AC_MSG_CHECKING(for UW IMAP Toolkit c-client library)
1685                 if test -f "${IMAP_TK_DIR}/c-client/LDFLAGS"; then
1686                 imap_ldflags=`cat ${IMAP_TK_DIR}/c-client/LDFLAGS`
1687                 fi
1688                 imap_libs="${IMAP_TK_DIR}/c-client/c-client.a"
1689                 imap_include="-I${IMAP_TK_DIR}/c-client"
1690         CPPFLAGS="${CPPFLAGS} ${imap_include}"
1691                 LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
1692                 AC_LINK_IFELSE(
1693                 [AC_LANG_PROGRAM(
1694                                 [#include "c-client.h"
1695                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
1696                                 {
1697                                 }
1698                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
1699                                 {
1700                                 }
1701                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
1702                                 {
1703                                 }
1704                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
1705                                 {
1706                                 }
1707                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1708                                 {
1709                                 }
1710                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1711                                 {
1712                                 }
1713                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1714                                 {
1715                                 }
1716                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1717                                 {
1718                                 }
1719                                 void mm_log (char *string,long errflg)
1720                                 {
1721                                 }
1722                                 void mm_dlog (char *string)
1723                                 {
1724                                 }
1725                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1726                                 {
1727                                 }
1728                                 void mm_critical (MAILSTREAM *stream)
1729                                 {
1730                                 }
1731                                 void mm_nocritical (MAILSTREAM *stream)
1732                                 {
1733                                 }
1734                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1735                                 {
1736                                 }
1737                                 void mm_fatal (char *string)
1738                                 {
1739                                 }],
1740                                 [
1741                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
1742                                 ]
1743                         )],
1744                         [ac_cv_imap_tk="yes"],
1745                         [ac_cv_imap_tk="no"]
1746                 )
1747                 if test "${ac_cv_imap_tk}" = "yes"; then
1748                         AC_LINK_IFELSE(
1749                                 [AC_LANG_PROGRAM(
1750                                         [#include "c-client.h"
1751                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
1752                                         {
1753                                         }
1754                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
1755                                         {
1756                                         }
1757                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
1758                                         {
1759                                         }
1760                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
1761                                         {
1762                                         }
1763                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1764                                         {
1765                                         }
1766                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1767                                         {
1768                                         }
1769                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1770                                         {
1771                                         }
1772                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1773                                         {
1774                                         }
1775                                         void mm_log (char *string,long errflg)
1776                                         {
1777                                         }
1778                                         void mm_dlog (char *string)
1779                                         {
1780                                         }
1781                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1782                                         {
1783                                         }
1784                                         void mm_critical (MAILSTREAM *stream)
1785                                         {
1786                                         }
1787                                         void mm_nocritical (MAILSTREAM *stream)
1788                                         {
1789                                         }
1790                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1791                                         {
1792                                         }
1793                                         void mm_fatal (char *string)
1794                                         {
1795                                         }],
1796                                         [
1797                                         long check = mail_expunge_full(NULL, "", 0);
1798                                         ]
1799                                 )],
1800                                 [ac_cv_imap_tk2006="yes"],
1801                                 [ac_cv_imap_tk2006="no"]
1802                         )
1803                 fi
1804                 CPPFLAGS="${saved_cppflags}"
1805                 LIBS="${saved_libs}"
1806                 if test "${ac_cv_imap_tk}" = "no"; then
1807                         AC_MSG_RESULT(no)
1808                         if test "${switch_to_system_on_failure}" = "yes"; then
1809                                 IMAP_TK_DIR="system"
1810                         else #This means they specified a directory. Search for a package installation there too
1811                                 AC_MSG_CHECKING([for system c-client library...])
1812                                 CPPFLAGS="${saved_cppflags}"
1813                                 LIBS="${saved_libs}"
1814                                 imap_include="-I${IMAP_TK_DIR}/include"
1815                                 imap_ldflags="-L${IMAP_TK_DIR}/lib"
1816                                 imap_libs="-lc-client"
1817                                 CPPFLAGS="${CPPFLAGS} ${imap_include}"
1818                                 LIBS="${LIBS} ${imap_libs} ${imap_ldflags}"
1819                                 AC_LINK_IFELSE(
1820                                 [AC_LANG_PROGRAM(
1821                                                 [#include "c-client.h"
1822                                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
1823                                                 {
1824                                                 }
1825                                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
1826                                                 {
1827                                                 }
1828                                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
1829                                                 {
1830                                                 }
1831                                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
1832                                                 {
1833                                                 }
1834                                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1835                                                 {
1836                                                 }
1837                                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1838                                                 {
1839                                                 }
1840                                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1841                                                 {
1842                                                 }
1843                                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1844                                                 {
1845                                                 }
1846                                                 void mm_log (char *string,long errflg)
1847                                                 {
1848                                                 }
1849                                                 void mm_dlog (char *string)
1850                                                 {
1851                                                 }
1852                                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1853                                                 {
1854                                                 }
1855                                                 void mm_critical (MAILSTREAM *stream)
1856                                                 {
1857                                                 }
1858                                                 void mm_nocritical (MAILSTREAM *stream)
1859                                                 {
1860                                                 }
1861                                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1862                                                 {
1863                                                 }
1864                                                 void mm_fatal (char *string)
1865                                                 {
1866                                                 }],
1867                                                 [
1868                                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
1869                                                 ]
1870                                         )],
1871                                         [ac_cv_imap_tk="yes"],
1872                                         [ac_cv_imap_tk="no"]
1873                                 )
1874                                 if test "${ac_cv_imap_tk}" = "yes"; then
1875                                         AC_LINK_IFELSE(
1876                                                 [AC_LANG_PROGRAM(
1877                                                         [#include "c-client.h"
1878                                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
1879                                                         {
1880                                                         }
1881                                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
1882                                                         {
1883                                                         }
1884                                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
1885                                                         {
1886                                                         }
1887                                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
1888                                                         {
1889                                                         }
1890                                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1891                                                         {
1892                                                         }
1893                                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1894                                                         {
1895                                                         }
1896                                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1897                                                         {
1898                                                         }
1899                                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1900                                                         {
1901                                                         }
1902                                                         void mm_log (char *string,long errflg)
1903                                                         {
1904                                                         }
1905                                                         void mm_dlog (char *string)
1906                                                         {
1907                                                         }
1908                                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1909                                                         {
1910                                                         }
1911                                                         void mm_critical (MAILSTREAM *stream)
1912                                                         {
1913                                                         }
1914                                                         void mm_nocritical (MAILSTREAM *stream)
1915                                                         {
1916                                                         }
1917                                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1918                                                         {
1919                                                         }
1920                                                         void mm_fatal (char *string)
1921                                                         {
1922                                                         }],
1923                                                         [
1924                                                         long check = mail_expunge_full(NULL, "", 0);
1925                                                         ]
1926                                                 )],
1927                                                 [ac_cv_imap_tk2006="yes"],
1928                                                 [ac_cv_imap_tk2006="no"]
1929                                         )
1930                                 fi
1931                         fi
1932                 fi
1933         fi
1934         if test "${IMAP_TK_DIR}" = "system"; then
1935                 #We will enter here if user specified "system" or if any of above checks failed
1936                 AC_MSG_CHECKING([for system c-client library...])
1937                 CPPFLAGS="${saved_cppflags}"
1938                 LIBS="${saved_libs}"
1939                 imap_ldflags=""
1940                 imap_libs="-lcrypto -lssl -lc-client"
1941                 imap_include="-DUSE_SYSTEM_IMAP" #Try the imap directory first
1942                 CPPFLAGS="${CPPFLAGS} ${imap_include}"
1943                 LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
1944                 AC_LINK_IFELSE(
1945                 [AC_LANG_PROGRAM(
1946                                 [#include <stdio.h>
1947                                 #include <imap/c-client.h>
1948                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
1949                                 {
1950                                 }
1951                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
1952                                 {
1953                                 }
1954                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
1955                                 {
1956                                 }
1957                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
1958                                 {
1959                                 }
1960                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1961                                 {
1962                                 }
1963                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1964                                 {
1965                                 }
1966                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1967                                 {
1968                                 }
1969                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1970                                 {
1971                                 }
1972                                 void mm_log (char *string,long errflg)
1973                                 {
1974                                 }
1975                                 void mm_dlog (char *string)
1976                                 {
1977                                 }
1978                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1979                                 {
1980                                 }
1981                                 void mm_critical (MAILSTREAM *stream)
1982                                 {
1983                                 }
1984                                 void mm_nocritical (MAILSTREAM *stream)
1985                                 {
1986                                 }
1987                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1988                                 {
1989                                 }
1990                                 void mm_fatal (char *string)
1991                                 {
1992                                 }],
1993                                 [
1994                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
1995                                 ]
1996                         )],
1997                         [ac_cv_imap_tk="yes"],
1998                         [ac_cv_imap_tk="no"]
1999                 )
2000                 if test "${ac_cv_imap_tk}" = "yes"; then
2001                         AC_LINK_IFELSE(
2002                                 [AC_LANG_PROGRAM(
2003                                         [#include <stdio.h>
2004                                         #include <imap/c-client.h>
2005                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
2006                                         {
2007                                         }
2008                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
2009                                         {
2010                                         }
2011                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
2012                                         {
2013                                         }
2014                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
2015                                         {
2016                                         }
2017                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
2018                                         {
2019                                         }
2020                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2021                                         {
2022                                         }
2023                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2024                                         {
2025                                         }
2026                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
2027                                         {
2028                                         }
2029                                         void mm_log (char *string,long errflg)
2030                                         {
2031                                         }
2032                                         void mm_dlog (char *string)
2033                                         {
2034                                         }
2035                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
2036                                         {
2037                                         }
2038                                         void mm_critical (MAILSTREAM *stream)
2039                                         {
2040                                         }
2041                                         void mm_nocritical (MAILSTREAM *stream)
2042                                         {
2043                                         }
2044                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
2045                                         {
2046                                         }
2047                                         void mm_fatal (char *string)
2048                                         {
2049                                         }],
2050                                         [
2051                                         long check = mail_expunge_full(NULL, "", 0);
2052                                         ]
2053                                 )],
2054                                 [ac_cv_imap_tk2006="yes"],
2055                                 [ac_cv_imap_tk2006="no"]
2056                         )
2057                 else #looking in imap directory didn't work, try c-client
2058                         imap_ldflags=""
2059                         imap_libs="-lcrypto -lssl -lc-client"
2060                         imap_include="-DUSE_SYSTEM_CCLIENT"
2061                         CPPFLAGS="${saved_cppflags}"
2062                         LIBS="${saved_libs}"
2063                         CPPFLAGS="${CPPFLAGS} ${imap_include}"
2064                         LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
2065                         AC_LINK_IFELSE(
2066                         [AC_LANG_PROGRAM(
2067                                         [#include <stdio.h>
2068                                         #include <c-client/c-client.h>
2069                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
2070                                         {
2071                                         }
2072                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
2073                                         {
2074                                         }
2075                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
2076                                         {
2077                                         }
2078                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
2079                                         {
2080                                         }
2081                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
2082                                         {
2083                                         }
2084                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2085                                         {
2086                                         }
2087                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2088                                         {
2089                                         }
2090                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
2091                                         {
2092                                         }
2093                                         void mm_log (char *string,long errflg)
2094                                         {
2095                                         }
2096                                         void mm_dlog (char *string)
2097                                         {
2098                                         }
2099                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
2100                                         {
2101                                         }
2102                                         void mm_critical (MAILSTREAM *stream)
2103                                         {
2104                                         }
2105                                         void mm_nocritical (MAILSTREAM *stream)
2106                                         {
2107                                         }
2108                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
2109                                         {
2110                                         }
2111                                         void mm_fatal (char *string)
2112                                         {
2113                                         }],
2114                                         [
2115                                         MAILSTREAM *foo = mail_open(NULL, "", 0);
2116                                         ]
2117                                 )],
2118                                 [ac_cv_imap_tk="yes"],
2119                                 [ac_cv_imap_tk="no"]
2120                         )
2121                         if test "${ac_cv_imap_tk}" = "no"; then
2122                                 imap_libs="-lcrypto -lssl -lc-client4"
2123                                 LIBS="${saved_libs} ${imap_libs} "`echo ${imap_ldflags}`
2124                                 AC_LINK_IFELSE(
2125                                         [AC_LANG_PROGRAM(
2126                                                 [#include <stdio.h>
2127                                                 #include <c-client/c-client.h>
2128                                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
2129                                                 {
2130                                                 }
2131                                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
2132                                                 {
2133                                                 }
2134                                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
2135                                                 {
2136                                                 }
2137                                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
2138                                                 {
2139                                                 }
2140                                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
2141                                                 {
2142                                                 }
2143                                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2144                                                 {
2145                                                 }
2146                                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2147                                                 {
2148                                                 }
2149                                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
2150                                                 {
2151                                                 }
2152                                                 void mm_log (char *string,long errflg)
2153                                                 {
2154                                                 }
2155                                                 void mm_dlog (char *string)
2156                                                 {
2157                                                 }
2158                                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
2159                                                 {
2160                                                 }
2161                                                 void mm_critical (MAILSTREAM *stream)
2162                                                 {
2163                                                 }
2164                                                 void mm_nocritical (MAILSTREAM *stream)
2165                                                 {
2166                                                 }
2167                                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
2168                                                 {
2169                                                 }
2170                                                 void mm_fatal (char *string)
2171                                                 {
2172                                                 }],
2173                                                 [
2174                                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
2175                                                 ]
2176                                         )],
2177                                         [ac_cv_imap_tk="yes"],
2178                                         [ac_cv_imap_tk="no"]
2179                                 )
2180                         fi
2181                         if test "${ac_cv_imap_tk}" = "yes"; then
2182                                 AC_LINK_IFELSE(
2183                                         [AC_LANG_PROGRAM(
2184                                                 [#include <stdio.h>
2185                                                 #include <c-client/c-client.h>
2186                                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
2187                                                 {
2188                                                 }
2189                                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
2190                                                 {
2191                                                 }
2192                                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
2193                                                 {
2194                                                 }
2195                                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
2196                                                 {
2197                                                 }
2198                                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
2199                                                 {
2200                                                 }
2201                                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2202                                                 {
2203                                                 }
2204                                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
2205                                                 {
2206                                                 }
2207                                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
2208                                                 {
2209                                                 }
2210                                                 void mm_log (char *string,long errflg)
2211                                                 {
2212                                                 }
2213                                                 void mm_dlog (char *string)
2214                                                 {
2215                                                 }
2216                                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
2217                                                 {
2218                                                 }
2219                                                 void mm_critical (MAILSTREAM *stream)
2220                                                 {
2221                                                 }
2222                                                 void mm_nocritical (MAILSTREAM *stream)
2223                                                 {
2224                                                 }
2225                                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
2226                                                 {
2227                                                 }
2228                                                 void mm_fatal (char *string)
2229                                                 {
2230                                                 }],
2231                                                 [
2232                                                 long check = mail_expunge_full(NULL, "", 0);
2233                                                 ]
2234                                         )],
2235                                         [ac_cv_imap_tk2006="yes"],
2236                                         [ac_cv_imap_tk2006="no"]
2237                                 )
2238                         fi
2239                 fi
2240         fi
2241         if test "${ac_cv_imap_tk}" = "yes"; then
2242                 AC_MSG_RESULT(yes)
2243                 IMAP_TK_LIB="${imap_libs} "`echo ${imap_ldflags}`
2244                 IMAP_TK_INCLUDE="${imap_include}"
2245                 PBX_IMAP_TK=1
2246                 AC_DEFINE([HAVE_IMAP_TK], 1, [Define if your system has the UW IMAP Toolkit c-client library.])
2247                 if test "${ac_cv_imap_tk2006}" = "yes"; then
2248                         AC_DEFINE([HAVE_IMAP_TK2006], 1, [Define if your system has the UW IMAP Toolkit c-client library version 2006 or greater.])
2249                 fi
2250         else
2251                 AC_MSG_RESULT(no)
2252         fi
2253         CPPFLAGS="${saved_cppflags}"
2254         LIBS="${saved_libs}"
2255 fi
2256
2257 AST_EXT_LIB_CHECK([IODBC], [iodbc], [SQLConnect], [sql.h], [${PTHREAD_LIBS}], [${PTHREAD_CFLAGS}])
2258
2259 AST_EXT_LIB_CHECK([INOTIFY], [c], [inotify_init], [sys/inotify.h])
2260
2261 AST_EXT_LIB_CHECK([JACK], [jack], [jack_activate], [jack/jack.h])
2262
2263 # BSD (and OS X) equivalent of inotify
2264 AST_EXT_LIB_CHECK([KQUEUE], [c], [kqueue], [sys/event.h])
2265
2266 # 64-bit version of kevent (from kqueue) on OS X
2267 AC_CHECK_FUNCS([kevent64])
2268
2269 AST_EXT_LIB_CHECK([LDAP], [ldap], [ldap_initialize], [ldap.h])
2270
2271 AST_EXT_LIB_CHECK([MISDN], [mISDN], [mISDN_open], [mISDNuser/mISDNlib.h])
2272
2273 if test "${PBX_MISDN}" = 1; then
2274    AST_EXT_LIB_CHECK([ISDNNET], [isdnnet], [init_manager], [mISDNuser/isdn_net.h], [-lmISDN -lpthread])
2275    AST_EXT_LIB_CHECK([SUPPSERV], [suppserv], [encodeFac], [mISDNuser/suppserv.h])
2276    AST_C_DEFINE_CHECK([MISDN_FAC_RESULT], [Fac_RESULT], [mISDNuser/suppserv.h])
2277    AST_C_DEFINE_CHECK([MISDN_FAC_ERROR], [Fac_ERROR], [mISDNuser/suppserv.h])
2278    AC_CHECK_HEADER([linux/mISDNdsp.h], [AC_DEFINE_UNQUOTED([MISDN_1_2], 1, [Build chan_misdn for mISDN 1.2 or later.])])
2279    AC_CHECK_MEMBER([Q931_info_t.redirect_dn], [], [PBX_MISDN=0], [#include <mISDNuser/mISDNlib.h>])
2280 fi
2281
2282
2283 AST_EXT_TOOL_CHECK([MYSQLCLIENT], [mysql_config])
2284
2285 if test "${PBX_MYSQLCLIENT}" = 1; then
2286    AC_MSG_CHECKING(for MySQL client bool support)
2287    AC_LINK_IFELSE(
2288            [AC_LANG_PROGRAM([#include <mysql/mysql.h>],
2289                    [bool test = 1;])],
2290            AC_MSG_RESULT(yes)
2291            AC_DEFINE(HAVE_MYSQLCLIENT_BOOL, 1, [Define to 1 if mysql/mysql.h has bool defined.]),
2292            AC_MSG_RESULT(no)
2293    )
2294    AC_MSG_CHECKING(for MySQL client my_bool support)
2295    AC_LINK_IFELSE(
2296            [AC_LANG_PROGRAM([#include <mysql/mysql.h>],
2297                    [my_bool test = 1;])],
2298            AC_MSG_RESULT(yes)
2299            AC_DEFINE(HAVE_MYSQLCLIENT_MY_BOOL, 1, [Define to 1 if mysql/mysql.h has my_bool defined.]),
2300            AC_MSG_RESULT(no)
2301    )
2302 fi
2303
2304 AST_EXT_LIB_CHECK([NBS], [nbs], [nbs_connect], [nbs.h])
2305
2306 AST_EXT_TOOL_CHECK([NEON], [neon-config])
2307
2308 AST_EXT_TOOL_CHECK([NEON29], [neon-config], , [--libs],
2309 [#include <ne_auth.h>],
2310 [#ifndef NE_AUTH_NTLM
2311 #error Need libneon >= 0.29.0
2312 #endif])
2313
2314 AST_EXT_TOOL_CHECK([NETSNMP], [net-snmp-config], , [--agent-libs],
2315 [#include <net-snmp/net-snmp-config.h>
2316 #include <net-snmp/net-snmp-includes.h>
2317 #include <net-snmp/agent/net-snmp-agent-includes.h>],
2318 [int callback = snmp_register_callback(0, 0, NULL, NULL)])
2319
2320 AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h])
2321
2322 # Check that unbound is installed and the version code fragment compiles
2323 AST_EXT_LIB_EXTRA_CHECK([UNBOUND], [unbound], [ub_ctx_delete], [unbound.h],
2324    [], [], [
2325       AC_LANG_PROGRAM( [#include <unbound.h>],
2326          [
2327             #if (UNBOUND_VERSION_MAJOR < 1 || (UNBOUND_VERSION_MAJOR == 1 && UNBOUND_VERSION_MINOR < 5 ))
2328             #error "Unbound version must be >= 1.5"
2329             #endif
2330          ]
2331       )
2332    ], [unbound version >= 1.5])
2333
2334 AST_EXT_LIB_CHECK([UNIXODBC], [odbc], [SQLConnect], [sql.h])
2335
2336 AST_EXT_LIB_CHECK([OGG], [ogg], [ogg_stream_init], [ogg/ogg.h])
2337
2338 # Non-glibc platforms require libexecinfo for backtrace support
2339 AST_EXT_LIB_CHECK([BKTR], [execinfo], [backtrace], [execinfo.h])
2340 # Linux, however, has backtrace directly in glibc
2341 AST_EXT_LIB_CHECK([BKTR], [c], [backtrace], [execinfo.h])
2342
2343 AST_EXT_LIB_CHECK([BLUETOOTH], [bluetooth], [ba2str], [bluetooth/bluetooth.h])
2344
2345 AST_EXT_LIB_CHECK([BEANSTALK], [beanstalk], [bs_version], [beanstalk.h])
2346
2347 # possible places for oss definitions
2348 AST_EXT_LIB_CHECK([OSS], [ossaudio], [], [linux/soundcard.h])
2349 AST_EXT_LIB_CHECK([OSS], [ossaudio], [], [sys/soundcard.h])
2350 AST_EXT_LIB_CHECK([OSS], [ossaudio], [oss_ioctl_mixer], [soundcard.h])
2351
2352 PG_CONFIG=No
2353 if test "${USE_PGSQL}" != "no"; then
2354    if test "x${PGSQL_DIR}" != "x"; then
2355       AC_PATH_TOOL([PG_CONFIG], [pg_config], No, [${PGSQL_DIR}/bin])
2356       if test x"${PG_CONFIG}" = xNo; then
2357          AC_MSG_NOTICE([***])
2358          AC_MSG_NOTICE([*** pg_config was not found in the path you specified:])
2359          AC_MSG_NOTICE([*** ${PGSQL_DIR}/bin])
2360          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
2361          AC_MSG_NOTICE([*** including --without-postgres])
2362          exit 1
2363       fi
2364    else
2365       AC_PATH_TOOL([PG_CONFIG], [pg_config], No)
2366    fi
2367 fi
2368 if test "${PG_CONFIG}" != No; then
2369    PGSQL_libdir=`${PG_CONFIG} --libdir`
2370    PGSQL_includedir=`${PG_CONFIG} --includedir`
2371    if test "x$?" != "x0" ; then
2372       if test -n "${PGSQL_MANDATORY}" ; then
2373          AC_MSG_NOTICE([***])
2374          AC_MSG_NOTICE([*** The PostgreSQL installation on this system appears to be broken.])
2375          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
2376          AC_MSG_NOTICE([*** including --without-postgres])
2377          exit 1
2378           fi
2379    else
2380       AC_CHECK_LIB([pq], [PQescapeStringConn], AC_DEFINE_UNQUOTED([HAVE_PGSQL], 1,
2381       [Define to indicate the PostgreSQL library]), [], -L${PGSQL_libdir} -lz)
2382
2383       AC_MSG_CHECKING(for pg_encoding_to_char within Postgres headers)
2384       old_CFLAGS=${CFLAGS}
2385       CFLAGS="${CFLAGS} -I${PGSQL_includedir} -Werror"
2386       old_LDFLAGS=${LDFLAGS}
2387       LDFLAGS="${LDFLAGS} -L${PGSQL_libdir} -lpq -lz"
2388       AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <libpq-fe.h>],
2389           [const char *foo = pg_encoding_to_char(1)])],
2390         [AC_MSG_RESULT(yes)
2391          AC_DEFINE_UNQUOTED([HAVE_PGSQL_pg_encoding_to_char], 1, [Define to indicate presence of the pg_encoding_to_char API.])],
2392         [AC_MSG_RESULT(no)])
2393       CFLAGS=${old_CFLAGS}
2394       LDFLAGS=${old_LDFLAGS}
2395
2396       if test "${ac_cv_lib_pq_PQescapeStringConn}" = "yes"; then
2397          PGSQL_LIB="-L${PGSQL_libdir} -lpq -lz"
2398          PGSQL_INCLUDE="-I${PGSQL_includedir}"
2399          PBX_PGSQL=1
2400       elif test -n "${PGSQL_MANDATORY}";
2401       then
2402          AC_MSG_NOTICE([***])
2403          AC_MSG_NOTICE([*** The PostgreSQL installation on this system appears to be broken.])
2404          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
2405          AC_MSG_NOTICE([*** including --without-postgres])
2406          exit 1
2407       fi
2408    fi
2409 fi
2410
2411 if test "$USE_PJPROJECT" != "no" ; then
2412    if test "$PJPROJECT_BUNDLED" = "no" ; then
2413       AST_PKG_CONFIG_CHECK([PJPROJECT], [libpjproject])
2414       if test "x$PBX_PJPROJECT" = "x1" ; then
2415          AST_EXT_LIB_CHECK([PJSIP_DLG_CREATE_UAS_AND_INC_LOCK], [pjsip], [pjsip_dlg_create_uas_and_inc_lock], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2416          AST_EXT_LIB_CHECK([PJ_TRANSACTION_GRP_LOCK], [pjsip], [pjsip_tsx_create_uac2], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2417
2418          saved_cppflags="${CPPFLAGS}"
2419          saved_libs="${LIBS}"
2420          CPPFLAGS="${CPPFLAGS} ${PJPROJECT_CFLAGS}"
2421          LIBS="${LIBS} ${PJPROJECT_LIB}"
2422          AST_C_COMPILE_CHECK([PJSIP_REPLACE_MEDIA_STREAM], [pjmedia_mod_offer_flag flag = PJMEDIA_SDP_NEG_ALLOW_MEDIA_CHANGE], [pjmedia.h])
2423          LIBS="${saved_libs}"
2424          CPPFLAGS="${saved_cppflags}"
2425
2426          AST_EXT_LIB_CHECK([PJSIP_GET_DEST_INFO], [pjsip], [pjsip_get_dest_info], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2427          AST_EXT_LIB_CHECK([PJ_SSL_CERT_LOAD_FROM_FILES2], [pj], [pj_ssl_cert_load_from_files2], [pjlib.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2428          AST_EXT_LIB_CHECK([PJSIP_EXTERNAL_RESOLVER], [pjsip], [pjsip_endpt_set_ext_resolver], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2429
2430          saved_cppflags="${CPPFLAGS}"
2431          saved_libs="${LIBS}"
2432          CPPFLAGS="${CPPFLAGS} ${PJPROJECT_CFLAGS}"
2433          LIBS="${LIBS} ${PJPROJECT_LIB}"
2434          AST_C_COMPILE_CHECK([PJSIP_TLS_TRANSPORT_PROTO], [struct pjsip_tls_setting setting; int proto; proto = setting.proto;], [pjsip.h])
2435          AST_C_COMPILE_CHECK([PJSIP_INV_ACCEPT_MULTIPLE_SDP_ANSWERS], [pjsip_cfg()->endpt.accept_multiple_sdp_answers = 0;], [pjsip.h])
2436          AST_C_COMPILE_CHECK([PJSIP_ENDPOINT_COMPACT_FORM], [pjsip_cfg()->endpt.use_compact_form = PJ_TRUE;], [pjsip.h])
2437          AST_C_COMPILE_CHECK([PJSIP_TRANSPORT_DISABLE_CONNECTION_REUSE], [struct pjsip_tpselector sel; sel.disable_connection_reuse = PJ_TRUE;], [pjsip.h])
2438          AST_C_COMPILE_CHECK([PJSIP_OAUTH_AUTHENTICATION], [struct pjsip_oauth_credential credential;], [pjsip.h])
2439          AC_MSG_CHECKING(for pjproject on_valid_pair callback)
2440          AC_LINK_IFELSE(
2441             [AC_LANG_PROGRAM(
2442                [#include <pjsip.h>
2443                #include <pjsip_ua.h>
2444                #include <pjnath.h>
2445                void on_valid_pair(pj_ice_sess *ice) {}
2446                void on_ice_complete(pj_ice_sess *ice, pj_status_t status) {}
2447                void on_rx_data(pj_ice_sess *ice, unsigned comp_id, unsigned transport_id, void *pkt, pj_size_t size, const pj_sockaddr_t *src_addr, unsigned src_addr_len) {}
2448                pj_status_t on_tx_pkt(pj_ice_sess *ice, unsigned comp_id, unsigned transport_id, const void *pkt, pj_size_t size, const pj_sockaddr_t *dst_addr, unsigned dst_addr_len) {}],
2449                [pj_ice_sess_cb ice_sess_cb = {
2450                   .on_valid_pair = on_valid_pair,
2451                   .on_ice_complete = on_ice_complete,
2452                   .on_rx_data = on_rx_data,
2453                   .on_tx_pkt = on_tx_pkt,
2454                };])],
2455             AC_MSG_RESULT(yes)
2456             AC_DEFINE(HAVE_PJPROJECT_ON_VALID_ICE_PAIR_CALLBACK, 1, [Define to 1 if on_valid_pair callback is present.]),
2457             AC_MSG_RESULT(no)
2458          )
2459          LIBS="${saved_libs}"
2460          CPPFLAGS="${saved_cppflags}"
2461
2462          AST_EXT_LIB_CHECK([PJSIP_EVSUB_GRP_LOCK], [pjsip], [pjsip_evsub_add_ref], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2463          AST_EXT_LIB_CHECK([PJSIP_INV_SESSION_REF], [pjsip], [pjsip_inv_add_ref], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2464          AST_EXT_LIB_CHECK([PJSIP_AUTH_CLT_DEINIT], [pjsip], [pjsip_auth_clt_deinit], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2465          AST_EXT_LIB_CHECK([PJSIP_TSX_LAYER_FIND_TSX2], [pjsip], [pjsip_tsx_layer_find_tsx2], [pjsip.h], [$PJPROJECT_LIB], [$PJPROJECT_CFLAGS])
2466       fi
2467    fi
2468
2469    if test "x$PBX_PJPROJECT" = "x1" ; then
2470       if test "x${AST_DEVMODE}" = "xyes" ; then
2471          AC_SUBST([PYTHONDEV_LIB])
2472          AC_SUBST([PYTHONDEV_INCLUDE])
2473          AST_PKG_CONFIG_CHECK([PYTHONDEV], [python-2.7])
2474          AST_PKG_CONFIG_CHECK([PYTHONDEV], [python2])
2475          AST_PKG_CONFIG_CHECK([PYTHONDEV], [python])
2476          # The PJProject offers a C extension to Python. That wrapper is used by the
2477          # Asterisk Test Framework, which requires Asterisk to be in Developer Mode.
2478          # However, the used wrapper (called 'PJSUA Python') is deprecated and was not
2479          # ported from Python 2.7 to Python 3.x. This is confirmed; it simply does not
2480          # build. For more see <http://www.pjsip.org/trac/wiki/Python_SIP_Tutorial>.
2481          # Therefore, the C libraries for Python 3 are of no help in Asterisk:
2482          #AST_PKG_CONFIG_CHECK([PYTHONDEV], [python3])
2483       fi
2484    fi
2485 fi
2486
2487 AST_EXT_LIB_CHECK([POPT], [popt], [poptStrerror], [popt.h])
2488
2489 AST_PKG_CONFIG_CHECK([PORTAUDIO], [portaudio-2.0])
2490 AST_EXT_LIB_CHECK([PORTAUDIO], [portaudio], [Pa_GetDeviceCount], [portaudio.h])
2491
2492 AST_EXT_LIB_CHECK([PRI], [pri], [pri_connected_line_update], [libpri.h])
2493 if test "x$PBX_PRI" = "x1" ; then
2494    AST_EXT_LIB_CHECK([PRI_SETUP_ACK_INBAND], [pri], [pri_setup_ack], [libpri.h])
2495    AST_EXT_LIB_CHECK([PRI_L2_PERSISTENCE], [pri], [pri_persistent_layer2_option], [libpri.h])
2496    AST_EXT_LIB_CHECK([PRI_DATETIME_SEND], [pri], [pri_date_time_send_option], [libpri.h])
2497    AST_EXT_LIB_CHECK([PRI_MWI_V2], [pri], [pri_mwi_indicate_v2], [libpri.h])
2498    AST_EXT_LIB_CHECK([PRI_DISPLAY_TEXT], [pri], [pri_display_text], [libpri.h])
2499    AST_EXT_LIB_CHECK([PRI_MWI], [pri], [pri_mwi_indicate], [libpri.h])
2500    AST_EXT_LIB_CHECK([PRI_MCID], [pri], [pri_mcid_enable], [libpri.h])
2501    AST_EXT_LIB_CHECK([PRI_CALL_WAITING], [pri], [pri_connect_ack_enable], [libpri.h])
2502    AST_EXT_LIB_CHECK([PRI_AOC_EVENTS], [pri], [pri_aoc_events_enable], [libpri.h])
2503    AST_EXT_LIB_CHECK([PRI_TRANSFER], [pri], [pri_transfer_enable], [libpri.h])
2504    AST_EXT_LIB_CHECK([PRI_CCSS], [pri], [pri_cc_enable], [libpri.h])
2505    AST_EXT_LIB_CHECK([PRI_HANGUP_FIX], [pri], [pri_hangup_fix_enable], [libpri.h])
2506    AST_EXT_LIB_CHECK([PRI_SUBADDR], [pri], [pri_sr_set_called_subaddress], [libpri.h])
2507    AST_EXT_LIB_CHECK([PRI_CALL_HOLD], [pri], [pri_hold_enable], [libpri.h])
2508    AST_EXT_LIB_CHECK([PRI_CALL_REROUTING], [pri], [pri_reroute_enable], [libpri.h])
2509    AST_EXT_LIB_CHECK([PRI_SETUP_KEYPAD], [pri], [pri_sr_set_keypad_digits], [libpri.h])
2510
2511    # ------------------------------------v
2512    # TODO: The code can be changed to always include these features now.
2513    # These features will always be present if pri_connected_line_update is available.
2514    AST_EXT_LIB_CHECK([PRI_PROG_W_CAUSE], [pri], [pri_progress_with_cause], [libpri.h])
2515    AST_EXT_LIB_CHECK([PRI_INBANDDISCONNECT], [pri], [pri_set_inbanddisconnect], [libpri.h])
2516    AST_EXT_LIB_CHECK([PRI_SERVICE_MESSAGES], [pri], [pri_maintenance_service], [libpri.h])
2517    AST_EXT_LIB_CHECK([PRI_REVERSE_CHARGE], [pri], [pri_sr_set_reversecharge], [libpri.h])
2518    # ------------------------------------^
2519 fi
2520
2521 AST_EXT_LIB_CHECK([RESAMPLE], [resample], [resample_open], [libresample.h], [-lm])
2522 AST_EXT_LIB_CHECK([FFTW3], [fftw3], [fftw_malloc], [fftw3.h])
2523 AST_EXT_LIB_CHECK([SNDFILE], [sndfile], [sf_open], [sndfile.h])
2524
2525 AST_C_COMPILE_CHECK([SPANDSP], [
2526                 #if SPANDSP_RELEASE_DATE < 20080516
2527                 #error "spandsp 0.0.5 or greater is required"
2528                 #endif
2529         ], [spandsp/version.h], , [minimum version of SpanDSP])
2530
2531 if test "x${PBX_SPANDSP}" = "x1" ; then
2532         # We found the correct version in the header, now let's make sure it links
2533         # properly, and that libtiff is available
2534         PBX_SPANDSP=0
2535         AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [span_set_message_handler], [spandsp.h], [-ltiff])
2536 fi
2537
2538 if test "x${PBX_SPANDSP}" = "x1" ; then
2539         # We also need t38_terminal_init()
2540         PBX_SPANDSP=0
2541         AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [t38_terminal_init], [spandsp.h], [-ltiff])
2542 fi
2543
2544 # Check for libss7 v2.0 branch compatible version.
2545 AST_EXT_LIB_CHECK([SS7], [ss7], [ss7_set_isup_timer], [libss7.h])
2546
2547 AST_EXT_LIB_CHECK([OPENR2], [openr2], [openr2_chan_new], [openr2.h])
2548
2549 AST_EXT_LIB_CHECK([OPUS], [opus], [opus_encoder_create], [opus/opus.h])
2550 # opusfile.h includes <opus_multistream.h> so we need to make sure that
2551 # either $OPUS_INCLUDE or /usr/include/opus is added to the search path.
2552 __opus_include=${OPUS_INCLUDE}
2553 if test -z "$__opus_include" -o x"$__opus_include" = x" " ; then
2554         __opus_include=-I/usr/include/opus
2555 fi
2556 AST_EXT_LIB_CHECK([OPUSFILE], [opusfile], [op_open_callbacks], [opus/opusfile.h], [], [$__opus_include])
2557
2558 for ver in ${LUA_VERSIONS:-5.4 5.3 5.2 5.1}; do
2559         AST_EXT_LIB_CHECK([LUA], lua${ver}, [luaL_newstate], lua${ver}/lua.h, [-lm])
2560         if test "x${PBX_LUA}" = "x1" ; then
2561                 if test x"${LUA_DIR}" = x; then
2562                         LUA_INCLUDE="${LUA_INCLUDE} -I/usr/include/lua${ver}"
2563                 else
2564                         LUA_INCLUDE="${LUA_INCLUDE} -I${LUA_DIR}/lua${ver}"
2565                 fi
2566                 break;
2567         fi
2568 done
2569
2570 # Some distributions (like openSUSE and NetBSD) remove the 5.x suffix.
2571 if test "x${LUA_VERSIONS}" = "x"; then
2572         AST_EXT_LIB_CHECK([LUA], [lua], [luaL_newstate], [lua.h], [-lm])
2573 fi
2574
2575 # Accept either RADIUS client library, their APIs are fully compatible,
2576 # just different header filenames and different SONAMEs
2577 AST_EXT_LIB_CHECK([RADIUS], [freeradius-client], [rc_read_config], [freeradius-client.h])
2578 if test "x${PBX_RADIUS}" = "x1"; then
2579         AC_DEFINE(RADIUS_HEADER_STR, [<freeradius-client.h>], [Name of RADIUS library include header])
2580 else
2581         AST_EXT_LIB_CHECK([RADIUS], [radiusclient-ng], [rc_read_config], [radiusclient-ng.h])
2582         if test "x${PBX_RADIUS}" = "x1"; then
2583                 AC_DEFINE(RADIUS_HEADER_STR, [<radiusclient-ng.h>], [Name of RADIUS library include header])
2584         else
2585                 AST_EXT_LIB_CHECK([RADIUS], [radcli], [rc_read_config], [radcli/radcli.h])
2586                 if test "x${PBX_RADIUS}" = "x1"; then
2587                         AC_DEFINE(RADIUS_HEADER_STR, [<radcli/radcli.h>], [Name of RADIUS library include header])
2588                 fi
2589         fi
2590 fi
2591
2592 AST_EXT_LIB_CHECK([CODEC2], [codec2], [codec2_create], [codec2/codec2.h])
2593
2594 AST_EXT_LIB_CHECK([COROSYNC], [cpg], [cpg_join], [corosync/cpg.h], [-lcpg -lcfg])
2595 AST_EXT_LIB_CHECK([COROSYNC_CFG_STATE_TRACK], [cfg], [corosync_cfg_state_track], [corosync/cfg.h], [-lcfg])
2596
2597 AST_EXT_LIB_CHECK([SPEEX], [speex], [speex_encode], [speex/speex.h], [-lm])
2598
2599 # See if the main speex library contains the preprocess functions
2600 AST_EXT_LIB_CHECK([SPEEX_PREPROCESS], [speex], [speex_preprocess_ctl], [speex/speex.h], [-lm])
2601 if test "${PBX_SPEEX_PREPROCESS}" = 1; then
2602    PBX_SPEEX_PREPROCESS=1
2603 fi
2604
2605 AST_EXT_LIB_CHECK([SPEEXDSP], [speexdsp], [speex_preprocess_ctl], [speex/speex.h], [-lm])
2606 if test "${PBX_SPEEXDSP}" = 1; then
2607    PBX_SPEEX_PREPROCESS=1
2608 fi
2609
2610 AC_SUBST(PBX_SPEEX_PREPROCESS)
2611
2612 AST_EXT_LIB_CHECK([SQLITE], [sqlite], [sqlite_exec], [sqlite.h])
2613
2614 AST_EXT_LIB_CHECK([SQLITE3], [sqlite3], [sqlite3_open], [sqlite3.h], [${PTHREAD_LIBS}], [${PTHREAD_CFLAGS}])
2615
2616 if test "${PBX_SQLITE3}" != 1; then
2617         AC_MSG_ERROR(*** Asterisk now uses SQLite3 for the internal Asterisk database.)
2618         AC_MSG_ERROR(*** Please install the SQLite3 development package.)
2619         exit 1
2620 fi
2621
2622 # Find crypt support
2623 # * -lcrypt on *NIX
2624 # * in libsystem on OS X
2625 AST_EXT_LIB_CHECK([LIBCRYPT], [crypt], [crypt], [crypt.h])
2626 AC_CHECK_FUNC([crypt], [SYSCRYPT=true], [SYSCRYPT=""])
2627
2628 if test "x$LIBCRYPT_LIB" != "x" ; then
2629     CRYPT_LIB="$LIBCRYPT_LIB"
2630     CRYPT_INCLUDE="$LIBCRYPT_INCLUDE"
2631     AC_DEFINE([HAVE_CRYPT], [1], [Define to 1 if you have the 'crypt' function.])
2632 elif test "x$SYSCRYPT" != "x" ; then
2633     CRYPT_LIB=""
2634     CRYPT_INCLUDE=""
2635     AC_DEFINE([HAVE_CRYPT], [1], [Define to 1 if you have the 'crypt' function.])
2636 fi
2637
2638 AC_SUBST(CRYPT_LIB)
2639 AC_SUBST(CRYPT_INCLUDE)
2640
2641 # Find crypt_r support
2642 AC_CHECK_LIB([crypt], [crypt_r],
2643     [AC_DEFINE([HAVE_CRYPT_R], [1], [Define to 1 if you have the 'crypt_r' function.])])
2644
2645 AST_EXT_LIB_CHECK([CRYPTO], [crypto], [AES_encrypt], [openssl/aes.h])
2646
2647 if test "$PBX_CRYPTO" = "1";
2648 then
2649         AST_EXT_LIB_CHECK([OPENSSL], [ssl], [SSL_connect], [openssl/ssl.h], [-lcrypto])
2650         AST_EXT_LIB_CHECK([OPENSSL_BIO_METHOD], [ssl], [BIO_meth_new], [openssl/ssl.h], [-lcrypto])
2651 fi
2652
2653 if test "$PBX_OPENSSL" = "1";
2654 then
2655         AST_CHECK_OSPTK([4], [0], [0])
2656 fi
2657
2658 AST_EXT_LIB_CHECK([SRTP], [srtp2], [srtp_init], [srtp2/srtp.h], [], [], [2])
2659 AST_EXT_LIB_CHECK_SHARED([SRTP], [srtp2], [srtp_init], [srtp2/srtp.h], [], [], [], [
2660     AC_MSG_WARN([***])
2661     AC_MSG_WARN([*** libsrtp2 could not be linked as a shared object.])
2662     AC_MSG_WARN([*** Try compiling libsrtp2 manually. Configure libsrtp2])
2663     AC_MSG_WARN([*** with ./configure --prefix=/usr replacing /usr with])
2664     AC_MSG_WARN([*** the prefix of your choice, and then make with])
2665     AC_MSG_WARN([*** 'make libsrtp2.so'])
2666     AC_MSG_WARN([***])
2667     AC_MSG_WARN([*** After re-installing libsrtp2, re-run the Asterisk])
2668     AC_MSG_WARN([*** configure script.])
2669     AC_MSG_WARN([***])
2670     AC_MSG_WARN([*** If you do not need SRTP support re-run configure])
2671     AC_MSG_WARN([*** with the --without-srtp option.])
2672     exit 1
2673 ])
2674
2675 if test "x$PBX_SRTP" = x1;
2676 then
2677     AST_EXT_LIB_CHECK([SRTP_256], [srtp2], [srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80])
2678     AST_EXT_LIB_CHECK([SRTP_192], [srtp2], [srtp_crypto_policy_set_aes_cm_192_hmac_sha1_80])
2679     AST_EXT_LIB_CHECK([SRTP_GCM], [srtp2], [srtp_crypto_policy_set_aes_gcm_128_8_auth])
2680     AST_EXT_LIB_CHECK([SRTP_SHUTDOWN], [srtp2], [srtp_shutdown], [srtp2/srtp.h])
2681     AST_EXT_LIB_CHECK([SRTP_GET_VERSION], [srtp2], [srtp_get_version_string], [srtp2/srtp.h])
2682
2683     # libsrtp2 removed support for PRNG, so we require OpenSSL
2684     if test "x$PBX_OPENSSL" != x1;
2685     then
2686         AC_MSG_WARN([***])
2687         AC_MSG_WARN([*** OpenSSL required when using libsrtp2, checking for libsrtp instead.])
2688         AC_MSG_WARN([***])
2689         PBX_SRTP=0
2690     fi
2691 fi
2692
2693 if test "x$PBX_SRTP" != x1;
2694 then
2695     AST_EXT_LIB_CHECK([SRTP], [srtp], [srtp_init], [srtp/srtp.h], [], [], [1])
2696     AST_EXT_LIB_CHECK_SHARED([SRTP], [srtp], [srtp_init], [srtp/srtp.h], [], [], [], [
2697         AC_MSG_WARN([***])
2698         AC_MSG_WARN([*** libsrtp could not be linked as a shared object.])
2699         AC_MSG_WARN([*** Try compiling libsrtp manually. Configure libsrtp])
2700         AC_MSG_WARN([*** with ./configure CFLAGS=-fPIC --prefix=/usr])
2701         AC_MSG_WARN([*** replacing /usr with the prefix of your choice.])
2702         AC_MSG_WARN([*** After re-installing libsrtp, re-run the Asterisk])
2703         AC_MSG_WARN([*** configure script.])
2704         AC_MSG_WARN([***])
2705         AC_MSG_WARN([*** If you do not need SRTP support re-run configure])
2706         AC_MSG_WARN([*** with the --without-srtp option.])
2707         exit 1
2708     ])
2709
2710     if test "x$PBX_SRTP" = x1;
2711     then
2712         AST_EXT_LIB_CHECK([SRTP_256], [srtp], [crypto_policy_set_aes_cm_256_hmac_sha1_80])
2713         AST_EXT_LIB_CHECK([SRTP_192], [srtp], [crypto_policy_set_aes_cm_192_hmac_sha1_80])
2714         AST_EXT_LIB_CHECK([SRTP_GCM], [srtp], [crypto_policy_set_aes_gcm_128_8_auth])
2715         AST_EXT_LIB_CHECK([SRTP_SHUTDOWN], [srtp], [srtp_shutdown], [srtp/srtp.h])
2716         AST_EXT_LIB_CHECK([SRTP_GET_VERSION], [srtp], [srtp_get_version_string], [srtp/srtp.h])
2717     fi
2718 fi
2719
2720 for ver in 3.0 2.6 2.4 2.2 2.0; do
2721         AST_PKG_CONFIG_CHECK([GMIME], gmime-$ver)
2722         if test "$PBX_GMIME" = 1; then
2723                 break;
2724         fi
2725 done
2726
2727 AST_EXT_LIB_CHECK([HOARD], [hoard], [malloc], [])
2728
2729 AST_EXT_LIB_CHECK([FREETDS], [sybdb], [dbinit], [sybdb.h])
2730
2731 AC_CHECK_LIB([tonezone], [tone_zone_find_by_num], tonezone_does_not_need_lm=yes, tonezone_does_not_need_lm=no)
2732
2733 if test "${tonezone_does_not_need_lm}" = "no" ; then
2734   tonezone_extra="-lm"
2735 fi
2736
2737 AST_EXT_LIB_CHECK([TONEZONE], [tonezone], [tone_zone_find], [dahdi/tonezone.h], [${tonezone_extra} ${DAHDI_INCLUDE}])
2738
2739 AST_EXT_LIB_CHECK([VORBIS], [vorbis], [vorbis_info_init], [vorbis/codec.h], [-lm -lvorbisenc -lvorbisfile])
2740 AST_C_DECLARE_CHECK([VORBIS_OPEN_CALLBACKS], [OV_CALLBACKS_NOCLOSE], [vorbis/vorbisfile.h])
2741
2742 AC_LANG_PUSH(C++)
2743
2744 if test "${USE_VPB}" != "no"; then
2745    AC_MSG_CHECKING(for vpb_open in -lvpb)
2746    saved_libs="${LIBS}"
2747    saved_cppflags="${CPPFLAGS}"
2748    if test "x${VPB_DIR}" != "x"; then
2749       if test -d ${VPB_DIR}/lib; then
2750          vpblibdir=${VPB_DIR}/lib
2751       else
2752          vpblibdir=${VPB_DIR}
2753       fi
2754       LIBS="${LIBS} -L${vpblibdir}"
2755       CPPFLAGS="${CPPFLAGS} -I${VPB_DIR}/include"
2756    fi
2757    LIBS="${PTHREAD_LIBS} ${LIBS} -lvpb"
2758    CPPFLAGS="${CPPFLAGS} ${PTHREAD_CFLAGS}"
2759    AC_LINK_IFELSE(
2760         [
2761         AC_LANG_PROGRAM(
2762         [#include <vpbapi.h>],
2763         [int q = vpb_open(0,0);])
2764         ],
2765         [       AC_MSG_RESULT(yes)
2766                 ac_cv_lib_vpb_vpb_open="yes"
2767         ],
2768         [       AC_MSG_RESULT(no)
2769                 ac_cv_lib_vpb_vpb_open="no"
2770         ]
2771         )
2772    LIBS="${saved_libs}"
2773    CPPFLAGS="${saved_cppflags}"
2774    if test "${ac_cv_lib_vpb_vpb_open}" = "yes"; then
2775         VPB_LIB="-lvpb"
2776         if test "${VPB_DIR}" != ""; then
2777            VPB_LIB="-L${vpblibdir}  ${VPB_LIB}"
2778            VPB_INCLUDE="-I${VPB_DIR}/include"
2779         fi
2780         PBX_VPB=1
2781         AC_DEFINE([HAVE_VPB], 1, [Define if your system has the VoiceTronix API libraries.])
2782    fi
2783 fi
2784
2785 AC_LANG_POP
2786
2787 AST_EXT_LIB_CHECK([ZLIB], [z], [compress], [zlib.h])
2788
2789 if test "x${PBX_UNIXODBC}" = "x1" -o "x${PBX_IODBC}" = "x1"; then
2790         # Does ODBC support wide characters?
2791         AC_MSG_CHECKING(whether ODBC has support for Unicode types)
2792         AC_LINK_IFELSE(
2793                 [AC_LANG_PROGRAM(
2794                         [#include <sql.h>
2795 #include <sqlext.h>],
2796                         [int foo = SQL_WCHAR])],
2797                 AC_MSG_RESULT(yes)
2798                         AC_DEFINE([HAVE_ODBC_WCHAR], [1], [Define to 1 if your ODBC library has wide (Unicode) types.]),
2799                 AC_MSG_RESULT(no)
2800         )
2801 fi
2802
2803 AC_CHECK_HEADER([linux/compiler.h],
2804                 [AC_DEFINE_UNQUOTED([HAVE_LINUX_COMPILER_H], 1, [Define to 1 if your system has linux/compiler.h.])])
2805
2806 AC_CHECK_HEADER([linux/ixjuser.h], [PBX_IXJUSER=1], [PBX_IXJUSER=0], [
2807                                    #include <linux/version.h>
2808                                    #ifdef HAVE_LINUX_COMPILER_H
2809                                    #include <linux/compiler.h>
2810                                    #endif
2811                                    ])
2812 AC_SUBST(PBX_IXJUSER)
2813
2814 # Used in res/res_pktccops
2815 AST_C_DEFINE_CHECK([MSG_NOSIGNAL], [MSG_NOSIGNAL], [sys/socket.h])
2816 AST_C_DEFINE_CHECK([SO_NOSIGPIPE], [SO_NOSIGPIPE], [sys/socket.h])
2817
2818 AST_EXT_TOOL_CHECK([SDL], [sdl-config])
2819 AST_EXT_LIB_CHECK([SDL_IMAGE], [SDL_image], [IMG_Load], [SDL_image.h], [${SDL_LIB}], [${SDL_INCLUDE}])
2820 AST_EXT_LIB_CHECK([FFMPEG], [avcodec], [sws_getContext], [ffmpeg/avcodec.h], [${PTHREAD_LIBS} -lz -lm], [${PTHREAD_CFLAGS}])
2821
2822 # possible places for video4linux version 1
2823 AC_CHECK_HEADER([linux/videodev.h],
2824         [AC_DEFINE_UNQUOTED([HAVE_VIDEODEV_H], 1, [Define to 1 if your system has linux/videodev.h.])])
2825
2826 # possible places for X11
2827 AST_EXT_LIB_CHECK([X11], [X11], [XOpenDisplay], [X11/Xlib.h],,, [standard_path])
2828 AST_EXT_LIB_CHECK([X11], [X11], [XOpenDisplay], [X11/Xlib.h],, [-I/usr/X11R6/include], [X11R6])
2829
2830 PBX_LAUNCHD=0
2831 if test "${cross_compiling}" = "no";
2832 then
2833   AC_CHECK_FILE(/sbin/launchd,
2834     [PBX_LAUNCHD=1]
2835     AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.]))
2836 fi
2837 AC_SUBST(PBX_LAUNCHD)
2838
2839 AST_PKG_CONFIG_CHECK([GTK2], [gtk+-2.0])
2840
2841 # build a GENERIC_ODBC result based on the presence of either UnixODBC (preferred)
2842 # or iODBC
2843
2844 PBX_GENERIC_ODBC=0
2845
2846 if test "${PBX_UNIXODBC}" = 1; then
2847    PBX_GENERIC_ODBC=1
2848    GENERIC_ODBC_LIB="${UNIXODBC_LIB}"
2849    GENERIC_ODBC_INCLUDE="${UNIXODBC_INCLUDE}"
2850 elif test "${PBX_IODBC}" = 1; then
2851    PBX_GENERIC_ODBC=1
2852    GENERIC_ODBC_LIB="${IODBC_LIB}"
2853    GENERIC_ODBC_INCLUDE="${IODBC_INCLUDE}"
2854 fi
2855
2856 AC_SUBST([GENERIC_ODBC_LIB])
2857 AC_SUBST([GENERIC_ODBC_INCLUDE])
2858 AC_SUBST([PBX_GENERIC_ODBC])
2859
2860 AC_SUBST([PBX_SYSTEMD])
2861 AC_SUBST([SYSTEMD_LIB])
2862 AC_SUBST([SYSTEMD_INCLUDE])
2863 AST_PKG_CONFIG_CHECK([SYSTEMD], [libsystemd])
2864
2865 PBX_SYSLOG=0
2866
2867 if test "${ac_cv_header_syslog_h}" = "yes"; then
2868    # syslog facilities
2869    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_AUTH],     [LOG_AUTH],     [syslog.h])
2870    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_AUTHPRIV], [LOG_AUTHPRIV], [syslog.h])
2871    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_CRON],     [LOG_CRON],     [syslog.h])
2872    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_DAEMON],   [LOG_DAEMON],   [syslog.h])
2873    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_FTP],      [LOG_FTP],      [syslog.h])
2874    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_KERN],     [LOG_KERN],     [syslog.h])
2875    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_LPR],      [LOG_LPR],      [syslog.h])
2876    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_MAIL],     [LOG_MAIL],     [syslog.h])
2877    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_NEWS],     [LOG_NEWS],     [syslog.h])
2878    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_SYSLOG],   [LOG_SYSLOG],   [syslog.h])
2879    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_UUCP],     [LOG_UUCP],     [syslog.h])
2880    PBX_SYSLOG=1
2881 fi
2882
2883 AC_SUBST([PBX_SYSLOG])
2884
2885 if test -f makeopts; then
2886         ${ac_cv_path_EGREP} 'CURSES|GTK2|OSARCH|NEWT' makeopts > makeopts.acbak
2887 else
2888         touch makeopts.acbak
2889 fi
2890
2891 # conf_bridge (binaural rendering): check if HRIRs are available
2892 # this check does not work when cross-compiling
2893 if test "${cross_compiling}" = "no"; then
2894     AC_CHECK_FILES([bridges/bridge_softmix/include/hrirs.h])
2895 fi
2896
2897 AC_CONFIG_FILES([build_tools/menuselect-deps makeopts])
2898 AST_CHECK_MANDATORY
2899
2900 if test -f build_tools/menuselect-deps; then
2901     # extract old values of all PBX_ variables from menuselect-deps
2902     # and preserve them so that menuselect can determine whether
2903     # any previously-met dependencies are no longer met and warn
2904     # the user appropriately
2905     while IFS="=:" read var val old_val; do
2906         eval "PBX_${var}=\${PBX_${var}}:${val}"
2907     done < build_tools/menuselect-deps
2908 fi
2909
2910 AC_OUTPUT
2911
2912 ${ac_cv_path_EGREP} 'CURSES|GTK2|OSARCH|NEWT' makeopts > makeopts.acbak2
2913 if test "x${ac_cv_path_CMP}" = "x:"; then
2914         ( cd "`pwd`/menuselect" && ./configure )
2915 elif ${ac_cv_path_CMP} -s makeopts.acbak makeopts.acbak2; then : ; else
2916         ( cd "`pwd`/menuselect" && ./configure )
2917 fi
2918
2919 rm makeopts.acbak makeopts.acbak2
2920
2921
2922 if test "x${silent}" != "xyes" ; then
2923 echo
2924 echo "               .\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$=..      "
2925 echo "            .\$7\$7..          .7\$\$7:.    "
2926 echo "          .\$\$:.                 ,\$7.7   "
2927 echo "        .\$7.     7\$\$\$\$           .\$\$77  "
2928 echo "     ..\$\$.       \$\$\$\$\$            .\$\$\$7 "
2929 echo "    ..7\$   .?.   \$\$\$\$\$   .?.       7\$\$\$."
2930 echo "   \$.\$.   .\$\$\$7. \$\$\$\$7 .7\$\$\$.      .\$\$\$."
2931 echo " .777.   .\$\$\$\$\$\$77\$\$\$77\$\$\$\$\$7.      \$\$\$,"
2932 echo " \$\$\$~      .7\$\$\$\$\$\$\$\$\$\$\$\$\$7.       .\$\$\$."
2933 echo ".\$\$7          .7\$\$\$\$\$\$\$7:          ?\$\$\$."
2934 echo "\$\$\$          ?7\$\$\$\$\$\$\$\$\$\$I        .\$\$\$7 "
2935 echo "\$\$\$       .7\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$      :\$\$\$. "
2936 echo "\$\$\$       \$\$\$\$\$\$7\$\$\$\$\$\$\$\$\$\$\$\$    .\$\$\$.  "
2937 echo "\$\$\$        \$\$\$   7\$\$\$7  .\$\$\$    .\$\$\$.   "
2938 echo "\$\$\$\$             \$\$\$\$7         .\$\$\$.    "
2939 echo "7\$\$\$7            7\$\$\$\$        7\$\$\$      "
2940 echo " \$\$\$\$\$                        \$\$\$       "
2941 echo "  \$\$\$\$7.                       \$\$  (TM)     "
2942 echo "   \$\$\$\$\$\$\$.           .7\$\$\$\$\$\$  \$\$      "
2943 echo "     \$\$\$\$\$\$\$\$\$\$\$\$7\$\$\$\$\$\$\$\$\$.\$\$\$\$\$\$      "
2944 echo "       \$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$.                "
2945 echo
2946 fi
2947
2948 if test "x${AST_IODBC_FOUND}" = "xyes"; then
2949         echo "WARNING: iodbc libs/headers found!"
2950         echo
2951         echo "  If you plan to use ODBC functionality, you should consider"
2952         echo "  switching to unixodbc instead."
2953         echo "  See: https://issues.asterisk.org/jira/browse/ASTERISK-22459"
2954         echo
2955 fi
2956
2957 AC_MSG_NOTICE(Package configured for: )
2958 AC_MSG_NOTICE( OS type  : $host_os)
2959 AC_MSG_NOTICE( Host CPU : $host_cpu)
2960 AC_MSG_NOTICE( build-cpu:vendor:os: $build_cpu : $build_vendor : $build_os :)
2961 AC_MSG_NOTICE( host-cpu:vendor:os: $host_cpu : $host_vendor : $host_os :)
2962 if test "${cross_compiling}" = "yes"; then
2963    AC_MSG_NOTICE( Cross Compilation = YES)
2964 fi