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