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