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