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