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