dbcd49d7a4c6d93d5644dc13f5131d7f9276481c
[asterisk/asterisk.git] / configure.ac
1 # Process this file with autoconf to produce a configure script.
2 #
3 # Make sure we use autoconf 2.60 to generate the "configure" script,
4 # in case we want to commit it. Other than that, version 2.59 is
5 # perfectly fine for our purposes, so people who want to modify
6 # this file just have to remember to set the AC_PREREQ argument
7 # to something that suits their needs.
8
9 AC_PREREQ(2.60)
10
11 AC_INIT(asterisk, 1.6, www.asterisk.org)
12
13 # cross-compile macros
14 AC_CANONICAL_BUILD
15 AC_CANONICAL_HOST
16
17 # check existence of the package
18 AC_CONFIG_SRCDIR([main/asterisk.c])
19
20 AC_COPYRIGHT("Asterisk")
21 AC_REVISION($Revision$)
22
23 # preserve any CFLAGS or LDFLAGS that may be set
24 # NOTE: This must be done before calling any macros that end up
25 # calling AC_PROG_CC or the like, since they will set a default
26 # set of CFLAGS ("-g -O2") if the user did not supply any, and
27 # we don't want those default flags to be carried over into the
28 # rest of the build system since we have other means of controlling
29 # debugging symbol generation and optimization.
30 CONFIG_CFLAGS="${CFLAGS}"
31 CONFIG_LDFLAGS="${LDFLAGS}"
32 AC_SUBST(CONFIG_CFLAGS)
33 AC_SUBST(CONFIG_LDFLAGS)
34
35 # specify output header file
36 AC_CONFIG_HEADER(include/asterisk/autoconfig.h)
37
38 AC_USE_SYSTEM_EXTENSIONS        # note- does not work on FreeBSD
39
40 case "${host_os}" in
41      freebsd*)
42      ac_default_prefix=/usr/local
43      CPPFLAGS=-I/usr/local/include
44      LDFLAGS=-L/usr/local/lib
45      ;;
46      openbsd*)
47      ac_default_prefix=/usr/local
48      if test ${prefix} = '/usr/local' || test ${prefix} = 'NONE'; then
49         if test ${sysconfdir} = '${prefix}/etc'; then
50            sysconfdir=/etc
51         fi
52         if test ${mandir} = '${prefix}/man'; then
53            mandir=/usr/share/man
54         fi
55      fi
56      CPPFLAGS=-I/usr/local/include
57      LDFLAGS=-L/usr/local/lib
58      ;;
59      darwin*)
60      AC_DEFINE([AST_POLL_COMPAT], 1, [Define to 1 if internal poll should be used.])
61      ;;
62      *)
63      ac_default_prefix=/usr
64      if test ${prefix} = '/usr' || test ${prefix} = 'NONE'; then
65         if test ${sysconfdir} = '${prefix}/etc'; then
66            sysconfdir=/etc
67         fi
68         if test ${mandir} = '${prefix}/man'; then
69            mandir=/usr/share/man
70         fi
71      fi
72      ;;
73 esac
74
75 if test ${prefix} = ${ac_default_prefix} || test ${prefix} = 'NONE'; then
76      if test ${localstatedir} = '${prefix}/var'; then
77         localstatedir=/var
78      fi
79 fi
80
81 BUILD_PLATFORM=${build}
82 BUILD_CPU=${build_cpu}
83 BUILD_VENDOR=${build_vendor}
84 BUILD_OS=${build_os}
85
86 AC_SUBST(BUILD_PLATFORM)
87 AC_SUBST(BUILD_CPU)
88 AC_SUBST(BUILD_VENDOR)
89 AC_SUBST(BUILD_OS)
90
91 HOST_PLATFORM=${host}
92 HOST_CPU=${host_cpu}
93 HOST_VENDOR=${host_vendor}
94 HOST_OS=${host_os}
95
96 AC_SUBST(HOST_PLATFORM)
97 AC_SUBST(HOST_CPU)
98 AC_SUBST(HOST_VENDOR)
99 AC_SUBST(HOST_OS)
100
101 PBX_WINARCH=0
102
103 case "${host_os}" in
104      freebsd*)
105      OSARCH=FreeBSD
106      ;;
107      netbsd*)
108      OSARCH=NetBSD
109      ;;
110      openbsd*)
111      OSARCH=OpenBSD
112      ;;
113      solaris*)
114      OSARCH=SunOS
115      ;;
116      mingw32)
117      OSARCH=mingw32
118      PBX_WINARCH=1
119      ;;
120      cygwin)
121      OSARCH=cygwin
122      PBX_WINARCH=1
123      ;;
124      *)
125      OSARCH=${host_os}
126      ;;
127 esac
128
129 AC_SUBST(OSARCH)
130 AC_SUBST(PBX_WINARCH)
131
132 #  check for uname
133 AC_PATH_TOOL([UNAME], [uname], No)
134 if test ! x"${UNAME}" = xNo; then
135    PBX_OSREV=$(${UNAME} -r)
136 fi
137 AC_SUBST(PBX_OSREV)
138
139 AH_TOP(
140 #ifndef ASTERISK_AUTOCONFIG_H
141 #define ASTERISK_AUTOCONFIG_H
142
143 #include "asterisk/buildopts.h"
144
145 )
146
147 AH_BOTTOM(
148 #endif
149 )
150
151 # cross-compile checks
152 if test "${cross_compiling}" = "yes"; 
153 then
154    AC_CHECK_TOOL(CC, gcc, :)
155    AC_CHECK_TOOL(CXX, g++, :)
156    AC_CHECK_TOOL(LD, ld, :)
157    AC_CHECK_TOOL(RANLIB, ranlib, :)
158 fi
159
160 # Checks for programs.
161 AC_PROG_CC
162 AC_PROG_CXX
163 AC_PROG_CPP
164 AC_PROG_CXXCPP
165 # This macro is just copied into our local acinclude.m4 from libtool.m4 so that
166 # the developers regenerating the configure script don't have to install libtool.
167 AST_PROG_LD     # note, does not work on FreeBSD
168 AC_PROG_AWK
169 AC_PROG_INSTALL
170 AC_PROG_LN_S
171 AC_PROG_RANLIB
172 AST_CHECK_GNU_MAKE
173
174 AC_PATH_TOOL([STRIP], [strip], :)
175 AC_PATH_TOOL([AR], [ar], :)
176
177 GNU_LD=0
178 if test "x$with_gnu_ld" = "xyes" ; then
179    GNU_LD=1
180 fi
181 AC_SUBST(GNU_LD)
182
183 AC_PATH_PROG([GREP], [grep], :)
184 AC_PATH_PROG([FIND], [find], :)
185 AC_PATH_PROG([COMPRESS], [compress], :)
186 AC_PATH_PROG([BASENAME], [basename], :)
187 AC_PATH_PROG([ID], [id], :)
188 AC_PATH_PROG([DIRNAME], [dirname], :)
189 AC_PATH_PROG([SHELL], [sh], :)
190 AC_PATH_PROG([LN], [ln], :)
191 AC_PATH_PROG([DOT], [dot], :)
192 AC_PATH_PROG([WGET], [wget], :)
193 AC_PATH_PROG([CURL], [curl], :)
194 AC_PATH_PROG([RUBBER], [rubber], :)
195 AC_PATH_PROG([KPATHSEA], [kpsewhich], :)
196 AC_PATH_PROG([XMLSTARLET], [xmlstarlet], :)
197 if test "${WGET}" != ":" ; then
198   DOWNLOAD=${WGET}
199 else if test "${CURL}" != ":" ; then
200   DOWNLOAD="${CURL} -O --progress-bar -w \"%{url_effective}\n\""
201 else
202   AC_PATH_PROG([FETCH], [fetch], [:])
203   DOWNLOAD=${FETCH}
204 fi
205 fi
206 AC_SUBST(DOWNLOAD)
207
208 AC_CHECK_TOOL([SOXMIX], [soxmix], [:])
209 if test "${SOXMIX}" != ":" ; then
210         AC_DEFINE([HAVE_SOXMIX], 1, [Define to 1 if your system has soxmix application.])
211 fi
212
213 AC_CHECK_PROGS([MD5], [md5 md5sum gmd5sum digest])
214
215 if test "${MD5}" = "digest" ; then
216    MD5="${MD5} -a md5"   
217 fi
218
219 ACX_PTHREAD
220
221 AC_LANG(C)
222
223 AC_ARG_ENABLE([dev-mode],
224         [AS_HELP_STRING([--enable-dev-mode],
225                 [Turn on developer mode])],
226         [case "${enableval}" in
227               y|ye|yes) AST_DEVMODE=yes ;;
228               n|no)  AST_DEVMODE=no ;;
229               noisy)
230               AST_DEVMODE=yes
231               NOISY_BUILD=yes
232               ;;
233               *) AC_MSG_ERROR(bad value ${enableval} for --enable-dev-mode)  ;;
234         esac])
235 AC_SUBST(NOISY_BUILD)
236 AC_SUBST(AST_DEVMODE)
237
238 # AST_EXT_LIB_SETUP is used to tell configure to handle variables for
239 # various packages.
240 # $1 is the prefix for the variables in makeopts and autoconfig.h
241 # $2 is the short comment, $4 is the long comment
242 # $3 is the name used in --with- or --without- flags for configure.
243 #
244 # Package option names should be in alphabetical order
245 # by the --with option name (the third field),
246 # to make things easier for the users.
247
248 AST_EXT_LIB_SETUP([ALSA], [Advanced Linux Sound Architecture], [asound])
249
250 # BKTR is used for backtrace support on platforms that do not
251 # have it natively.
252 AST_EXT_LIB_SETUP([BKTR], [Stack Backtrace support], [execinfo])
253 AST_EXT_LIB_SETUP([BLUETOOTH], [Bluetooth Support], [bluetooth])
254 AST_EXT_LIB_SETUP([CAP], [POSIX 1.e capabilities], [cap])
255 AST_EXT_LIB_SETUP([CURL], [cURL], [curl])
256 AST_EXT_LIB_SETUP([CURSES], [curses], [curses])
257 AST_EXT_LIB_SETUP([CRYPTO], [OpenSSL Cryptography support], [crypto])
258 AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi])
259 AST_EXT_LIB_SETUP([FFMPEG], [Ffmpeg and avcodec library], [avcodec])
260 AST_EXT_LIB_SETUP([GSM], [External GSM library], [gsm], [, use 'internal' GSM otherwise])
261 AST_EXT_LIB_SETUP([GTK], [gtk libraries], [gtk])
262 AST_EXT_LIB_SETUP([GTK2], [gtk2 libraries], [gtk2])
263 AST_EXT_LIB_SETUP([GMIME], [GMime library], [gmime])
264 AST_EXT_LIB_SETUP([HOARD], [Hoard Memory Allocator], [hoard])
265 AST_EXT_LIB_SETUP([ICAL], [ical libraries], [ical])
266 AST_EXT_LIB_SETUP([ICONV], [Iconv Library], [iconv])
267 AST_EXT_LIB_SETUP([IKSEMEL], [Iksemel Jabber Library], [iksemel])
268 AST_EXT_LIB_SETUP([IMAP_TK], [UW IMAP Toolkit], [imap])
269 AST_EXT_LIB_SETUP([INOTIFY], [inotify support], [inotify])
270 AST_EXT_LIB_SETUP([IODBC], [iODBC], [iodbc])
271 AST_EXT_LIB_SETUP([ISDNNET], [ISDN4Linux Library], [isdnnet])
272 AST_EXT_LIB_SETUP([JACK], [Jack Audio Connection Kit], [jack])
273 AST_EXT_LIB_SETUP([LDAP], [OpenLDAP], [ldap])
274 AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2])
275 AST_EXT_LIB_SETUP([LTDL], [libtool], [ltdl])
276 AST_EXT_LIB_SETUP([LUA], [Lua], [lua])
277 AST_EXT_LIB_SETUP([MISDN], [mISDN User Library], [misdn])
278 AST_EXT_LIB_SETUP([MYSQLCLIENT], [mysqlclient], [mysqlclient])
279 AST_EXT_LIB_SETUP([NBS], [Network Broadcast Sound], [nbs])
280 AST_EXT_LIB_SETUP([NCURSES], [ncurses], [ncurses])
281 AST_EXT_LIB_SETUP([NEON], [neon], [neon])
282 AST_EXT_LIB_SETUP([NETSNMP], [Net-SNMP], [netsnmp])
283 AST_EXT_LIB_SETUP([NEWT], [newt], [newt])
284 AST_EXT_LIB_SETUP([OGG], [OGG], [ogg])
285 AST_EXT_LIB_SETUP([OSPTK], [OSP Toolkit], [osptk])
286 AST_EXT_LIB_SETUP([OSS], [Open Sound System], [oss])
287 AST_EXT_LIB_SETUP([PGSQL], [PostgreSQL], [postgres])
288 AST_EXT_LIB_SETUP([POPT], [popt], [popt])
289 AST_EXT_LIB_SETUP([PORTAUDIO], [PortAudio], [portaudio])
290 AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
291 AST_EXT_LIB_SETUP_DEPENDENT([PRI_VERSION], [ISDN PRI get_version], [PRI], [pri])
292 AST_EXT_LIB_SETUP_DEPENDENT([PRI_INBANDDISCONNECT], [ISDN PRI set_inbanddisconnect], [PRI], [pri])
293 AST_EXT_LIB_SETUP_DEPENDENT([PRI_PROG_W_CAUSE], [ISDN progress with cause], [PRI], [pri])
294 AST_EXT_LIB_SETUP_DEPENDENT([PRI_SERVICE_MESSAGES], [ISDN service messages], [PRI], [pri])
295 AST_EXT_LIB_SETUP_DEPENDENT([PRI_REVERSE_CHARGE], [ISDN reverse charge], [PRI], [pri])
296 AST_EXT_LIB_SETUP([RESAMPLE], [LIBRESAMPLE], [resample])
297 AST_EXT_LIB_SETUP([SPANDSP], [SPANDSP], [spandsp])
298 AST_EXT_LIB_SETUP([SS7], [ISDN SS7], [ss7])
299 AST_EXT_LIB_SETUP([OPENR2], [MFR2], [openr2])
300 AST_EXT_LIB_SETUP([PWLIB], [PWlib], [pwlib])
301 AST_EXT_LIB_SETUP([OPENH323], [OpenH323], [h323])
302 AST_EXT_LIB_SETUP([RADIUS], [Radius Client], [radius])
303 AST_EXT_LIB_SETUP([SDL], [Sdl], [sdl])
304 AST_EXT_LIB_SETUP([SDL_IMAGE], [Sdl Image library], [SDL_image])
305 AST_EXT_LIB_SETUP([OPENAIS], [OpenAIS], [openais])
306 AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])
307 AST_EXT_LIB_SETUP([SPEEX_PREPROCESS], [Speex preprocess routines], [speex])
308 AST_EXT_LIB_SETUP([SPEEXDSP], [Speexdsp], [speexdsp])
309 AST_EXT_LIB_SETUP_DEPENDENT([SPEEX_PREPROCESS], [speex_preprocess_ctl], [], [speex])
310 AST_EXT_LIB_SETUP([SQLITE], [SQLite], [sqlite])
311 AST_EXT_LIB_SETUP([SQLITE3], [SQLite], [sqlite3])
312 AST_EXT_LIB_SETUP([SUPPSERV], [mISDN Supplemental Services], [suppserv])
313 AST_EXT_LIB_SETUP([OPENSSL], [OpenSSL Secure Sockets Layer support], [ssl])
314 AST_EXT_LIB_SETUP([FREETDS], [FreeTDS], [tds])
315 AST_EXT_LIB_SETUP([TERMCAP], [Termcap], [termcap])
316 AST_EXT_LIB_SETUP([TINFO], [Term Info], [tinfo])
317 AST_EXT_LIB_SETUP([TONEZONE], [tonezone], [tonezone])
318 AST_EXT_LIB_SETUP([UNIXODBC], [unixODBC], [unixodbc])
319 AST_EXT_LIB_SETUP([USB], [usb], [usb])
320 AST_EXT_LIB_SETUP([VORBIS], [Vorbis], [vorbis])
321 AST_EXT_LIB_SETUP([VPB], [Voicetronix API], [vpb])
322 AST_EXT_LIB_SETUP([X11], [X11 support], [x11])
323 AST_EXT_LIB_SETUP([ZLIB], [zlib], [z])
324 AST_EXT_LIB_SETUP([TIMERFD], [timerfd], [timerfd])
325
326 # check for basic system features and functionality before
327 # checking for package libraries
328
329 AC_FUNC_ALLOCA
330 AC_HEADER_DIRENT
331 AC_HEADER_STDC
332 AC_HEADER_SYS_WAIT
333 AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h libintl.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h strings.h sys/file.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h termios.h unistd.h utime.h arpa/nameser.h sys/io.h])
334
335 AC_CHECK_HEADERS([winsock.h winsock2.h])
336
337 AC_CHECK_HEADER([sys/poll.h],
338          [],
339      AC_DEFINE([AST_POLL_COMPAT], 1, [Define to 1 if internal poll should be used.]))
340
341 AC_SYS_LARGEFILE
342
343 # Checks for typedefs, structures, and compiler characteristics.
344 AC_HEADER_STDBOOL
345 AC_C_CONST
346 AC_TYPE_UID_T
347 AC_C_INLINE
348 AC_TYPE_MODE_T
349 AC_TYPE_OFF_T
350 AC_TYPE_PID_T
351 AC_TYPE_SIZE_T
352 AC_CHECK_MEMBERS([struct stat.st_blksize])
353 AC_HEADER_TIME
354 AC_STRUCT_TM
355 AC_C_VOLATILE
356 AC_CHECK_TYPES([ptrdiff_t])
357
358 # Checks for library functions.
359 AC_FUNC_CHOWN
360 AC_FUNC_CLOSEDIR_VOID
361 AC_FUNC_ERROR_AT_LINE
362 AST_FUNC_FORK
363 AC_FUNC_FSEEKO
364 AC_PROG_GCC_TRADITIONAL
365 # XXX: these are commented out until we determine whether it matters if our malloc()
366 # acts exactly like glibc's or not
367 # AC_FUNC_MALLOC
368 # AC_FUNC_REALLOC
369 AC_FUNC_MEMCMP
370 AC_FUNC_MMAP
371 AC_FUNC_SELECT_ARGTYPES
372 AC_FUNC_SETVBUF_REVERSED
373 AC_TYPE_SIGNAL
374 AC_FUNC_STAT
375 AC_FUNC_STRCOLL
376 AC_FUNC_STRFTIME
377 AC_FUNC_STRNLEN
378 AC_FUNC_STRTOD
379 AC_FUNC_UTIME_NULL
380 AC_FUNC_VPRINTF
381 AC_CHECK_FUNCS([asprintf atexit closefrom dup2 eaccess endpwent euidaccess ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday glob ioperm inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap 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 utime vasprintf getpeereid sysctl swapctl])
382
383 # BSD might not have exp2, and/or log2
384 AC_CHECK_LIB([m], [sqrt])
385 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 exp2 log2 exp10 log10 sin cos tan asin acos atan atan2 pow rint exp log remainder fmod round trunc floor ceil])
386
387 AC_MSG_CHECKING(for timersub in time.h)
388 AC_LINK_IFELSE(
389         AC_LANG_PROGRAM([#include <sys/time.h>],
390                 [struct timeval *a; timersub(a, a, a);]),
391         AC_MSG_RESULT(yes)
392                 AC_DEFINE([HAVE_TIMERSUB], 1, [Define to 1 if your system defines timersub.]),
393         AC_MSG_RESULT(no)
394 )
395
396 AC_CHECK_HEADER([sys/poll.h], 
397    [HAS_POLL=1]
398    AC_DEFINE([HAVE_SYS_POLL_H], 1, [Define to 1 if your system has working sys/poll.h]),
399    )
400
401 AC_ARG_ENABLE([internal-poll],
402         [AS_HELP_STRING([--enable-internal-poll],
403                 [Use Asterisk's poll implementation])],
404         [case "${enableval}" in
405                 y|ye|yes) HAS_POLL="";;
406                 n|no) HAS_POLL="${HAS_POLL}" ;;
407                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-internal-poll) ;;
408         esac])
409 AC_SUBST(HAS_POLL)
410
411
412
413 # https support (in main/http.c) uses funopen on BSD systems,
414 # fopencookie on linux
415 AC_CHECK_FUNCS([funopen fopencookie])
416
417 AC_CHECK_FUNCS([inet_aton])
418
419 # check if we have IP_PKTINFO constant defined
420 AC_MSG_CHECKING(for IP_PKTINFO)
421 AC_LINK_IFELSE(
422                 AC_LANG_PROGRAM([#include <netinet/in.h>],
423                                                 [int pi = IP_PKTINFO;]),
424                 AC_MSG_RESULT(yes)
425                 AC_DEFINE([HAVE_PKTINFO], 1, [Define to 1 if your system defines IP_PKTINFO.]),
426                 AC_MSG_RESULT(no)
427 )
428
429 # some systems already have gethostbyname_r so we don't need to build ours in main/utils.c
430 AC_SEARCH_LIBS(gethostbyname_r, [socket nsl])
431
432 AC_MSG_CHECKING(for gethostbyname_r with 6 arguments)
433 AC_LINK_IFELSE(
434         AC_LANG_PROGRAM([#include <stdlib.h>
435                          #include <netdb.h>],
436                         [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (struct hostent **)NULL, (int *)NULL);]),
437         AC_MSG_RESULT(yes)
438         AC_DEFINE([HAVE_GETHOSTBYNAME_R_6], 1, [Define to 1 if your system has gethostbyname_r with 6 arguments.]),
439         AC_MSG_RESULT(no)
440 )
441
442 AC_MSG_CHECKING(for gethostbyname_r with 5 arguments)
443 AC_LINK_IFELSE(
444         AC_LANG_PROGRAM([#include <stdlib.h>
445                          #include <netdb.h>],
446                         [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (int *)NULL);]),
447         AC_MSG_RESULT(yes)
448         AC_DEFINE([HAVE_GETHOSTBYNAME_R_5], 1, [Define to 1 if your system has gethostbyname_r with 5 arguments.]),
449         AC_MSG_RESULT(no)
450 )
451
452 AC_CHECK_HEADER([byteswap.h], [AC_DEFINE_UNQUOTED([HAVE_BYTESWAP_H], 1, [Define to 1 if byteswap.h macros are available.])])
453
454 AC_MSG_CHECKING(for __swap16 variant of <sys/endian.h> byteswapping macros)
455 AC_LINK_IFELSE(
456 AC_LANG_PROGRAM([#include <sys/endian.h>], [int a = 1; int b = __swap16(a);]),
457 AC_MSG_RESULT(yes)
458 AC_DEFINE([HAVE_SYS_ENDIAN_SWAP16], 1, [Define to 1 if your sys/endian.h header file provides the __swap16 macro.]),
459 AC_MSG_RESULT(no)
460 )
461
462 AC_MSG_CHECKING(for bswap16 variant of <sys/endian.h> byteswapping macros)
463 AC_LINK_IFELSE(
464 AC_LANG_PROGRAM([#include <sys/endian.h>], [int a = 1; int b = bswap16(a);]),
465 AC_MSG_RESULT(yes)
466 AC_DEFINE([HAVE_SYS_ENDIAN_BSWAP16], 1, [Define to 1 if your sys/endian.h header file provides the bswap16 macro.]),
467 AC_MSG_RESULT(no)
468 )
469
470 if test "${cross_compiling}" = "no";
471 then
472   AC_CHECK_FILE(/dev/urandom, AC_DEFINE([HAVE_DEV_URANDOM], 1, [Define to 1 if your system has /dev/urandom.]))
473 fi
474
475 AST_C_DEFINE_CHECK([PTHREAD_RWLOCK_INITIALIZER], [PTHREAD_RWLOCK_INITIALIZER], [pthread.h])
476
477 AC_MSG_CHECKING(for PTHREAD_RWLOCK_PREFER_WRITER_NP in pthread.h)
478 AC_LINK_IFELSE(
479 AC_LANG_PROGRAM([#include <pthread.h>], [int a = PTHREAD_RWLOCK_PREFER_WRITER_NP;]),
480 AC_MSG_RESULT(yes)
481 AC_DEFINE([HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NP], 1, [Define to 1 if your system defines PTHREAD_RWLOCK_PREFER_WRITER_NP in pthread.h]),
482 AC_MSG_RESULT(no)
483 )
484
485 AC_MSG_CHECKING(for PTHREAD_MUTEX_RECURSIVE_NP in pthread.h)
486 AC_LINK_IFELSE(
487 AC_LANG_PROGRAM([#include <pthread.h>], [int a = PTHREAD_MUTEX_RECURSIVE_NP;]),
488 AC_MSG_RESULT(yes)
489 AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE_NP], 1, [Define to 1 if your system defines PTHREAD_MUTEX_RECURSIVE_NP in pthread.h]),
490 AC_MSG_RESULT(no)
491 )
492
493 AC_MSG_CHECKING(for pthread_rwlock_timedwrlock() in pthread.h)
494 AC_LINK_IFELSE(
495   [AC_LANG_PROGRAM(
496     [#include <pthread.h>
497      #include <time.h>],
498     [pthread_rwlock_t foo; struct timespec bar; pthread_rwlock_timedwrlock(&foo, &bar)])
499   ],[
500     AC_MSG_RESULT(yes)
501     ac_cv_pthread_rwlock_timedwrlock="yes"
502   ],[
503     AC_MSG_RESULT(no)
504     ac_cv_pthread_rwlock_timedwrlock="no"
505   ]
506 )
507 if test "${ac_cv_pthread_rwlock_timedwrlock}" = "yes"; then
508   AC_DEFINE([HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK], 1, [Define if your system has pthread_rwlock_timedwrlock()])
509 fi
510
511 AST_C_DEFINE_CHECK([PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], [PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP], [pthread.h])
512
513 #if test "${cross_compiling}" = "no";
514 #then
515 #AC_MSG_CHECKING(for working epoll support)
516 #AC_LINK_IFELSE(
517 #AC_LANG_PROGRAM([#include <sys/epoll.h>], [int res = epoll_create(10);
518 #                                         if (res < 0)
519 #                                            return 1;
520 #                                         close (res);
521 #                                         return 0;]),
522 #AC_MSG_RESULT(yes)
523 #AC_DEFINE([HAVE_EPOLL], 1, [Define to 1 if your system has working epoll support.]),
524 #AC_MSG_RESULT(no)
525 #)
526 #fi
527
528 AC_MSG_CHECKING(for compiler atomic operations)
529 AC_LINK_IFELSE(
530 AC_LANG_PROGRAM([], [int foo1; int foo2 = __sync_fetch_and_add(&foo1, 1);]),
531 AC_MSG_RESULT(yes)
532 AC_DEFINE([HAVE_GCC_ATOMICS], 1, [Define to 1 if your GCC C compiler provides atomic operations.]),
533 AC_MSG_RESULT(no)
534 )
535
536 AST_GCC_ATTRIBUTE(pure)
537 AST_GCC_ATTRIBUTE(malloc)
538 AST_GCC_ATTRIBUTE(const)
539 AST_GCC_ATTRIBUTE(unused)
540 AST_GCC_ATTRIBUTE(always_inline)
541 AST_GCC_ATTRIBUTE(deprecated)
542 AST_GCC_ATTRIBUTE(sentinel)
543 AST_GCC_ATTRIBUTE(warn_unused_result)
544 AST_GCC_ATTRIBUTE(weakref, [weakref("foo")], static)
545 AST_GCC_ATTRIBUTE(weak_import)
546
547 AC_MSG_CHECKING(for -ffunction-sections support)
548 saved_CFLAGS="${CFLAGS}"
549 CFLAGS="${CFLAGS} -ffunction-sections"
550 AC_COMPILE_IFELSE(
551         AC_LANG_PROGRAM([], [int x = 1;]),
552         AC_MSG_RESULT(yes)
553         [saved_LDFLAGS="${LDFLAGS}"]
554         [LDFLAGS="${LDFLAGS} -Wl,--gc-sections"]
555         AC_MSG_CHECKING(for --gc-sections support)
556         AC_LINK_IFELSE(
557                 AC_LANG_PROGRAM([], [int x = 1;]),
558                 AC_MSG_RESULT(yes)
559                 [GC_CFLAGS="-ffunction-sections"]
560                 [[GC_LDFLAGS="-Wl,--gc-sections"]],
561                 AC_MSG_RESULT(no)
562         )
563         [LDFLAGS="${saved_LDFLAGS}"],
564         AC_MSG_RESULT(no)
565 )
566 CFLAGS="${saved_CFLAGS}"
567 AC_SUBST(GC_CFLAGS)
568 AC_SUBST(GC_LDFLAGS)
569
570 AC_MSG_CHECKING(for -Wdeclaration-after-statement support)
571 if $(${CC} -Wdeclaration-after-statement -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
572         AC_MSG_RESULT(yes)
573         AST_DECLARATION_AFTER_STATEMENT=-Wdeclaration-after-statement
574 else
575         AC_MSG_RESULT(no)
576         AST_DECLARATION_AFTER_STATEMENT=
577 fi
578 AC_SUBST(AST_DECLARATION_AFTER_STATEMENT)
579
580 AC_MSG_CHECKING(for _FORTIFY_SOURCE support)
581 if $(${CC} -D_FORTIFY_SOURCE=2 -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
582         AC_MSG_RESULT(yes)
583         AST_FORTIFY_SOURCE=-D_FORTIFY_SOURCE=2
584 else
585         AC_MSG_RESULT(no)
586         AST_FORTIFY_SOURCE=
587 fi
588 AC_SUBST(AST_FORTIFY_SOURCE)
589
590 AC_MSG_CHECKING(for -fno-strict-overflow)
591 if $(${CC} -O2 -fno-strict-overflow -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
592         AC_MSG_RESULT(yes)
593         AST_NO_STRICT_OVERFLOW=-fno-strict-overflow
594 else
595         AC_MSG_RESULT(no)
596         AST_NO_STRICT_OVERFLOW=
597 fi
598 AC_SUBST(AST_NO_STRICT_OVERFLOW)
599
600 AC_MSG_CHECKING(for -Wshadow)
601 if $(${CC} -Wshadow -S -o /dev/null -xc /dev/null > /dev/null 2>&1); then
602         AC_MSG_RESULT(yes)
603         AST_SHADOW_WARNINGS=-Wshadow
604 else
605         AC_MSG_RESULT(no)
606         AST_SHADOW_WARNINGS=
607 fi
608 AC_SUBST(AST_SHADOW_WARNINGS)
609
610 AC_MSG_CHECKING(for sysinfo)
611 AC_LINK_IFELSE(
612         AC_LANG_PROGRAM([#include <sys/sysinfo.h>],
613                         [struct sysinfo sys_info; int uptime = sys_info.uptime]),
614         AC_MSG_RESULT(yes)
615         AC_DEFINE([HAVE_SYSINFO], 1, [Define to 1 if your system has sysinfo support]),
616         AC_MSG_RESULT(no)
617 )
618
619 AC_SEARCH_LIBS(res_9_ninit, resolv)
620 AC_MSG_CHECKING(for res_ninit)
621 AC_LINK_IFELSE(
622         AC_LANG_PROGRAM([
623                         #ifdef HAVE_SYS_SOCKET_H
624                         #include <sys/socket.h>
625                         #endif
626                         #ifdef HAVE_NETINET_IN_H
627                         #include <netinet/in.h>
628                         #endif
629                         #ifdef HAVE_ARPA_NAMESER_H
630                         #include <arpa/nameser.h>
631                         #endif
632                         #include <resolv.h>],
633                         [int foo = res_ninit(NULL);]),
634         AC_MSG_RESULT(yes)
635         AC_DEFINE([HAVE_RES_NINIT], 1, [Define to 1 if your system has the re-entrant resolver functions.])
636         AC_SEARCH_LIBS(res_9_ndestroy, resolv)
637         AC_MSG_CHECKING(for res_ndestroy)
638         AC_LINK_IFELSE(
639                 AC_LANG_PROGRAM([
640                                 #ifdef HAVE_SYS_SOCKET_H
641                                 #include <sys/socket.h>
642                                 #endif
643                                 #ifdef HAVE_NETINET_IN_H
644                                 #include <netinet/in.h>
645                                 #endif
646                                 #ifdef HAVE_ARPA_NAMESER_H
647                                 #include <arpa/nameser.h>
648                                 #endif
649                                 #include <resolv.h>],
650                                 [res_ndestroy(NULL);]),
651                 AC_MSG_RESULT(yes)
652                 AC_DEFINE([HAVE_RES_NDESTROY], 1, [Define to 1 if your system has the ndestroy resolver function.]),
653                 AC_MSG_RESULT(no)
654         )
655         AC_SEARCH_LIBS(res_9_close, resolv)
656         AC_MSG_CHECKING(for res_close)
657         AC_LINK_IFELSE(
658                 AC_LANG_PROGRAM([
659                                 #ifdef HAVE_SYS_SOCKET_H
660                                 #include <sys/socket.h>
661                                 #endif
662                                 #ifdef HAVE_NETINET_IN_H
663                                 #include <netinet/in.h>
664                                 #endif
665                                 #ifdef HAVE_ARPA_NAMESER_H
666                                 #include <arpa/nameser.h>
667                                 #endif
668                                 #include <resolv.h>],
669                                 [res_close();]),
670                 AC_MSG_RESULT(yes)
671                 AC_DEFINE([HAVE_RES_CLOSE], 1, [Define to 1 if your system has the close resolver function.]),
672                 AC_MSG_RESULT(no)
673         ),
674         AC_MSG_RESULT(no)
675 )
676
677 AST_C_DEFINE_CHECK([GLOB_NOMAGIC], [GLOB_NOMAGIC], [glob.h])
678
679 AST_C_DEFINE_CHECK([GLOB_BRACE], [GLOB_BRACE], [glob.h])
680
681 AST_C_DEFINE_CHECK([IP_MTU_DISCOVER], [IP_MTU_DISCOVER], [netinet/in.h])
682
683 AC_CHECK_HEADER([libkern/OSAtomic.h],
684                 [AC_DEFINE_UNQUOTED([HAVE_OSX_ATOMICS], 1, [Define to 1 if OSX atomic operations are supported.])])
685
686 AC_CHECK_SIZEOF(int)
687
688 # do the package library checks now
689
690 AST_EXT_LIB_CHECK([ALSA], [asound], [snd_spcm_init], [alsa/asoundlib.h], [-lm -ldl])
691
692 AST_EXT_LIB_CHECK([CURSES], [curses], [initscr], [curses.h])
693
694 if test "x${host_os}" = "xlinux-gnu" ; then
695   AST_EXT_LIB_CHECK([CAP], [cap], [cap_from_text], [sys/capability.h])
696 fi
697
698 AST_C_DEFINE_CHECK([DAHDI], [DAHDI_CODE], [dahdi/user.h])
699
700 AST_C_DEFINE_CHECK([DAHDI_HALF_FULL], [DAHDI_POLICY_HALF_FULL], [dahdi/user.h])
701
702 AST_C_COMPILE_CHECK([DAHDI_LINEREVERSE_VMWI], [struct dahdi_vmwi_info booger], [dahdi/user.h], , [enhanced dahdi vmwi support])
703
704 AST_C_COMPILE_CHECK([DAHDI_ECHOCANCEL_FAX_MODE], [int foo = DAHDI_ECHOCANCEL_FAX_MODE], [dahdi/user.h])
705
706 AST_C_COMPILE_CHECK([GETIFADDRS], [struct ifaddrs *p; getifaddrs(&p)], [ifaddrs.h], , [getifaddrs() support])
707 AST_C_COMPILE_CHECK([TIMERFD], [timerfd_create(0,0); timerfd_settime(0,0,NULL,NULL);], [sys/timerfd.h], , [timerfd support])
708
709 GSM_INTERNAL="yes"
710 AC_SUBST(GSM_INTERNAL)
711 GSM_SYSTEM="yes"
712 if test "${USE_GSM}" != "no"; then
713    if test "${GSM_DIR}" = "internal"; then
714       GSM_SYSTEM="no"
715    elif test "${GSM_DIR}" != ""; then
716       GSM_INTERNAL="no"
717    fi
718    if test "${GSM_SYSTEM}" = "yes"; then
719       gsmlibdir=""
720       if test "x${GSM_DIR}" != "x"; then
721          if test -d ${GSM_DIR}/lib; then
722             gsmlibdir="-L${GSM_DIR}/lib"
723          else
724             gsmlibdir="-L${GSM_DIR}"
725          fi
726       fi
727       AC_CHECK_LIB([gsm], [gsm_create], AC_DEFINE_UNQUOTED([HAVE_GSM], 1,
728       [Define to indicate the GSM library]), [], ${gsmlibdir})
729       if test "${ac_cv_lib_gsm_gsm_create}" = "yes"; then
730          if test "x${GSM_DIR}" != "x" ; then
731             AC_CHECK_HEADER([${GSM_DIR}/include/gsm.h], [GSM_HEADER_FOUND=1], [GSM_HEADER_FOUND=0])
732             AC_CHECK_HEADER([${GSM_DIR}/include/gsm/gsm.h], [GSM_GSM_HEADER_FOUND=1], [GSM_GSM_HEADER_FOUND=0])
733          else
734             AC_CHECK_HEADER([gsm.h], [GSM_HEADER_FOUND=1], [GSM_HEADER_FOUND=0])
735             AC_CHECK_HEADER([gsm/gsm.h], [GSM_GSM_HEADER_FOUND=1], [GSM_GSM_HEADER_FOUND=0])
736          fi
737          if test "${GSM_HEADER_FOUND}" = "0" ; then
738             if test "{GSM_GSM_HEADER_FOUND}" = "0" ; then
739                if test "x${GSM_MANDATORY}" = "xyes" ; then
740                   AC_MSG_NOTICE([***])
741                   AC_MSG_NOTICE([*** It appears that you do not have the gsm development package installed.])
742                   AC_MSG_NOTICE([*** Please install it to include ${GSM_DESCRIP} support, or re-run configure])
743                   AC_MSG_NOTICE([*** without explicitly specifying --with-${GSM_OPTION}])
744                   exit 1
745                fi
746             fi
747          fi
748          GSM_OK=0
749          if test "${GSM_HEADER_FOUND}" = "1" ; then
750             AC_DEFINE_UNQUOTED([HAVE_GSM_HEADER], 1, [Define to indicate that gsm.h has no prefix for its location])
751             GSM_OK=1
752          else
753             if test "${GSM_GSM_HEADER_FOUND}" = "1" ; then
754                AC_DEFINE_UNQUOTED([HAVE_GSM_GSM_HEADER], 1, [Define to indicate that gsm.h is in gsm/gsm.h])
755                GSM_OK=1
756             fi
757          fi
758          if test "${GSM_OK}" = "1" ; then
759             GSM_LIB="-lgsm"
760             if test "x${GSM_DIR}" != "x"; then
761                GSM_LIB="${gsmlibdir} ${GSM_LIB}"
762                GSM_INCLUDE="-I${GSM_DIR}/include"
763             fi
764             PBX_GSM=1
765             GSM_INTERNAL="no"
766          fi
767       fi
768    fi
769    if test "${GSM_INTERNAL}" = "yes"; then
770       PBX_GSM=1
771       AC_DEFINE_UNQUOTED([HAVE_GSM_HEADER], 1, [Define to indicate that gsm.h has no prefix for its location])
772    fi
773 fi
774
775 AST_EXT_LIB_CHECK([ICONV], [iconv], [iconv_open], [iconv.h])
776 # Some versions of Linux package iconv in glibc
777 AST_EXT_LIB_CHECK([ICONV], [c], [iconv_close], [iconv.h])
778
779 AST_EXT_LIB_CHECK([ICAL], [ical], [icaltimezone_new], [libical/ical.h], [-lpthread])
780
781 AST_EXT_LIB_CHECK([IKSEMEL], [iksemel], [iks_start_sasl], [iksemel.h])
782
783 if test "${USE_IMAP_TK}" != "no"; then
784         saved_cppflags="${CPPFLAGS}"
785         saved_libs="${LIBS}"
786         switch_to_system_on_failure="no"
787         if test "${IMAP_TK_DIR}" = ""; then
788                 IMAP_TK_DIR=`pwd`"/../imap-2004g"
789                 switch_to_system_on_failure="yes"
790         fi
791         if test "${IMAP_TK_DIR}" != "system"; then
792                 AC_MSG_CHECKING(for UW IMAP Toolkit c-client library)
793                 if test -f "${IMAP_TK_DIR}/c-client/LDFLAGS"; then
794                 imap_ldflags=`cat ${IMAP_TK_DIR}/c-client/LDFLAGS`
795                 fi
796                 imap_libs="${IMAP_TK_DIR}/c-client/c-client.a"
797                 imap_include="-I${IMAP_TK_DIR}/c-client"
798         CPPFLAGS="${CPPFLAGS} ${imap_include}"
799                 LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
800                 AC_LINK_IFELSE(
801                 AC_LANG_PROGRAM(
802                                 [#include "c-client.h"
803                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
804                                 {
805                                 }
806                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
807                                 {
808                                 }
809                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
810                                 {
811                                 }
812                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
813                                 {
814                                 }
815                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
816                                 {
817                                 }
818                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
819                                 {
820                                 }
821                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
822                                 {
823                                 }
824                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
825                                 {
826                                 }
827                                 void mm_log (char *string,long errflg)
828                                 {
829                                 }
830                                 void mm_dlog (char *string)
831                                 {
832                                 }
833                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
834                                 {
835                                 }
836                                 void mm_critical (MAILSTREAM *stream)
837                                 {
838                                 }
839                                 void mm_nocritical (MAILSTREAM *stream)
840                                 {
841                                 }
842                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
843                                 {
844                                 }
845                                 void mm_fatal (char *string)
846                                 {
847                                 }],
848                                 [
849                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
850                                 ]
851                         ),
852                         [ac_cv_imap_tk="yes"],
853                         [ac_cv_imap_tk="no"]
854                 )
855                 if test "${ac_cv_imap_tk}" = "yes"; then
856                         AC_LINK_IFELSE(
857                                 AC_LANG_PROGRAM(
858                                         [#include "c-client.h"
859                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
860                                         {
861                                         }
862                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
863                                         {
864                                         }
865                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
866                                         {
867                                         }
868                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
869                                         {
870                                         }
871                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
872                                         {
873                                         }
874                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
875                                         {
876                                         }
877                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
878                                         {
879                                         }
880                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
881                                         {
882                                         }
883                                         void mm_log (char *string,long errflg)
884                                         {
885                                         }
886                                         void mm_dlog (char *string)
887                                         {
888                                         }
889                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
890                                         {
891                                         }
892                                         void mm_critical (MAILSTREAM *stream)
893                                         {
894                                         }
895                                         void mm_nocritical (MAILSTREAM *stream)
896                                         {
897                                         }
898                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
899                                         {
900                                         }
901                                         void mm_fatal (char *string)
902                                         {
903                                         }],
904                                         [
905                                         long check = mail_expunge_full(NULL, "", 0);
906                                         ]
907                                 ),
908                                 [ac_cv_imap_tk2006="yes"],
909                                 [ac_cv_imap_tk2006="no"]
910                         )
911                 fi
912                 CPPFLAGS="${saved_cppflags}"
913                 LIBS="${saved_libs}"
914                 if test "${ac_cv_imap_tk}" = "no"; then
915                         AC_MSG_RESULT(no)
916                         if test "${switch_to_system_on_failure}" = "yes"; then
917                                 IMAP_TK_DIR="system"
918                         else #This means they specified a directory. Search for a package installation there too
919                                 AC_MSG_CHECKING([for system c-client library...])
920                                 CPPFLAGS="${saved_cppflags}"
921                                 LIBS="${saved_libs}"
922                                 imap_include="-I${IMAP_TK_DIR}/include"
923                                 imap_ldflags="-L${IMAP_TK_DIR}/lib"
924                                 imap_libs="-lc-client"
925                                 CPPFLAGS="${CPPFLAGS} ${imap_include}"
926                                 LIBS="${LIBS} ${imap_libs} ${imap_ldflags}"
927                                 AC_LINK_IFELSE(
928                                 AC_LANG_PROGRAM(
929                                                 [#include "c-client.h"
930                                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
931                                                 {
932                                                 }
933                                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
934                                                 {
935                                                 }
936                                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
937                                                 {
938                                                 }
939                                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
940                                                 {
941                                                 }
942                                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
943                                                 {
944                                                 }
945                                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
946                                                 {
947                                                 }
948                                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
949                                                 {
950                                                 }
951                                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
952                                                 {
953                                                 }
954                                                 void mm_log (char *string,long errflg)
955                                                 {
956                                                 }
957                                                 void mm_dlog (char *string)
958                                                 {
959                                                 }
960                                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
961                                                 {
962                                                 }
963                                                 void mm_critical (MAILSTREAM *stream)
964                                                 {
965                                                 }
966                                                 void mm_nocritical (MAILSTREAM *stream)
967                                                 {
968                                                 }
969                                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
970                                                 {
971                                                 }
972                                                 void mm_fatal (char *string)
973                                                 {
974                                                 }],
975                                                 [
976                                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
977                                                 ]
978                                         ),
979                                         [ac_cv_imap_tk="yes"],
980                                         [ac_cv_imap_tk="no"]
981                                 )
982                                 if test "${ac_cv_imap_tk}" = "yes"; then
983                                         AC_LINK_IFELSE(
984                                                 AC_LANG_PROGRAM(
985                                                         [#include "c-client.h"
986                                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
987                                                         {
988                                                         }
989                                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
990                                                         {
991                                                         }
992                                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
993                                                         {
994                                                         }
995                                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
996                                                         {
997                                                         }
998                                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
999                                                         {
1000                                                         }
1001                                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1002                                                         {
1003                                                         }
1004                                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1005                                                         {
1006                                                         }
1007                                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1008                                                         {
1009                                                         }
1010                                                         void mm_log (char *string,long errflg)
1011                                                         {
1012                                                         }
1013                                                         void mm_dlog (char *string)
1014                                                         {
1015                                                         }
1016                                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1017                                                         {
1018                                                         }
1019                                                         void mm_critical (MAILSTREAM *stream)
1020                                                         {
1021                                                         }
1022                                                         void mm_nocritical (MAILSTREAM *stream)
1023                                                         {
1024                                                         }
1025                                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1026                                                         {
1027                                                         }
1028                                                         void mm_fatal (char *string)
1029                                                         {
1030                                                         }],
1031                                                         [
1032                                                         long check = mail_expunge_full(NULL, "", 0);
1033                                                         ]
1034                                                 ),
1035                                                 [ac_cv_imap_tk2006="yes"],
1036                                                 [ac_cv_imap_tk2006="no"]
1037                                         )
1038                                 fi
1039                         fi
1040                 fi
1041         fi 
1042         if test "${IMAP_TK_DIR}" = "system"; then
1043                 #We will enter here if user specified "system" or if any of above checks failed
1044                 AC_MSG_CHECKING([for system c-client library...])
1045                 CPPFLAGS="${saved_cppflags}"
1046                 LIBS="${saved_libs}"
1047                 imap_ldflags=""
1048                 imap_libs="-lc-client"
1049                 imap_include="-DUSE_SYSTEM_IMAP" #Try the imap directory first
1050                 CPPFLAGS="${CPPFLAGS} ${imap_include}"
1051                 LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
1052                 AC_LINK_IFELSE(
1053                 AC_LANG_PROGRAM(
1054                                 [#include <stdio.h>
1055                                 #include <imap/c-client.h>
1056                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
1057                                 {
1058                                 }
1059                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
1060                                 {
1061                                 }
1062                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
1063                                 {
1064                                 }
1065                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
1066                                 {
1067                                 }
1068                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1069                                 {
1070                                 }
1071                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1072                                 {
1073                                 }
1074                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1075                                 {
1076                                 }
1077                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1078                                 {
1079                                 }
1080                                 void mm_log (char *string,long errflg)
1081                                 {
1082                                 }
1083                                 void mm_dlog (char *string)
1084                                 {
1085                                 }
1086                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1087                                 {
1088                                 }
1089                                 void mm_critical (MAILSTREAM *stream)
1090                                 {
1091                                 }
1092                                 void mm_nocritical (MAILSTREAM *stream)
1093                                 {
1094                                 }
1095                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1096                                 {
1097                                 }
1098                                 void mm_fatal (char *string)
1099                                 {
1100                                 }],
1101                                 [
1102                                 MAILSTREAM *foo = mail_open(NULL, "", 0);
1103                                 ]
1104                         ),
1105                         [ac_cv_imap_tk="yes"],
1106                         [ac_cv_imap_tk="no"]
1107                 )
1108                 if test "${ac_cv_imap_tk}" = "yes"; then
1109                         AC_LINK_IFELSE(
1110                                 AC_LANG_PROGRAM(
1111                                         [#include <stdio.h>
1112                                         #include <imap/c-client.h>
1113                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
1114                                         {
1115                                         }
1116                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
1117                                         {
1118                                         }
1119                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
1120                                         {
1121                                         }
1122                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
1123                                         {
1124                                         }
1125                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1126                                         {
1127                                         }
1128                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1129                                         {
1130                                         }
1131                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1132                                         {
1133                                         }
1134                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1135                                         {
1136                                         }
1137                                         void mm_log (char *string,long errflg)
1138                                         {
1139                                         }
1140                                         void mm_dlog (char *string)
1141                                         {
1142                                         }
1143                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1144                                         {
1145                                         }
1146                                         void mm_critical (MAILSTREAM *stream)
1147                                         {
1148                                         }
1149                                         void mm_nocritical (MAILSTREAM *stream)
1150                                         {
1151                                         }
1152                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1153                                         {
1154                                         }
1155                                         void mm_fatal (char *string)
1156                                         {
1157                                         }],
1158                                         [
1159                                         long check = mail_expunge_full(NULL, "", 0);
1160                                         ]
1161                                 ),
1162                                 [ac_cv_imap_tk2006="yes"],
1163                                 [ac_cv_imap_tk2006="no"]
1164                         )
1165                 else #looking in imap directory didn't work, try c-client
1166                         imap_ldflags=""
1167                         imap_libs="-lc-client"
1168                         imap_include="-DUSE_SYSTEM_CCLIENT"
1169                         CPPFLAGS="${saved_cppflags}"
1170                         LIBS="${saved_libs}"
1171                         CPPFLAGS="${CPPFLAGS} ${imap_include}"
1172                         LIBS="${LIBS} ${imap_libs} "`echo ${imap_ldflags}`
1173                         AC_LINK_IFELSE(
1174                         AC_LANG_PROGRAM(
1175                                         [#include <stdio.h>
1176                                         #include <c-client/c-client.h>
1177                                         void mm_searched (MAILSTREAM *stream,unsigned long number)
1178                                         {
1179                                         }
1180                                         void mm_exists (MAILSTREAM *stream,unsigned long number)
1181                                         {
1182                                         }
1183                                         void mm_expunged (MAILSTREAM *stream,unsigned long number)
1184                                         {
1185                                         }
1186                                         void mm_flags (MAILSTREAM *stream,unsigned long number)
1187                                         {
1188                                         }
1189                                         void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1190                                         {
1191                                         }
1192                                         void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1193                                         {
1194                                         }
1195                                         void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1196                                         {
1197                                         }
1198                                         void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1199                                         {
1200                                         }
1201                                         void mm_log (char *string,long errflg)
1202                                         {
1203                                         }
1204                                         void mm_dlog (char *string)
1205                                         {
1206                                         }
1207                                         void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1208                                         {
1209                                         }
1210                                         void mm_critical (MAILSTREAM *stream)
1211                                         {
1212                                         }
1213                                         void mm_nocritical (MAILSTREAM *stream)
1214                                         {
1215                                         }
1216                                         long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1217                                         {
1218                                         }
1219                                         void mm_fatal (char *string)
1220                                         {
1221                                         }],
1222                                         [
1223                                         MAILSTREAM *foo = mail_open(NULL, "", 0);
1224                                         ]
1225                                 ),
1226                                 [ac_cv_imap_tk="yes"],
1227                                 [ac_cv_imap_tk="no"]
1228                         )
1229                         if test "${ac_cv_imap_tk}" = "yes"; then
1230                                 AC_LINK_IFELSE(
1231                                         AC_LANG_PROGRAM(
1232                                                 [#include <stdio.h>
1233                                                 #include <c-client/c-client.h>
1234                                                 void mm_searched (MAILSTREAM *stream,unsigned long number)
1235                                                 {
1236                                                 }
1237                                                 void mm_exists (MAILSTREAM *stream,unsigned long number)
1238                                                 {
1239                                                 }
1240                                                 void mm_expunged (MAILSTREAM *stream,unsigned long number)
1241                                                 {
1242                                                 }
1243                                                 void mm_flags (MAILSTREAM *stream,unsigned long number)
1244                                                 {
1245                                                 }
1246                                                 void mm_notify (MAILSTREAM *stream,char *string,long errflg)
1247                                                 {
1248                                                 }
1249                                                 void mm_list (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1250                                                 {
1251                                                 }
1252                                                 void mm_lsub (MAILSTREAM *stream,int delimiter,char *mailbox,long attributes)
1253                                                 {
1254                                                 }
1255                                                 void mm_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status)
1256                                                 {
1257                                                 }
1258                                                 void mm_log (char *string,long errflg)
1259                                                 {
1260                                                 }
1261                                                 void mm_dlog (char *string)
1262                                                 {
1263                                                 }
1264                                                 void mm_login (NETMBX *mb,char *user,char *pwd,long trial)
1265                                                 {
1266                                                 }
1267                                                 void mm_critical (MAILSTREAM *stream)
1268                                                 {
1269                                                 }
1270                                                 void mm_nocritical (MAILSTREAM *stream)
1271                                                 {
1272                                                 }
1273                                                 long mm_diskerror (MAILSTREAM *stream,long errcode,long serious)
1274                                                 {
1275                                                 }
1276                                                 void mm_fatal (char *string)
1277                                                 {
1278                                                 }],
1279                                                 [
1280                                                 long check = mail_expunge_full(NULL, "", 0);
1281                                                 ]
1282                                         ),
1283                                         [ac_cv_imap_tk2006="yes"],
1284                                         [ac_cv_imap_tk2006="no"]
1285                                 )
1286                         fi
1287                 fi
1288         fi
1289         if test "${ac_cv_imap_tk}" = "yes"; then
1290                 AC_MSG_RESULT(yes)
1291                 IMAP_TK_LIB="${imap_libs} "`echo ${imap_ldflags}`
1292                 IMAP_TK_INCLUDE="${imap_include}"
1293                 PBX_IMAP_TK=1
1294                 AC_DEFINE([HAVE_IMAP_TK], 1, [Define if your system has the UW IMAP Toolkit c-client library.])
1295                 if test "${ac_cv_imap_tk2006}" = "yes"; then
1296                         AC_DEFINE([HAVE_IMAP_TK2006], 1, [Define if your system has the UW IMAP Toolkit c-client library version 2006 or greater.])
1297                 fi
1298         else
1299                 AC_MSG_RESULT(no) 
1300         fi
1301         CPPFLAGS="${saved_cppflags}"
1302         LIBS="${saved_libs}"
1303 fi
1304
1305 AST_EXT_LIB_CHECK([IODBC], [iodbc], [SQLConnect], [sql.h], [-lpthread])
1306
1307 AST_EXT_LIB_CHECK([INOTIFY], [c], [inotify_init], [sys/inotify.h])
1308
1309 AST_EXT_LIB_CHECK([JACK], [jack], [jack_activate], [jack/jack.h])
1310
1311 # Needed by unixodbc
1312 AST_EXT_LIB_CHECK([LTDL], [ltdl], [lt_dlinit], [ltdl.h], [])
1313
1314 AST_EXT_LIB_CHECK([LDAP], [ldap], [ldap_initialize], [ldap.h])
1315
1316 AC_ARG_ENABLE([xmldoc],
1317         [AS_HELP_STRING([--disable-xmldoc],
1318                 [Explicity disable XML documentation])],
1319         [case "${enableval}" in
1320                 y|ye|yes) disable_xmldoc=no ;;
1321                 n|no)  disable_xmldoc=yes ;;
1322                 *) AC_MSG_ERROR(bad value ${enableval} for --disable-xmldoc)  ;;
1323         esac], [disable_xmldoc=no])
1324
1325 if test "${disable_xmldoc}" != "yes"; then
1326         AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , ,
1327         [#include <libxml/tree.h>
1328         #include <libxml/parser.h>],
1329         [LIBXML_TEST_VERSION])
1330         if test "${PBX_LIBXML2}" != 1; then
1331                 AC_MSG_NOTICE(*** XML documentation will not be available because the 'libxml2' development package is missing.)
1332                 AC_MSG_NOTICE(*** Please run the 'configure' script with the '--disable-xmldoc' parameter option)
1333                 AC_MSG_NOTICE(*** or install the 'libxml2' development package.)
1334                 exit 1
1335         fi
1336 fi
1337
1338 AST_EXT_LIB_CHECK([MISDN], [mISDN], [mISDN_open], [mISDNuser/mISDNlib.h])
1339
1340 if test "${PBX_MISDN}" = 1; then
1341    AST_EXT_LIB_CHECK([ISDNNET], [isdnnet], [init_manager], [mISDNuser/isdn_net.h], [-lmISDN -lpthread])
1342    AST_EXT_LIB_CHECK([SUPPSERV], [suppserv], [encodeFac], [mISDNuser/suppserv.h])
1343    AST_C_DEFINE_CHECK([MISDN_FAC_RESULT], [Fac_RESULT], [mISDNuser/suppserv.h])
1344    AST_C_DEFINE_CHECK([MISDN_FAC_ERROR], [Fac_ERROR], [mISDNuser/suppserv.h])
1345    AC_CHECK_HEADER([linux/mISDNdsp.h], [AC_DEFINE_UNQUOTED([MISDN_1_2], 1, [Build chan_misdn for mISDN 1.2 or later.])])
1346 fi
1347
1348 AST_EXT_TOOL_CHECK([MYSQLCLIENT], [mysql_config])
1349
1350 AST_EXT_LIB_CHECK([NBS], [nbs], [nbs_connect], [nbs.h])
1351
1352 AST_EXT_LIB_CHECK([NCURSES], [ncurses], [initscr], [curses.h])
1353
1354 AST_EXT_TOOL_CHECK([NEON], [neon-config])
1355
1356 AST_EXT_TOOL_CHECK([NETSNMP], [net-snmp-config], , [--agent-libs],
1357 [#include <net-snmp/net-snmp-config.h>
1358 #include <net-snmp/net-snmp-includes.h>
1359 #include <net-snmp/agent/net-snmp-agent-includes.h>],
1360 [int callback = snmp_register_callback(0, 0, NULL, NULL)])
1361
1362 AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h])
1363
1364 AST_EXT_LIB_CHECK([UNIXODBC], [odbc], [SQLConnect], [sql.h], [])
1365
1366 AST_EXT_LIB_CHECK([OGG], [ogg], [ogg_sync_init], [])
1367
1368 # Non-glibc platforms require libexecinfo for backtrace support
1369 AST_EXT_LIB_CHECK([BKTR], [execinfo], [backtrace], [execinfo.h])
1370 # Linux, however, has backtrace directly in glibc
1371 AST_EXT_LIB_CHECK([BKTR], [c], [backtrace], [execinfo.h])
1372
1373 AST_EXT_LIB_CHECK([BLUETOOTH], [bluetooth], [ba2str], [bluetooth/bluetooth.h])
1374
1375 # possible places for oss definitions
1376 AST_EXT_LIB_CHECK([OSS], [ossaudio], [], [linux/soundcard.h])
1377 AST_EXT_LIB_CHECK([OSS], [ossaudio], [], [sys/soundcard.h])
1378 AST_EXT_LIB_CHECK([OSS], [ossaudio], [oss_ioctl_mixer], [soundcard.h])
1379
1380 PG_CONFIG=No
1381 if test "${USE_PGSQL}" != "no"; then    
1382    if test "x${PGSQL_DIR}" != "x"; then
1383       AC_PATH_TOOL([PG_CONFIG], [pg_config], No, [${PGSQL_DIR}/bin])
1384       if test x"${PG_CONFIG}" = xNo; then
1385          AC_MSG_NOTICE([***])
1386          AC_MSG_NOTICE([*** pg_config was not found in the path you specified:])
1387          AC_MSG_NOTICE([*** ${PGSQL_DIR}/bin])
1388          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
1389          AC_MSG_NOTICE([*** including --without-postgres])
1390          exit 1
1391       fi
1392    else
1393       AC_PATH_TOOL([PG_CONFIG], [pg_config], No)
1394    fi
1395 fi
1396 if test "${PG_CONFIG}" != No; then
1397    PGSQL_libdir=`${PG_CONFIG} --libdir`
1398    PGSQL_includedir=`${PG_CONFIG} --includedir`
1399    if test "x$?" != "x0" ; then
1400       if test -n "${PGSQL_MANDATORY}" ; then
1401          AC_MSG_NOTICE([***])
1402          AC_MSG_NOTICE([*** The PostgreSQL installation on this system appears to be broken.])
1403          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
1404          AC_MSG_NOTICE([*** including --without-postgres])
1405          exit 1
1406           fi
1407    else 
1408       AC_CHECK_LIB([pq], [PQescapeStringConn], AC_DEFINE_UNQUOTED([HAVE_PGSQL], 1,
1409       [Define to indicate the PostgreSQL library]), [], -L${PGSQL_libdir} -lz)
1410
1411       if test "${ac_cv_lib_pq_PQescapeStringConn}" = "yes"; then
1412          PGSQL_LIB="-L${PGSQL_libdir} -lpq -lz"
1413          PGSQL_INCLUDE="-I${PGSQL_includedir}"
1414          PBX_PGSQL=1
1415       elif test -n "${PGSQL_MANDATORY}";
1416       then
1417          AC_MSG_NOTICE([***])
1418          AC_MSG_NOTICE([*** The PostgreSQL installation on this system appears to be broken.])
1419          AC_MSG_NOTICE([*** Either correct the installation, or run configure])
1420          AC_MSG_NOTICE([*** including --without-postgres])
1421          exit 1
1422       fi
1423    fi
1424 fi
1425
1426 AST_EXT_LIB_CHECK([POPT], [popt], [poptStrerror], [popt.h])
1427
1428 AST_EXT_LIB_CHECK([PORTAUDIO], [portaudio], [Pa_GetDeviceCount], [portaudio.h])
1429
1430 AST_EXT_LIB_CHECK([PRI], [pri], [pri_connected_line_update], [libpri.h])
1431
1432 # ------------------------------------v
1433 # TODO: The code can be changed to always include these features now.
1434 # These features will always be present if pri_connected_line_update is available.
1435 AST_EXT_LIB_CHECK([PRI_PROG_W_CAUSE], [pri], [pri_progress_with_cause], [libpri.h])
1436 AST_EXT_LIB_CHECK([PRI_INBANDDISCONNECT], [pri], [pri_set_inbanddisconnect], [libpri.h])
1437 AST_EXT_LIB_CHECK([PRI_SERVICE_MESSAGES], [pri], [pri_maintenance_service], [libpri.h])
1438 AST_EXT_LIB_CHECK([PRI_REVERSE_CHARGE], [pri], [pri_sr_set_reversecharge], [libpri.h])
1439 # ------------------------------------^
1440
1441 AST_EXT_LIB_CHECK([RESAMPLE], [resample], [resample_open], [libresample.h], [-lm])
1442
1443 AST_C_COMPILE_CHECK([SPANDSP], [
1444                 #if SPANDSP_RELEASE_DATE < 20080516
1445                 #error "spandsp 0.0.5 or greater is required"
1446                 #endif
1447         ], [spandsp/version.h], , [minimum version of SpanDSP])
1448
1449 if test "x${PBX_SPANDSP}" = "x1" ; then
1450         # We found the correct version in the header, now let's make sure it links
1451         # properly, and that libtiff is available
1452         PBX_SPANDSP=0
1453         AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [span_set_message_handler], [spandsp.h], [-ltiff])
1454 fi
1455
1456 if test "x${PBX_SPANDSP}" = "x1" ; then
1457         # We also need t38_terminal_init()
1458         PBX_SPANDSP=0
1459         AST_EXT_LIB_CHECK([SPANDSP], [spandsp], [t38_terminal_init], [spandsp.h], [-ltiff])
1460 fi
1461
1462 AST_EXT_LIB_CHECK([SS7], [ss7], [ss7_pollflags], [libss7.h])
1463
1464 AST_EXT_LIB_CHECK([OPENR2], [openr2], [openr2_chan_new], [openr2.h])
1465
1466 if test "${USE_PWLIB}" != "no"; then
1467         if test -n "${PWLIB_DIR}"; then
1468                 PWLIBDIR="${PWLIB_DIR}"
1469         fi
1470         AST_CHECK_PWLIB()
1471         AST_CHECK_PWLIB_VERSION([PWLib], [PWLIB], [ptbuildopts.h], [1], [9], [2], [P[[WT]]LIB_VERSION])
1472                 
1473         if test "${HAS_PWLIB:-unset}" != "unset"; then
1474                 AST_CHECK_PWLIB_PLATFORM()
1475
1476                 PLATFORM_PWLIB="pt_${PWLIB_PLATFORM}_r"
1477
1478                 AST_CHECK_PWLIB_BUILD([PWLib], [PWLIB],
1479                         [Define if your system has the PWLib libraries.],
1480                         [#include "ptlib.h"],
1481                         [int q = (int) PTime::IsDaylightSavings();])
1482         fi
1483 fi
1484
1485 if test "${PBX_PWLIB}" = "1" -a "${USE_OPENH323}" != "no" ; then
1486         if test -n "${OPENH323_DIR}"; then
1487                 OPENH323DIR="${OPENH323_DIR}"
1488         fi
1489         AST_CHECK_OPENH323()
1490         AST_CHECK_PWLIB_VERSION([OpenH323], [OPENH323], [openh323buildopts.h], [1], [17], [3])
1491         AST_CHECK_OPENH323_BUILD()
1492         PLATFORM_OPENH323="h323_${PWLIB_PLATFORM}_${OPENH323_SUFFIX}"
1493         AST_CHECK_PWLIB_BUILD([OpenH323], [OPENH323],
1494                 [Define if your system has the OpenH323 libraries.],
1495                 [#include "ptlib.h"
1496                 #include "h323.h"
1497                 #include "h323ep.h"],
1498                 [H323EndPoint ep = H323EndPoint();],
1499                 [${PWLIB_INCLUDE}], [${PWLIB_LIB}])
1500 fi
1501
1502 AST_EXT_LIB_CHECK([LUA], [lua5.1], [luaL_newstate], [lua5.1/lua.h], [-lm]) 
1503 if test "x${PBX_LUA}" = "x1" ; then
1504         AC_DEFINE_UNQUOTED([LUA51_PREFIX], [1], [Define to 1 if lua is found with a lua5.1 prefix])
1505 fi
1506         
1507 # Some distributions (like SuSE) remove the 5.1 suffix.
1508 AST_EXT_LIB_CHECK([LUA], [lua], [luaL_register], [lua.h], [-lm]) 
1509
1510 AST_EXT_LIB_CHECK([RADIUS], [radiusclient-ng], [rc_read_config], [radiusclient-ng.h])
1511
1512 # This is a bit complex... in reality, Asterisk's AIS support is dependent on finding
1513 # *any* implementation of AIS, not just OpenAIS. However, the configure script needs
1514 # to know the specifics of each possible implementation, and then represent the one
1515 # that was found as 'AIS'.
1516
1517 PBX_AIS=0
1518
1519 # OpenAIS installs its libraries into /usr/lib/openais by default, so check there
1520
1521 AST_EXT_LIB_CHECK([OPENAIS], [SaClm], [saClmInitialize], [openais/saClm.h], [-L/usr/lib/openais -L/usr/lib64/openais])
1522
1523 if test "${PBX_OPENAIS}" = 1; then
1524    PBX_AIS=1
1525    if test -n "${OPENAIS_DIR}"; then
1526       AIS_INCLUDE="${OPENAIS_INCLUDE}/openais"
1527       AIS_LIB="-lSaEvt ${OPENAIS_LIB}"
1528    else
1529       AIS_INCLUDE="-I/usr/include/openais"
1530       AIS_LIB="-lSaClm -lSaEvt -L/usr/lib/openais -L/usr/lib64/openais"
1531    fi
1532 fi
1533
1534 AC_SUBST(PBX_AIS)
1535 AC_SUBST(AIS_INCLUDE)
1536 AC_SUBST(AIS_LIB)
1537
1538 AST_EXT_LIB_CHECK([SPEEX], [speex], [speex_encode], [speex/speex.h], [-lm])
1539
1540 # See if the main speex library contains the preprocess functions
1541 AST_EXT_LIB_CHECK([SPEEX_PREPROCESS], [speex], [speex_preprocess_ctl], [speex/speex.h], [-lm])
1542 if test "${PBX_SPEEX_PREPROCESS}" = 1; then
1543    PBX_SPEEX_PREPROCESS=1
1544 fi
1545
1546 AST_EXT_LIB_CHECK([SPEEXDSP], [speexdsp], [speex_preprocess_ctl], [speex/speex.h], [-lm])
1547 if test "${PBX_SPEEXDSP}" = 1; then
1548    PBX_SPEEX_PREPROCESS=1
1549 fi
1550
1551 AC_SUBST(PBX_SPEEX_PREPROCESS)
1552
1553 AST_EXT_LIB_CHECK([SQLITE], [sqlite], [sqlite_exec], [sqlite.h])
1554
1555 AST_EXT_LIB_CHECK([SQLITE3], [sqlite3], [sqlite3_open], [sqlite3.h])
1556
1557 AST_EXT_LIB_CHECK([CRYPTO], [crypto], [AES_encrypt], [openssl/aes.h])
1558
1559 if test "$PBX_CRYPTO" = "1";
1560 then
1561     AST_EXT_LIB_CHECK([OPENSSL], [ssl], [ssl2_connect], [openssl/ssl.h], [-lcrypto])
1562 fi
1563
1564 if test "$PBX_OPENSSL" = "1";
1565 then
1566     AST_CHECK_OSPTK([3], [5], [0])
1567 fi
1568
1569 AST_EXT_TOOL_CHECK([GMIME], [gmime-config], [], [], [#include <gmime/gmime.h>], [gboolean q = g_mime_check_version(0,0,0);])
1570
1571 AST_EXT_LIB_CHECK([HOARD], [hoard], [malloc], [])
1572
1573 AST_EXT_LIB_CHECK([FREETDS], [sybdb], [dbinit], [sybdb.h])
1574
1575 AST_EXT_LIB_CHECK([TERMCAP], [termcap], [tgetent], [])
1576
1577 AST_EXT_LIB_CHECK([TINFO], [tinfo], [tgetent], [])
1578
1579 AC_CHECK_LIB([tonezone], [tone_zone_find_by_num], tonezone_does_not_need_lm=yes, tonezone_does_not_need_lm=no)
1580
1581 if test "${tonezone_does_not_need_lm}" = "no" ; then
1582   tonezone_extra="-lm"
1583 fi
1584
1585 AST_EXT_LIB_CHECK([TONEZONE], [tonezone], [tone_zone_find], [dahdi/tonezone.h], [${tonezone_extra} ${DAHDI_INCLUDE}])
1586
1587 AST_EXT_LIB_CHECK([USB], [usb], [usb_init], [usb.h], [])
1588
1589 if test "${OSARCH}" = "OpenBSD";
1590 then
1591         AST_EXT_LIB_CHECK([VORBIS], [vorbis], [vorbis_info_init], [vorbis/codec.h], [-lm -lvorbisenc -logg])
1592 else
1593         AST_EXT_LIB_CHECK([VORBIS], [vorbis], [vorbis_info_init], [vorbis/codec.h], [-lm -lvorbisenc])
1594 fi
1595
1596 AC_LANG_PUSH(C++)
1597
1598 if test "${USE_VPB}" != "no"; then
1599    AC_MSG_CHECKING(for vpb_open in -lvpb)
1600    saved_libs="${LIBS}"
1601    saved_cppflags="${CPPFLAGS}"
1602    if test "x${VPB_DIR}" != "x"; then
1603       if test -d ${VPB_DIR}/lib; then
1604          vpblibdir=${VPB_DIR}/lib
1605       else
1606          vpblibdir=${VPB_DIR}
1607       fi
1608       LIBS="${LIBS} -L${vpblibdir}"
1609       CPPFLAGS="${CPPFLAGS} -I${VPB_DIR}/include"
1610    fi
1611    LIBS="${LIBS} -lvpb -lpthread"
1612    AC_LINK_IFELSE(
1613         [
1614         AC_LANG_PROGRAM(
1615         [#include <vpbapi.h>],
1616         [int q = vpb_open(0,0);])
1617         ],
1618         [       AC_MSG_RESULT(yes) 
1619                 ac_cv_lib_vpb_vpb_open="yes" 
1620         ],
1621         [       AC_MSG_RESULT(no) 
1622                 ac_cv_lib_vpb_vpb_open="no" 
1623         ]
1624         )
1625    LIBS="${saved_libs}"
1626    CPPFLAGS="${saved_cppflags}"
1627    if test "${ac_cv_lib_vpb_vpb_open}" = "yes"; then
1628         VPB_LIB="-lvpb"
1629         if test "${VPB_DIR}" != ""; then
1630            VPB_LIB="-L${vpblibdir}  ${VPB_LIB}"
1631            VPB_INCLUDE="-I${VPB_DIR}/include"
1632         fi
1633         PBX_VPB=1
1634         AC_DEFINE([HAVE_VPB], 1, [Define if your system has the VoiceTronix API libraries.])
1635    fi
1636 fi
1637
1638 AC_LANG_POP
1639
1640 AST_EXT_LIB_CHECK([ZLIB], [z], [compress], [zlib.h])
1641
1642 EDITLINE_LIB=""
1643 if test "x$TERMCAP_LIB" != "x" ; then
1644   EDITLINE_LIB="$TERMCAP_LIB"
1645 elif test "x$TINFO_LIB" != "x" ; then
1646   EDITLINE_LIB="$TINFO_LIB"
1647 elif test "x$CURSES_LIB" != "x" ; then
1648   EDITLINE_LIB="$CURSES_LIB"
1649 elif test "x$NCURSES_LIB" != "x" ; then
1650   EDITLINE_LIB="$NCURSES_LIB"
1651 else
1652   AC_MSG_ERROR(*** termcap support not found)
1653 fi
1654 AC_SUBST(EDITLINE_LIB)
1655
1656 if test "x${PBX_UNIXODBC}" = "x1" -o "x${PBX_IODBC}" = "x1"; then
1657         # Does ODBC support wide characters?
1658         AC_MSG_CHECKING(whether ODBC has support for Unicode types)
1659         AC_LINK_IFELSE(
1660                 AC_LANG_PROGRAM(
1661                         [#include <sql.h>
1662 #include <sqlext.h>],
1663                         [int foo = SQL_WCHAR]),
1664                 AC_MSG_RESULT(yes)
1665                         AC_DEFINE([HAVE_ODBC_WCHAR], [1], [Define to 1 if your ODBC library has wide (Unicode) types.]),
1666                 AC_MSG_RESULT(no)
1667         )
1668 fi
1669
1670 AC_CHECK_HEADER([h323.h], [PBX_H323=1], [PBX_H323=0])
1671 AC_SUBST(PBX_H323)
1672
1673 AC_CHECK_HEADER([linux/compiler.h],
1674                 [AC_DEFINE_UNQUOTED([HAVE_LINUX_COMPILER_H], 1, [Define to 1 if your system has linux/compiler.h.])])
1675
1676 AC_CHECK_HEADER([linux/ixjuser.h], [PBX_IXJUSER=1], [PBX_IXJUSER=0], [
1677                                    #include <linux/version.h>
1678                                    #ifdef HAVE_LINUX_COMPILER_H
1679                                    #include <linux/compiler.h>
1680                                    #endif
1681                                    ])
1682 AC_SUBST(PBX_IXJUSER)
1683
1684 AST_EXT_TOOL_CHECK([SDL], [sdl-config])
1685 AST_EXT_LIB_CHECK([SDL_IMAGE], [SDL_image], [IMG_Load], [SDL_image.h], [${SDL_LIB}], [${SDL_INCLUDE}])
1686 AST_EXT_LIB_CHECK([FFMPEG], [avcodec], [sws_getContext], [ffmpeg/avcodec.h], [-lpthread -lz -lm])
1687
1688 # possible places for video4linux version 1
1689 AC_CHECK_HEADER([linux/videodev.h],
1690         [AC_DEFINE_UNQUOTED([HAVE_VIDEODEV_H], 1, [Define to 1 if your system has linux/videodev.h.])])
1691
1692 # possible places for X11
1693 AST_EXT_LIB_CHECK([X11], [X11], [XOpenDisplay], [X11/Xlib.h],,, [standard_path])
1694 AST_EXT_LIB_CHECK([X11], [X11], [XOpenDisplay], [X11/Xlib.h],, [-I/usr/X11R6/include], [X11R6])
1695
1696 if test "${cross_compiling}" = "no";
1697 then
1698   AC_CHECK_FILE(/sbin/launchd, AC_DEFINE([HAVE_SBIN_LAUNCHD], 1, [Define to 1 if your system has /sbin/launchd.]))
1699 fi
1700
1701 PBX_GTK=0
1702 AST_EXT_TOOL_CHECK([GTK], [gtk-config], [--cflags gthread], [--libs gthread])
1703
1704 PBX_GTK2=0
1705 AC_CHECK_TOOL(PKGCONFIG, pkg-config, No)
1706 if test ! "x${PKGCONFIG}" = xNo; then
1707    GTK2_INCLUDE=$(${PKGCONFIG} gtk+-2.0 --cflags 2>/dev/null)
1708    GTK2_LIB=$(${PKGCONFIG} gtk+-2.0 --libs)
1709    PBX_GTK2=1
1710    AC_DEFINE([HAVE_GTK2], 1, [Define if your system has the GTK2 libraries.])
1711 fi
1712 AC_SUBST(PBX_GTK2)
1713 AC_SUBST(GTK2_INCLUDE)
1714 AC_SUBST(GTK2_LIB)
1715
1716 AST_LIBCURL_CHECK_CONFIG([], [7.10.1])
1717
1718 # build a GENERIC_ODBC result based on the presence of either UnixODBC (preferred)
1719 # or iODBC
1720
1721 PBX_GENERIC_ODBC=0
1722
1723 if test "${PBX_UNIXODBC}" = 1; then
1724    PBX_GENERIC_ODBC=1
1725    GENERIC_ODBC_LIB="${UNIXODBC_LIB}"
1726    GENERIC_ODBC_INCLUDE="${UNIXODBC_INCLUDE}"
1727 elif test "${PBX_IODBC}" = 1; then
1728    PBX_GENERIC_ODBC=1
1729    GENERIC_ODBC_LIB="${IODBC_LIB}"
1730    GENERIC_ODBC_INCLUDE="${IODBC_INCLUDE}"
1731 fi
1732
1733 AC_SUBST([GENERIC_ODBC_LIB])
1734 AC_SUBST([GENERIC_ODBC_INCLUDE])
1735 AC_SUBST([PBX_GENERIC_ODBC])
1736
1737 PBX_SYSLOG=0
1738
1739 if test "${ac_cv_header_syslog_h}" = "yes"; then
1740    # syslog facilities
1741    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_AUTH],     [LOG_AUTH],     [syslog.h])
1742    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_AUTHPRIV], [LOG_AUTHPRIV], [syslog.h])
1743    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_CRON],     [LOG_CRON],     [syslog.h])
1744    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_DAEMON],   [LOG_DAEMON],   [syslog.h])
1745    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_FTP],      [LOG_FTP],      [syslog.h])
1746    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_KERN],     [LOG_KERN],     [syslog.h])
1747    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_LPR],      [LOG_LPR],      [syslog.h])
1748    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_MAIL],     [LOG_MAIL],     [syslog.h])
1749    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_NEWS],     [LOG_NEWS],     [syslog.h])
1750    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_SYSLOG],   [LOG_SYSLOG],   [syslog.h])
1751    AST_C_DEFINE_CHECK([SYSLOG_FACILITY_LOG_UUCP],     [LOG_UUCP],     [syslog.h])
1752    PBX_SYSLOG=1
1753 fi
1754
1755 AC_SUBST([PBX_SYSLOG])
1756
1757 AC_CONFIG_FILES([build_tools/menuselect-deps makeopts channels/h323/Makefile])
1758 AST_CHECK_MANDATORY
1759
1760 if test -f build_tools/menuselect-deps; then
1761     # extract old values of all PBX_ variables from menuselect-deps
1762     # and preserve them so that menuselect can determine whether
1763     # any previously-met dependencies are no longer met and warn
1764     # the user appropriately
1765     while IFS="=:" read var val old_val; do
1766         eval "PBX_${var}=\${PBX_${var}}:${val}"
1767     done < build_tools/menuselect-deps
1768 fi
1769
1770 AC_OUTPUT
1771
1772 if test "x${silent}" != "xyes" ; then
1773 echo
1774 echo "               .\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$=..      "
1775 echo "            .\$7\$7..          .7\$\$7:.    "
1776 echo "          .\$\$:.                 ,\$7.7   "
1777 echo "        .\$7.     7\$\$\$\$           .\$\$77  "
1778 echo "     ..\$\$.       \$\$\$\$\$            .\$\$\$7 "
1779 echo "    ..7\$   .?.   \$\$\$\$\$   .?.       7\$\$\$."
1780 echo "   \$.\$.   .\$\$\$7. \$\$\$\$7 .7\$\$\$.      .\$\$\$."
1781 echo " .777.   .\$\$\$\$\$\$77\$\$\$77\$\$\$\$\$7.      \$\$\$,"
1782 echo " \$\$\$~      .7\$\$\$\$\$\$\$\$\$\$\$\$\$7.       .\$\$\$."
1783 echo ".\$\$7          .7\$\$\$\$\$\$\$7:          ?\$\$\$."
1784 echo "\$\$\$          ?7\$\$\$\$\$\$\$\$\$\$I        .\$\$\$7 "
1785 echo "\$\$\$       .7\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$      :\$\$\$. "
1786 echo "\$\$\$       \$\$\$\$\$\$7\$\$\$\$\$\$\$\$\$\$\$\$    .\$\$\$.  "
1787 echo "\$\$\$        \$\$\$   7\$\$\$7  .\$\$\$    .\$\$\$.   "
1788 echo "\$\$\$\$             \$\$\$\$7         .\$\$\$.    "
1789 echo "7\$\$\$7            7\$\$\$\$        7\$\$\$      "
1790 echo " \$\$\$\$\$                        \$\$\$       "
1791 echo "  \$\$\$\$7.                       \$\$  (TM)     "
1792 echo "   \$\$\$\$\$\$\$.           .7\$\$\$\$\$\$  \$\$      "
1793 echo "     \$\$\$\$\$\$\$\$\$\$\$\$7\$\$\$\$\$\$\$\$\$.\$\$\$\$\$\$      "
1794 echo "       \$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$.                "
1795 echo
1796 fi
1797
1798 AC_MSG_NOTICE(Package configured for: )
1799 AC_MSG_NOTICE( OS type  : $host_os)
1800 AC_MSG_NOTICE( Host CPU : $host_cpu)
1801 AC_MSG_NOTICE( build-cpu:vendor:os: $build_cpu : $build_vendor : $build_os :) 
1802 AC_MSG_NOTICE( host-cpu:vendor:os: $host_cpu : $host_vendor : $host_os :) 
1803 if test "${cross_compiling}" = "yes"; then
1804    AC_MSG_NOTICE( Cross Compilation = YES)
1805 fi