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