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