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