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