add check for video4linux
[asterisk/asterisk.git] / acinclude.m4
1 # Various support functions for configure.ac in asterisk
2 #
3
4 # Helper function to check for gcc attributes.
5 # AST_GCC_ATTRIBUTE([attribute name])
6
7 AC_DEFUN([AST_GCC_ATTRIBUTE],
8 [
9 AC_MSG_CHECKING(for compiler 'attribute $1' support)
10 AC_COMPILE_IFELSE(
11         AC_LANG_PROGRAM([static int __attribute__(($1)) test(void) {}],
12                         []),
13         AC_MSG_RESULT(yes)
14         AC_DEFINE_UNQUOTED([HAVE_ATTRIBUTE_$1], 1, [Define to 1 if your GCC C compiler supports the '$1' attribute.]),
15         AC_MSG_RESULT(no))
16 ])
17
18 # Helper function to setup variables for a package.
19 # $1 -> the package name. Used in configure.ac and also as a prefix
20 #       for the variables ($1_DIR, $1_INCLUDE, $1_LIB) in makeopts
21 # $3 -> option name, used in --with-$3 or --without-$3 when calling configure.
22 # $2 and $4 are just text describing the package (short and long form)
23
24 # AST_EXT_LIB_SETUP([package], [short description], [configure option name], [long description])
25
26 AC_DEFUN([AST_EXT_LIB_SETUP],
27 [
28     $1_DESCRIP="$2"
29     $1_OPTION="$3"
30     AC_ARG_WITH([$3], AC_HELP_STRING([--with-$3=PATH],[use $2 files in PATH $4]),
31     [
32         case ${withval} in
33         n|no)
34         USE_$1=no
35         ;;
36         y|ye|yes)
37         ac_mandatory_list="${ac_mandatory_list} $1"
38         ;;
39         *)
40         $1_DIR="${withval}"
41         ac_mandatory_list="${ac_mandatory_list} $1"
42         ;;
43         esac
44     ])
45     PBX_$1=0
46     AC_SUBST([$1_LIB])
47     AC_SUBST([$1_INCLUDE])
48     AC_SUBST([$1_DIR])
49     AC_SUBST([PBX_$1])
50 ])
51
52 # Check whether any of the mandatory modules are not present, and
53 # print error messages in case. The mandatory list is built using
54 # --with-* arguments when invoking configure.
55
56 AC_DEFUN([AST_CHECK_MANDATORY],
57 [
58         AC_MSG_CHECKING([for mandatory modules: ${ac_mandatory_list}])
59         err=0;
60         for i in ${ac_mandatory_list}; do
61                 eval "a=\${PBX_$i}"
62                 if test "x${a}" = "x1" ; then continue; fi
63                 if test ${err} = "0" ; then AC_MSG_RESULT(fail) ; fi
64                 AC_MSG_RESULT()
65                 eval "a=\${${i}_OPTION}"
66                 AC_MSG_NOTICE([***])
67                 AC_MSG_NOTICE([*** The $i installation appears to be missing or broken.])
68                 AC_MSG_NOTICE([*** Either correct the installation, or run configure])
69                 AC_MSG_NOTICE([*** including --without-${a}.])
70                 err=1
71         done
72         if test $err = 1 ; then exit 1; fi
73         AC_MSG_RESULT(ok)
74 ])
75
76 # The next three functions check for the availability of a given package.
77 # AST_C_DEFINE_CHECK looks for the presence of a #define in a header file,
78 # AST_EXT_LIB_CHECK looks for a symbol in a given library, or at least
79 #       for the presence of a header file.
80 # AST_EXT_TOOL_CHECK looks for a symbol in using $1-config to determine CFLAGS and LIBS
81 #
82 # They are only run if PBX_$1 != 1 (where $1 is the package),
83 # so you can call them multiple times and stop at the first matching one.
84 # On success, they both set PBX_$1 = 1, set $1_INCLUDE and $1_LIB as applicable,
85 # and also #define HAVE_$1 1 and #define HAVE_$1_VERSION ${last_argument}
86 # in autoconfig.h so you can tell which test succeeded.
87 # They should be called after AST_EXT_LIB_SETUP($1, ...)
88
89 # Check if a given macro is defined in a certain header.
90
91 # AST_C_DEFINE_CHECK([package], [macro name], [header file], [version])
92 AC_DEFUN([AST_C_DEFINE_CHECK],
93 [
94     if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
95         AC_MSG_CHECKING([for $2 in $3])
96         saved_cppflags="${CPPFLAGS}"
97         if test "x${$1_DIR}" != "x"; then
98             $1_INCLUDE="-I${$1_DIR}/include"
99         fi
100         CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE}"
101
102         AC_COMPILE_IFELSE(
103             [ AC_LANG_PROGRAM( [#include <$3>], [int foo = $2;]) ],
104             [   AC_MSG_RESULT(yes)
105                 PBX_$1=1
106                 AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 headers.])
107                 AC_DEFINE([HAVE_$1_VERSION], $4, [Define $1 headers version])
108             ],
109             [       AC_MSG_RESULT(no) ] 
110         )
111         CPPFLAGS="${saved_cppflags}"
112     fi
113 ])
114
115
116 # Check for existence of a given package ($1), either looking up a function
117 # in a library, or, if no function is supplied, only check for the
118 # existence of the header files.
119
120 # AST_EXT_LIB_CHECK([package], [library], [function], [header],
121 #        [extra libs], [extra cflags], [version])
122 AC_DEFUN([AST_EXT_LIB_CHECK],
123 [
124 if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
125    pbxlibdir=""
126    # if --with-$1=DIR has been specified, use it.
127    if test "x${$1_DIR}" != "x"; then
128       if test -d ${$1_DIR}/lib; then
129          pbxlibdir="-L${$1_DIR}/lib"
130       else
131          pbxlibdir="-L${$1_DIR}"
132       fi
133    fi
134    pbxfuncname="$3"
135    if test "x${pbxfuncname}" = "x" ; then   # empty lib, assume only headers
136       AST_$1_FOUND=yes
137    else
138       AC_CHECK_LIB([$2], [${pbxfuncname}], [AST_$1_FOUND=yes], [AST_$1_FOUND=no], ${pbxlibdir} $5)
139    fi
140
141    # now check for the header.
142    if test "${AST_$1_FOUND}" = "yes"; then
143       $1_LIB="${pbxlibdir} -l$2 $5"
144       # if --with-$1=DIR has been specified, use it.
145       if test "x${$1_DIR}" != "x"; then
146          $1_INCLUDE="-I${$1_DIR}/include"
147       fi
148       $1_INCLUDE="${$1_INCLUDE} $6"
149       if test "x$4" = "x" ; then        # no header, assume found
150          $1_HEADER_FOUND="1"
151       else                              # check for the header
152          saved_cppflags="${CPPFLAGS}"
153          CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE} $6"
154          AC_CHECK_HEADER([$4], [$1_HEADER_FOUND=1], [$1_HEADER_FOUND=0])
155          CPPFLAGS="${saved_cppflags}"
156       fi
157       if test "x${$1_HEADER_FOUND}" = "x0" ; then
158          $1_LIB=""
159          $1_INCLUDE=""
160       else
161          if test "x${pbxfuncname}" = "x" ; then         # only checking headers -> no library
162             $1_LIB=""
163          fi
164          PBX_$1=1
165          # XXX don't know how to evaluate the description (third argument) in AC_DEFINE_UNQUOTED
166          AC_DEFINE_UNQUOTED([HAVE_$1], 1, [Define this to indicate the ${$1_DESCRIP} library])
167          AC_DEFINE_UNQUOTED([HAVE_$1_VERSION], [$7], [Define to indicate the ${$1_DESCRIP} library version])
168       fi
169    fi
170 fi
171 ])
172
173
174 # Check for a package using $2-config. Similar to AST_EXT_LIB_CHECK,
175 # but use $2-config to determine cflags and libraries to use.
176
177 # AST_EXT_TOOL_CHECK([package], [tool name], [symbol], [version])
178 AC_DEFUN([AST_EXT_TOOL_CHECK],
179 [
180     if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
181         PBX_$1=0
182         AC_CHECK_TOOL(CONFIG_$1, $2-config, No)
183         if test ! "x${CONFIG_$1}" = xNo; then
184             $1_INCLUDE=$(${CONFIG_$1} --cflags $3)
185             $1_LIB=$(${CONFIG_$1} --libs $3)
186             PBX_$1=1
187             AC_DEFINE([HAVE_$1], 1, [Define if your system has the $1 libraries.])
188         fi
189     fi
190 ])
191
192 AC_DEFUN(
193 [AST_CHECK_GNU_MAKE], [AC_CACHE_CHECK(for GNU make, GNU_MAKE,
194    GNU_MAKE='Not Found' ;
195    GNU_MAKE_VERSION_MAJOR=0 ;
196    GNU_MAKE_VERSION_MINOR=0 ;
197    for a in make gmake gnumake ; do
198       if test -z "$a" ; then continue ; fi ;
199       if ( sh -c "$a --version" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then
200          GNU_MAKE=$a ;
201          GNU_MAKE_VERSION_MAJOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f3 -d' ' | cut -f1 -d'.'`
202          GNU_MAKE_VERSION_MINOR=`$GNU_MAKE --version | grep "GNU Make" | cut -f2 -d'.' | cut -c1-2`
203          break;
204       fi
205    done ;
206 ) ;
207 if test  "x$GNU_MAKE" = "xNot Found"  ; then
208    AC_MSG_ERROR( *** Please install GNU make.  It is required to build Asterisk!)
209    exit 1
210 fi
211 AC_SUBST([GNU_MAKE])
212 ])
213
214
215 AC_DEFUN(
216 [AST_CHECK_PWLIB], [
217 PWLIB_INCDIR=
218 PWLIB_LIBDIR=
219 AC_LANG_PUSH([C++])
220 if test "${PWLIBDIR:-unset}" != "unset" ; then
221   AC_CHECK_HEADER(${PWLIBDIR}/version.h, HAS_PWLIB=1, )
222 fi
223 if test "${HAS_PWLIB:-unset}" = "unset" ; then
224   if test "${OPENH323DIR:-unset}" != "unset"; then
225     AC_CHECK_HEADER(${OPENH323DIR}/../pwlib/version.h, HAS_PWLIB=1, )
226   fi
227   if test "${HAS_PWLIB:-unset}" != "unset" ; then
228     PWLIBDIR="${OPENH323DIR}/../pwlib"
229   else
230     AC_CHECK_HEADER(${HOME}/pwlib/include/ptlib.h, HAS_PWLIB=1, )
231     if test "${HAS_PWLIB:-unset}" != "unset" ; then
232       PWLIBDIR="${HOME}/pwlib"
233     else
234       AC_CHECK_HEADER(/usr/local/include/ptlib.h, HAS_PWLIB=1, )
235       if test "${HAS_PWLIB:-unset}" != "unset" ; then
236         AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/bin)
237         if test "${PTLIB_CONFIG:-unset}" = "unset" ; then
238           AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/local/share/pwlib/make)
239         fi
240         PWLIB_INCDIR="/usr/local/include"
241         PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
242         if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
243           if test "x$LIB64" != "x"; then
244             PWLIB_LIBDIR="/usr/local/lib64"
245           else
246             PWLIB_LIBDIR="/usr/local/lib"
247           fi
248         fi
249         PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
250         PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
251       else
252         AC_CHECK_HEADER(/usr/include/ptlib.h, HAS_PWLIB=1, )
253         if test "${HAS_PWLIB:-unset}" != "unset" ; then
254           AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/pwlib/make)
255           PWLIB_INCDIR="/usr/include"
256           PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
257           if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
258             if test "x$LIB64" != "x"; then
259               PWLIB_LIBDIR="/usr/lib64"
260             else
261               PWLIB_LIBDIR="/usr/lib"
262             fi
263           fi
264           PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
265           PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
266         fi
267       fi
268     fi
269   fi
270 fi
271
272 #if test "${HAS_PWLIB:-unset}" = "unset" ; then
273 #  echo "Cannot find pwlib - please install or set PWLIBDIR and try again"
274 #  exit
275 #fi
276
277 if test "${HAS_PWLIB:-unset}" != "unset" ; then
278   if test "${PWLIBDIR:-unset}" = "unset" ; then
279     if test "${PTLIB_CONFIG:-unset}" != "unset" ; then
280       PWLIBDIR=`$PTLIB_CONFIG --prefix`
281     else
282       echo "Cannot find ptlib-config - please install and try again"
283       exit
284     fi
285   fi
286
287   if test "x$PWLIBDIR" = "x/usr" -o "x$PWLIBDIR" = "x/usr/"; then
288     PWLIBDIR="/usr/share/pwlib"
289     PWLIB_INCDIR="/usr/include"
290     if test "x$LIB64" != "x"; then
291       PWLIB_LIBDIR="/usr/lib64"
292     else
293       PWLIB_LIBDIR="/usr/lib"
294     fi
295   fi
296   if test "x$PWLIBDIR" = "x/usr/local" -o "x$PWLIBDIR" = "x/usr/"; then
297     PWLIBDIR="/usr/local/share/pwlib"
298     PWLIB_INCDIR="/usr/local/include"
299     if test "x$LIB64" != "x"; then
300       PWLIB_LIBDIR="/usr/local/lib64"
301     else
302       PWLIB_LIBDIR="/usr/local/lib"
303     fi
304   fi
305
306   if test "${PWLIB_INCDIR:-unset}" = "unset"; then
307     PWLIB_INCDIR="${PWLIBDIR}/include"
308   fi
309   if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
310     PWLIB_LIBDIR="${PWLIBDIR}/lib"
311   fi
312
313   AC_SUBST([PWLIBDIR])
314   AC_SUBST([PWLIB_INCDIR])
315   AC_SUBST([PWLIB_LIBDIR])
316 fi
317   AC_LANG_POP([C++])
318 ])
319
320
321 AC_DEFUN(
322 [AST_CHECK_OPENH323_PLATFORM], [
323 PWLIB_OSTYPE=
324 case "$host_os" in
325   linux*)          PWLIB_OSTYPE=linux ;
326                 ;;
327   freebsd* )       PWLIB_OSTYPE=FreeBSD ;
328                 ;;
329   openbsd* )       PWLIB_OSTYPE=OpenBSD ;
330                                    ENDLDLIBS="-lossaudio" ;
331                 ;;
332   netbsd* )        PWLIB_OSTYPE=NetBSD ;
333                                    ENDLDLIBS="-lossaudio" ;
334                 ;;
335   solaris* | sunos* ) PWLIB_OSTYPE=solaris ;
336                 ;;
337   darwin* )            PWLIB_OSTYPE=Darwin ;
338                 ;;
339   beos*)           PWLIB_OSTYPE=beos ;
340                    STDCCFLAGS="$STDCCFLAGS -D__BEOS__"
341                 ;;
342   cygwin*)         PWLIB_OSTYPE=cygwin ;
343                 ;;
344   mingw*)              PWLIB_OSTYPE=mingw ;
345                            STDCCFLAGS="$STDCCFLAGS -mms-bitfields" ;
346                            ENDLDLIBS="-lwinmm -lwsock32 -lsnmpapi -lmpr -lcomdlg32 -lgdi32 -lavicap32" ;
347                 ;;
348   * )                  PWLIB_OSTYPE="$host_os" ;
349                            AC_MSG_WARN("OS $PWLIB_OSTYPE not recognized - proceed with caution!") ;
350                 ;;
351 esac
352
353 PWLIB_MACHTYPE=
354 case "$host_cpu" in
355    x86 | i686 | i586 | i486 | i386 ) PWLIB_MACHTYPE=x86
356                    ;;
357
358    x86_64)         PWLIB_MACHTYPE=x86_64 ;
359                    P_64BIT=1 ;
360                    LIB64=1 ;
361                    ;;
362
363    alpha | alphaev56 | alphaev6 | alphaev67 | alphaev7) PWLIB_MACHTYPE=alpha ;
364                    P_64BIT=1 ;
365                    ;;
366
367    sparc )         PWLIB_MACHTYPE=sparc ;
368                    ;;
369
370    powerpc )       PWLIB_MACHTYPE=ppc ;
371                    ;;
372
373    ppc )           PWLIB_MACHTYPE=ppc ;
374                    ;;
375
376    powerpc64 )     PWLIB_MACHTYPE=ppc64 ;
377                    P_64BIT=1 ;
378                    LIB64=1 ;
379                    ;;
380
381    ppc64 )         PWLIB_MACHTYPE=ppc64 ;
382                    P_64BIT=1 ;
383                    LIB64=1 ;
384                    ;;
385
386    ia64)           PWLIB_MACHTYPE=ia64 ;
387                    P_64BIT=1 ;
388                    ;;
389
390    s390x)          PWLIB_MACHTYPE=s390x ;
391                    P_64BIT=1 ;
392                    LIB64=1 ;
393                    ;;
394
395    s390)           PWLIB_MACHTYPE=s390 ;
396                    ;;
397
398    * )             PWLIB_MACHTYPE="$host_cpu";
399                    AC_MSG_WARN("CPU $PWLIB_MACHTYPE not recognized - proceed with caution!") ;;
400 esac
401
402 PWLIB_PLATFORM="${PWLIB_OSTYPE}_${PWLIB_MACHTYPE}"
403
404 AC_SUBST([PWLIB_PLATFORM])
405 ])
406
407
408 AC_DEFUN(
409 [AST_CHECK_OPENH323], [
410 OPENH323_INCDIR=
411 OPENH323_LIBDIR=
412 AC_LANG_PUSH([C++])
413 if test "${OPENH323DIR:-unset}" != "unset" ; then
414   AC_CHECK_HEADER(${OPENH323DIR}/version.h, HAS_OPENH323=1, )
415 fi
416 if test "${HAS_OPENH323:-unset}" = "unset" ; then
417   AC_CHECK_HEADER(${PWLIBDIR}/../openh323/version.h, OPENH323DIR="${PWLIBDIR}/../openh323"; HAS_OPENH323=1, )
418   if test "${HAS_OPENH323:-unset}" != "unset" ; then
419     OPENH323DIR="${PWLIBDIR}/../openh323"
420     saved_cppflags="${CPPFLAGS}"
421     CPPFLAGS="${CPPFLAGS} -I${PWLIB_INCDIR}/openh323 -I${PWLIB_INCDIR}"
422     AC_CHECK_HEADER(${OPENH323DIR}/include/h323.h, , OPENH323_INCDIR="${PWLIB_INCDIR}/openh323"; OPENH323_LIBDIR="${PWLIB_LIBDIR}", [#include <ptlib.h>])
423     CPPFLAGS="${saved_cppflags}"
424   else
425     saved_cppflags="${CPPFLAGS}"
426     CPPFLAGS="${CPPFLAGS} -I${HOME}/openh323/include -I${PWLIB_INCDIR}"
427     AC_CHECK_HEADER(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
428     CPPFLAGS="${saved_cppflags}"
429     if test "${HAS_OPENH323:-unset}" != "unset" ; then
430       OPENH323DIR="${HOME}/openh323"
431     else
432       saved_cppflags="${CPPFLAGS}"
433       CPPFLAGS="${CPPFLAGS} -I/usr/local/include/openh323 -I${PWLIB_INCDIR}"
434       AC_CHECK_HEADER(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
435       CPPFLAGS="${saved_cppflags}"
436       if test "${HAS_OPENH323:-unset}" != "unset" ; then
437         OPENH323DIR="/usr/local/share/openh323"
438         OPENH323_INCDIR="/usr/local/include/openh323"
439         if test "x$LIB64" != "x"; then
440           OPENH323_LIBDIR="/usr/local/lib64"
441         else
442           OPENH323_LIBDIR="/usr/local/lib"
443         fi
444       else
445         saved_cppflags="${CPPFLAGS}"
446         CPPFLAGS="${CPPFLAGS} -I/usr/include/openh323 -I${PWLIB_INCDIR}"
447         AC_CHECK_HEADER(/usr/include/openh323/h323.h, HAS_OPENH323=1, , [#include <ptlib.h>])
448         CPPFLAGS="${saved_cppflags}"
449         if test "${HAS_OPENH323:-unset}" != "unset" ; then
450           OPENH323DIR="/usr/share/openh323"
451           OPENH323_INCDIR="/usr/include/openh323"
452           if test "x$LIB64" != "x"; then
453             OPENH323_LIBDIR="/usr/lib64"
454           else
455             OPENH323_LIBDIR="/usr/lib"
456           fi
457         fi
458       fi
459     fi
460   fi
461 fi
462
463 if test "${HAS_OPENH323:-unset}" != "unset" ; then
464   if test "${OPENH323_INCDIR:-unset}" = "unset"; then
465     OPENH323_INCDIR="${OPENH323DIR}/include"
466   fi
467   if test "${OPENH323_LIBDIR:-unset}" = "unset"; then
468     OPENH323_LIBDIR="${OPENH323DIR}/lib"
469   fi
470
471   OPENH323_LIBDIR="`cd ${OPENH323_LIBDIR}; pwd`"
472   OPENH323_INCDIR="`cd ${OPENH323_INCDIR}; pwd`"
473   OPENH323DIR="`cd ${OPENH323DIR}; pwd`"
474
475   AC_SUBST([OPENH323DIR])
476   AC_SUBST([OPENH323_INCDIR])
477   AC_SUBST([OPENH323_LIBDIR])
478 fi
479   AC_LANG_POP([C++])
480 ])
481
482
483 AC_DEFUN(
484 [AST_CHECK_PWLIB_VERSION], [
485         if test "${HAS_$2:-unset}" != "unset"; then
486                 $2_VERSION=`grep "$2_VERSION" ${$2_INCDIR}/$3 | cut -f2 -d ' ' | sed -e 's/"//g'`
487                 $2_MAJOR_VERSION=`echo ${$2_VERSION} | cut -f1 -d.`
488                 $2_MINOR_VERSION=`echo ${$2_VERSION} | cut -f2 -d.`
489                 $2_BUILD_NUMBER=`echo ${$2_VERSION} | cut -f3 -d.`
490                 let $2_VER=${$2_MAJOR_VERSION}*10000+${$2_MINOR_VERSION}*100+${$2_BUILD_NUMBER}
491                 let $2_REQ=$4*10000+$5*100+$6
492
493                 AC_MSG_CHECKING(if $1 version ${$2_VERSION} is compatible with chan_h323)
494                 if test ${$2_VER} -lt ${$2_REQ}; then
495                         AC_MSG_RESULT(no)
496                         unset HAS_$2
497                 else
498                         AC_MSG_RESULT(yes)
499                 fi
500         fi
501 ])
502
503
504 AC_DEFUN(
505 [AST_CHECK_PWLIB_BUILD], [
506         if test "${HAS_$2:-unset}" != "unset"; then
507            AC_MSG_CHECKING($1 installation validity)
508
509            saved_cppflags="${CPPFLAGS}"
510            saved_libs="${LIBS}"
511            if test "${$2_LIB:-unset}" != "unset"; then
512               LIBS="${LIBS} ${$2_LIB} $7"
513            else
514               LIBS="${LIBS} -L${$2_LIBDIR} -l${PLATFORM_$2} $7"
515            fi
516            CPPFLAGS="${CPPFLAGS} -I${$2_INCDIR} $6"
517
518            AC_LANG_PUSH([C++])
519
520            AC_LINK_IFELSE(
521                 [AC_LANG_PROGRAM([$4],[$5])],
522                 [       AC_MSG_RESULT(yes) 
523                         ac_cv_lib_$2="yes" 
524                 ],
525                 [       AC_MSG_RESULT(no) 
526                         ac_cv_lib_$2="no" 
527                 ]
528                 )
529
530            AC_LANG_POP([C++])
531
532            LIBS="${saved_libs}"
533            CPPFLAGS="${saved_cppflags}"
534
535            if test "${ac_cv_lib_$2}" = "yes"; then
536               if test "${$2_LIB:-undef}" = "undef"; then
537                  if test "${$2_LIBDIR}" != "" -a "${$2_LIBDIR}" != "/usr/lib"; then
538                     $2_LIB="-L${$2_LIBDIR} -l${PLATFORM_$2}"
539                  else
540                     $2_LIB="-l${PLATFORM_$2}"
541                  fi
542               fi
543               if test "${$2_INCDIR}" != "" -a "${$2_INCDIR}" != "/usr/include"; then
544                  $2_INCLUDE="-I${$2_INCDIR}"
545               fi
546                   PBX_$2=1
547                   AC_DEFINE([HAVE_$2], 1, [$3])
548            fi
549         fi
550 ])
551
552 AC_DEFUN(
553 [AST_CHECK_OPENH323_BUILD], [
554         if test "${HAS_OPENH323:-unset}" != "unset"; then
555                 AC_MSG_CHECKING(OpenH323 build option)
556                 OPENH323_SUFFIX=
557                 prefixes="h323_${PWLIB_PLATFORM}_ h323_ openh323"
558                 for pfx in $prefixes; do
559                         files=`ls -l ${OPENH323_LIBDIR}/lib${pfx}*.so* 2>/dev/null`
560                         libfile=
561                         if test -n "$files"; then
562                                 for f in $files; do
563                                         if test -f $f -a ! -L $f; then
564                                                 libfile=`basename $f`
565                                                 break;
566                                         fi
567                                 done
568                         fi
569                         if test -n "$libfile"; then
570                                 OPENH323_PREFIX=$pfx
571                                 break;
572                         fi
573                 done
574                 if test "${libfile:-unset}" != "unset"; then
575                         OPENH323_SUFFIX=`eval "echo ${libfile} | sed -e 's/lib${OPENH323_PREFIX}\(@<:@^.@:>@*\)\..*/\1/'"`
576                 fi
577                 case "${OPENH323_SUFFIX}" in
578                         n)
579                                 OPENH323_BUILD="notrace";;
580                         r)
581                                 OPENH323_BUILD="opt";;
582                         d)
583                                 OPENH323_BUILD="debug";;
584                         *)
585                                 if test "${OPENH323_PREFIX:-undef}" = "openh323"; then
586                                         notrace=`eval "grep NOTRACE ${OPENH323DIR}/openh323u.mak | grep = | sed -e 's/@<:@A-Z0-9_@:>@*@<:@      @:>@*=@<:@      @:>@*//'"`
587                                         if test "x$notrace" = "x"; then
588                                                 notrace="0"
589                                         fi
590                                         if test "$notrace" -ne 0; then
591                                                 OPENH323_BUILD="notrace"
592                                         else
593                                                 OPENH323_BUILD="opt"
594                                         fi
595                                         OPENH323_LIB="-l${OPENH323_PREFIX}"
596                                 else
597                                         OPENH323_BUILD="notrace"
598                                 fi
599                                 ;;
600                 esac
601                 AC_MSG_RESULT(${OPENH323_BUILD})
602
603                 AC_SUBST([OPENH323_SUFFIX])
604                 AC_SUBST([OPENH323_BUILD])
605         fi
606 ])
607
608
609 # AST_FUNC_FORK
610 # -------------
611 AN_FUNCTION([fork],  [AST_FUNC_FORK])
612 AN_FUNCTION([vfork], [AST_FUNC_FORK])
613 AC_DEFUN([AST_FUNC_FORK],
614 [AC_REQUIRE([AC_TYPE_PID_T])dnl
615 AC_CHECK_HEADERS(vfork.h)
616 AC_CHECK_FUNCS(fork vfork)
617 if test "x$ac_cv_func_fork" = xyes; then
618   _AST_FUNC_FORK
619 else
620   ac_cv_func_fork_works=$ac_cv_func_fork
621 fi
622 if test "x$ac_cv_func_fork_works" = xcross; then
623   case $host in
624     *-*-amigaos* | *-*-msdosdjgpp* | *-*-uclinux* | *-*-linux-uclibc* )
625       # Override, as these systems have only a dummy fork() stub
626       ac_cv_func_fork_works=no
627       ;;
628     *)
629       ac_cv_func_fork_works=yes
630       ;;
631   esac
632   AC_MSG_WARN([result $ac_cv_func_fork_works guessed because of cross compilation])
633 fi
634 ac_cv_func_vfork_works=$ac_cv_func_vfork
635 if test "x$ac_cv_func_vfork" = xyes; then
636   _AC_FUNC_VFORK
637 fi;
638 if test "x$ac_cv_func_fork_works" = xcross; then
639   ac_cv_func_vfork_works=$ac_cv_func_vfork
640   AC_MSG_WARN([result $ac_cv_func_vfork_works guessed because of cross compilation])
641 fi
642
643 if test "x$ac_cv_func_vfork_works" = xyes; then
644   AC_DEFINE(HAVE_WORKING_VFORK, 1, [Define to 1 if `vfork' works.])
645 else
646   AC_DEFINE(vfork, fork, [Define as `fork' if `vfork' does not work.])
647 fi
648 if test "x$ac_cv_func_fork_works" = xyes; then
649   AC_DEFINE(HAVE_WORKING_FORK, 1, [Define to 1 if `fork' works.])
650 fi
651 ])# AST_FUNC_FORK
652
653
654 # _AST_FUNC_FORK
655 # -------------
656 AC_DEFUN([_AST_FUNC_FORK],
657   [AC_CACHE_CHECK(for working fork, ac_cv_func_fork_works,
658     [AC_RUN_IFELSE(
659       [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
660         [
661           /* By Ruediger Kuhlmann. */
662           return fork () < 0;
663         ])],
664       [ac_cv_func_fork_works=yes],
665       [ac_cv_func_fork_works=no],
666       [ac_cv_func_fork_works=cross])])]
667 )# _AST_FUNC_FORK
668
669 # AST_PROG_LD
670 # ----------
671 # find the pathname to the GNU or non-GNU linker
672 AC_DEFUN([AST_PROG_LD],
673 [AC_ARG_WITH([gnu-ld],
674     [AC_HELP_STRING([--with-gnu-ld],
675         [assume the C compiler uses GNU ld @<:@default=no@:>@])],
676     [test "$withval" = no || with_gnu_ld=yes],
677     [with_gnu_ld=no])
678 AC_REQUIRE([AST_PROG_SED])dnl
679 AC_REQUIRE([AC_PROG_CC])dnl
680 AC_REQUIRE([AC_CANONICAL_HOST])dnl
681 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
682 ac_prog=ld
683 if test "$GCC" = yes; then
684   # Check if gcc -print-prog-name=ld gives a path.
685   AC_MSG_CHECKING([for ld used by $CC])
686   case $host in
687   *-*-mingw*)
688     # gcc leaves a trailing carriage return which upsets mingw
689     ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
690   *)
691     ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
692   esac
693   case $ac_prog in
694     # Accept absolute paths.
695     [[\\/]]* | ?:[[\\/]]*)
696       re_direlt='/[[^/]][[^/]]*/\.\./'
697       # Canonicalize the pathname of ld
698       ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
699       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
700         ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
701       done
702       test -z "$LD" && LD="$ac_prog"
703       ;;
704   "")
705     # If it fails, then pretend we aren't using GCC.
706     ac_prog=ld
707     ;;
708   *)
709     # If it is relative, then search for the first ld in PATH.
710     with_gnu_ld=unknown
711     ;;
712   esac
713 elif test "$with_gnu_ld" = yes; then
714   AC_MSG_CHECKING([for GNU ld])
715 else
716   AC_MSG_CHECKING([for non-GNU ld])
717 fi
718 AC_CACHE_VAL(lt_cv_path_LD,
719 [if test -z "$LD"; then
720   lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
721   for ac_dir in $PATH; do
722     IFS="$lt_save_ifs"
723     test -z "$ac_dir" && ac_dir=.
724     if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
725       lt_cv_path_LD="$ac_dir/$ac_prog"
726       # Check to see if the program is GNU ld.  I'd rather use --version,
727       # but apparently some variants of GNU ld only accept -v.
728       # Break only if it was the GNU/non-GNU ld that we prefer.
729       case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
730       *GNU* | *'with BFD'*)
731         test "$with_gnu_ld" != no && break
732         ;;
733       *)
734         test "$with_gnu_ld" != yes && break
735         ;;
736       esac
737     fi
738   done
739   IFS="$lt_save_ifs"
740 else
741   lt_cv_path_LD="$LD" # Let the user override the test with a path.
742 fi])
743 LD="$lt_cv_path_LD"
744 if test -n "$LD"; then
745   AC_MSG_RESULT($LD)
746 else
747   AC_MSG_RESULT(no)
748 fi
749 test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
750 AST_PROG_LD_GNU
751 ])# AST_PROG_LD
752
753
754 # AST_PROG_LD_GNU
755 # --------------
756 AC_DEFUN([AST_PROG_LD_GNU],
757 [AC_REQUIRE([AST_PROG_EGREP])dnl
758 AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
759 [# I'd rather use --version here, but apparently some GNU lds only accept -v.
760 case `$LD -v 2>&1 </dev/null` in
761 *GNU* | *'with BFD'*)
762   lt_cv_prog_gnu_ld=yes
763   ;;
764 *)
765   lt_cv_prog_gnu_ld=no
766   ;;
767 esac])
768 with_gnu_ld=$lt_cv_prog_gnu_ld
769 ])# AST_PROG_LD_GNU
770
771 # AST_PROG_EGREP
772 # -------------
773 m4_ifndef([AST_PROG_EGREP], [AC_DEFUN([AST_PROG_EGREP],
774 [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
775    [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
776     then ac_cv_prog_egrep='grep -E'
777     else ac_cv_prog_egrep='egrep'
778     fi])
779  EGREP=$ac_cv_prog_egrep
780  AC_SUBST([EGREP])
781 ])]) # AST_PROG_EGREP
782
783 # AST_PROG_SED
784 # -----------
785 # Check for a fully functional sed program that truncates
786 # as few characters as possible.  Prefer GNU sed if found.
787 AC_DEFUN([AST_PROG_SED],
788 [AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
789     [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
790      dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
791      ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
792      for ac_i in 1 2 3 4 5 6 7; do
793        ac_script="$ac_script$as_nl$ac_script"
794      done
795      echo "$ac_script" | sed 99q >conftest.sed
796      $as_unset ac_script || ac_script=
797      _AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed],
798         [_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED],
799                 ["$ac_path_SED" -f conftest.sed])])])
800  SED="$ac_cv_path_SED"
801  AC_SUBST([SED])dnl
802  rm -f conftest.sed
803 ])# AST_PROG_SED
804
805 dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
806 dnl
807 dnl @summary figure out how to build C programs using POSIX threads
808 dnl
809 dnl This macro figures out how to build C programs using POSIX threads.
810 dnl It sets the PTHREAD_LIBS output variable to the threads library and
811 dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
812 dnl C compiler flags that are needed. (The user can also force certain
813 dnl compiler flags/libs to be tested by setting these environment
814 dnl variables.)
815 dnl
816 dnl Also sets PTHREAD_CC to any special C compiler that is needed for
817 dnl multi-threaded programs (defaults to the value of CC otherwise).
818 dnl (This is necessary on AIX to use the special cc_r compiler alias.)
819 dnl
820 dnl NOTE: You are assumed to not only compile your program with these
821 dnl flags, but also link it with them as well. e.g. you should link
822 dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
823 dnl $LIBS
824 dnl
825 dnl If you are only building threads programs, you may wish to use
826 dnl these variables in your default LIBS, CFLAGS, and CC:
827 dnl
828 dnl        LIBS="$PTHREAD_LIBS $LIBS"
829 dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
830 dnl        CC="$PTHREAD_CC"
831 dnl
832 dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
833 dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
834 dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
835 dnl
836 dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
837 dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
838 dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
839 dnl default action will define HAVE_PTHREAD.
840 dnl
841 dnl Please let the authors know if this macro fails on any platform, or
842 dnl if you have any other suggestions or comments. This macro was based
843 dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
844 dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
845 dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
846 dnl We are also grateful for the helpful feedback of numerous users.
847 dnl
848 dnl @category InstalledPackages
849 dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
850 dnl @version 2006-05-29
851 dnl @license GPLWithACException
852
853 AC_DEFUN([ACX_PTHREAD],
854 [
855 AC_REQUIRE([AC_CANONICAL_HOST])
856 AC_LANG_SAVE
857 AC_LANG_C
858 acx_pthread_ok=no
859
860 # We used to check for pthread.h first, but this fails if pthread.h
861 # requires special compiler flags (e.g. on True64 or Sequent).
862 # It gets checked for in the link test anyway.
863
864 # First of all, check if the user has set any of the PTHREAD_LIBS,
865 # etcetera environment variables, and if threads linking works using
866 # them:
867 if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
868         save_CFLAGS="$CFLAGS"
869         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
870         save_LIBS="$LIBS"
871         LIBS="$PTHREAD_LIBS $LIBS"
872         AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
873         AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
874         AC_MSG_RESULT($acx_pthread_ok)
875         if test x"$acx_pthread_ok" = xno; then
876                 PTHREAD_LIBS=""
877                 PTHREAD_CFLAGS=""
878         fi
879         LIBS="$save_LIBS"
880         CFLAGS="$save_CFLAGS"
881 fi
882
883 # We must check for the threads library under a number of different
884 # names; the ordering is very important because some systems
885 # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
886 # libraries is broken (non-POSIX).
887
888 # Create a list of thread flags to try.  Items starting with a "-" are
889 # C compiler flags, and other items are library names, except for "none"
890 # which indicates that we try without any flags at all, and "pthread-config"
891 # which is a program returning the flags for the Pth emulation library.
892
893 acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
894
895 # The ordering *is* (sometimes) important.  Some notes on the
896 # individual items follow:
897
898 # pthreads: AIX (must check this before -lpthread)
899 # none: in case threads are in libc; should be tried before -Kthread and
900 #       other compiler flags to prevent continual compiler warnings
901 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
902 # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
903 # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
904 # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
905 # -pthreads: Solaris/gcc
906 # -mthreads: Mingw32/gcc, Lynx/gcc
907 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
908 #      doesn't hurt to check since this sometimes defines pthreads too;
909 #      also defines -D_REENTRANT)
910 #      ... -mt is also the pthreads flag for HP/aCC
911 # pthread: Linux, etcetera
912 # --thread-safe: KAI C++
913 # pthread-config: use pthread-config program (for GNU Pth library)
914
915 case "${host_cpu}-${host_os}" in
916         *solaris*)
917
918         # On Solaris (at least, for some versions), libc contains stubbed
919         # (non-functional) versions of the pthreads routines, so link-based
920         # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
921         # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
922         # a function called by this macro, so we could check for that, but
923         # who knows whether they'll stub that too in a future libc.)  So,
924         # we'll just look for -pthreads and -lpthread first:
925
926         acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
927         ;;
928 esac
929
930 if test x"$acx_pthread_ok" = xno; then
931 for flag in $acx_pthread_flags; do
932
933         case $flag in
934                 none)
935                 AC_MSG_CHECKING([whether pthreads work without any flags])
936                 ;;
937
938                 -*)
939                 AC_MSG_CHECKING([whether pthreads work with $flag])
940                 PTHREAD_CFLAGS="$flag"
941                 ;;
942
943                 pthread-config)
944                 AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
945                 if test x"$acx_pthread_config" = xno; then continue; fi
946                 PTHREAD_CFLAGS="`pthread-config --cflags`"
947                 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
948                 ;;
949
950                 *)
951                 AC_MSG_CHECKING([for the pthreads library -l$flag])
952                 PTHREAD_LIBS="-l$flag"
953                 ;;
954         esac
955
956         save_LIBS="$LIBS"
957         save_CFLAGS="$CFLAGS"
958         LIBS="$PTHREAD_LIBS $LIBS"
959         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
960
961         # Check for various functions.  We must include pthread.h,
962         # since some functions may be macros.  (On the Sequent, we
963         # need a special flag -Kthread to make this header compile.)
964         # We check for pthread_join because it is in -lpthread on IRIX
965         # while pthread_create is in libc.  We check for pthread_attr_init
966         # due to DEC craziness with -lpthreads.  We check for
967         # pthread_cleanup_push because it is one of the few pthread
968         # functions on Solaris that doesn't have a non-functional libc stub.
969         # We try pthread_create on general principles.
970         AC_TRY_LINK([#include <pthread.h>],
971                     [pthread_t th; pthread_join(th, 0);
972                      pthread_attr_init(0); pthread_cleanup_push(0, 0);
973                      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
974                     [acx_pthread_ok=yes])
975
976         LIBS="$save_LIBS"
977         CFLAGS="$save_CFLAGS"
978
979         AC_MSG_RESULT($acx_pthread_ok)
980         if test "x$acx_pthread_ok" = xyes; then
981                 break;
982         fi
983
984         PTHREAD_LIBS=""
985         PTHREAD_CFLAGS=""
986 done
987 fi
988
989 # Various other checks:
990 if test "x$acx_pthread_ok" = xyes; then
991         save_LIBS="$LIBS"
992         LIBS="$PTHREAD_LIBS $LIBS"
993         save_CFLAGS="$CFLAGS"
994         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
995
996         # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
997         AC_MSG_CHECKING([for joinable pthread attribute])
998         attr_name=unknown
999         for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
1000             AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
1001                         [attr_name=$attr; break])
1002         done
1003         AC_MSG_RESULT($attr_name)
1004         if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
1005             AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
1006                                [Define to necessary symbol if this constant
1007                                 uses a non-standard name on your system.])
1008         fi
1009
1010         AC_MSG_CHECKING([if more special flags are required for pthreads])
1011         flag=no
1012         case "${host_cpu}-${host_os}" in
1013             *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
1014             *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
1015         esac
1016         AC_MSG_RESULT(${flag})
1017         if test "x$flag" != xno; then
1018             PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
1019         fi
1020
1021         LIBS="$save_LIBS"
1022         CFLAGS="$save_CFLAGS"
1023
1024         # More AIX lossage: must compile with xlc_r or cc_r
1025         if test x"$GCC" != xyes; then
1026           AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
1027         else
1028           PTHREAD_CC=$CC
1029         fi
1030 else
1031         PTHREAD_CC="$CC"
1032 fi
1033
1034 AC_SUBST(PTHREAD_LIBS)
1035 AC_SUBST(PTHREAD_CFLAGS)
1036 AC_SUBST(PTHREAD_CC)
1037
1038 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
1039 if test x"$acx_pthread_ok" = xyes; then
1040         ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
1041         :
1042 else
1043         acx_pthread_ok=no
1044         $2
1045 fi
1046 AC_LANG_RESTORE
1047 ])dnl ACX_PTHREAD