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