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