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