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