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