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