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