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