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