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