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