1 # AST_GCC_ATTRIBUTE([attribute name])
3 AC_DEFUN([AST_GCC_ATTRIBUTE],
5 AC_MSG_CHECKING(for compiler 'attribute $1' support)
7 AC_LANG_PROGRAM([static int __attribute__(($1)) test(void) {}],
10 AC_DEFINE_UNQUOTED([HAVE_ATTRIBUTE_$1], 1, [Define to 1 if your GCC C compiler supports the '$1' attribute.]),
14 # AST_EXT_LIB_SETUP([package symbol name], [package friendly name], [package option name], [additional help text])
16 AC_DEFUN([AST_EXT_LIB_SETUP],
20 AC_ARG_WITH([$3], AC_HELP_STRING([--with-$3=PATH],[use $2 files in PATH $4]),[
26 ac_mandatory_list="${ac_mandatory_list} $1"
30 ac_mandatory_list="${ac_mandatory_list} $1"
36 AC_SUBST([$1_INCLUDE])
41 # Check whether any of the mandatory modules are not present, and
42 # print error messages in case.
44 AC_DEFUN([AST_CHECK_MANDATORY],
46 AC_MSG_CHECKING([for mandatory modules: ${ac_mandatory_list}])
48 for i in ${ac_mandatory_list}; do
50 if test "x${a}" = "x1" ; then continue; fi
51 if test ${err} = "0" ; then AC_MSG_RESULT(fail) ; fi
53 eval "a=\${${i}_OPTION}"
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}.])
60 if test $err = 1 ; then exit 1; fi
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
69 # They should be called after AST_EXT_LIB_SETUP($1, ...)
71 # Check if a given macro is defined in a certain header.
73 # AST_C_DEFINE_CHECK([package symbol name], [macro name], [header file], [version])
74 AC_DEFUN([AST_C_DEFINE_CHECK],
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"
82 CPPFLAGS="${CPPFLAGS} ${$1_INCLUDE}"
85 [ AC_LANG_PROGRAM( [#include <$3>], [int foo = $2;]) ],
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])
93 CPPFLAGS="${saved_cppflags}"
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.
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],
105 if test "x${PBX_$1}" != "x1" -a "${USE_$1}" != "no"; then
107 if test "x${$1_DIR}" != "x"; then
108 if test -d ${$1_DIR}/lib; then
109 pbxlibdir="-L${$1_DIR}/lib"
111 pbxlibdir="-L${$1_DIR}"
115 if test "x${pbxfuncname}" = "x" ; then # empty lib, assume only headers
118 AC_CHECK_LIB([$2], [${pbxfuncname}], [AST_$1_FOUND=yes], [AST_$1_FOUND=no], ${pbxlibdir} $5)
121 if test "${AST_$1_FOUND}" = "yes"; then
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])
132 CPPFLAGS="${saved_cppflags}"
134 if test "x$4" != "x" ; then
135 AC_CHECK_HEADER([$4], [$1_HEADER_FOUND=1], [$1_HEADER_FOUND=0])
138 if test "x${$1_HEADER_FOUND}" = "x0" ; then
142 if test "x${pbxfuncname}" = "x" ; then # only checking headers -> no library
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])
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
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`
170 if test "x$GNU_MAKE" = "xNot Found" ; then
171 AC_MSG_ERROR( *** Please install GNU make. It is required to build Asterisk!)
182 if test "${PWLIBDIR:-unset}" != "unset" ; then
183 AC_CHECK_FILE(${PWLIBDIR}/version.h, HAS_PWLIB=1, )
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, )
189 if test "${HAS_PWLIB:-unset}" != "unset" ; then
190 PWLIBDIR="${OPENH323DIR}/../pwlib"
192 AC_CHECK_FILE(${HOME}/pwlib/include/ptlib.h, HAS_PWLIB=1, )
193 if test "${HAS_PWLIB:-unset}" != "unset" ; then
194 PWLIBDIR="${HOME}/pwlib"
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)
202 PWLIB_INCDIR="/usr/local/include"
203 PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
204 if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
205 if test "x$LIB64" != "x"; then
206 PWLIB_LIBDIR="/usr/local/lib64"
208 PWLIB_LIBDIR="/usr/local/lib"
211 PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
212 PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
214 AC_CHECK_FILE(/usr/include/ptlib.h, HAS_PWLIB=1, )
215 if test "${HAS_PWLIB:-unset}" != "unset" ; then
216 AC_PATH_PROG(PTLIB_CONFIG, ptlib-config, , /usr/share/pwlib/make)
217 PWLIB_INCDIR="/usr/include"
218 PWLIB_LIBDIR=`${PTLIB_CONFIG} --pwlibdir`
219 if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
220 if test "x$LIB64" != "x"; then
221 PWLIB_LIBDIR="/usr/lib64"
223 PWLIB_LIBDIR="/usr/lib"
226 PWLIB_LIB=`${PTLIB_CONFIG} --ldflags --libs`
227 PWLIB_LIB="-L${PWLIB_LIBDIR} `echo ${PWLIB_LIB}`"
234 #if test "${HAS_PWLIB:-unset}" = "unset" ; then
235 # echo "Cannot find pwlib - please install or set PWLIBDIR and try again"
239 if test "${HAS_PWLIB:-unset}" != "unset" ; then
240 if test "${PWLIBDIR:-unset}" = "unset" ; then
241 if test "${PTLIB_CONFIG:-unset}" != "unset" ; then
242 PWLIBDIR=`$PTLIB_CONFIG --prefix`
244 echo "Cannot find ptlib-config - please install and try again"
249 if test "x$PWLIBDIR" = "x/usr" -o "x$PWLIBDIR" = "x/usr/"; then
250 PWLIBDIR="/usr/share/pwlib"
251 PWLIB_INCDIR="/usr/include"
252 if test "x$LIB64" != "x"; then
253 PWLIB_LIBDIR="/usr/lib64"
255 PWLIB_LIBDIR="/usr/lib"
258 if test "x$PWLIBDIR" = "x/usr/local" -o "x$PWLIBDIR" = "x/usr/"; then
259 PWLIBDIR="/usr/local/share/pwlib"
260 PWLIB_INCDIR="/usr/local/include"
261 if test "x$LIB64" != "x"; then
262 PWLIB_LIBDIR="/usr/local/lib64"
264 PWLIB_LIBDIR="/usr/local/lib"
268 if test "${PWLIB_INCDIR:-unset}" = "unset"; then
269 PWLIB_INCDIR="${PWLIBDIR}/include"
271 if test "${PWLIB_LIBDIR:-unset}" = "unset"; then
272 PWLIB_LIBDIR="${PWLIBDIR}/lib"
276 AC_SUBST([PWLIB_INCDIR])
277 AC_SUBST([PWLIB_LIBDIR])
283 [AST_CHECK_OPENH323_PLATFORM], [
286 linux*) PWLIB_OSTYPE=linux ;
288 freebsd* ) PWLIB_OSTYPE=FreeBSD ;
290 openbsd* ) PWLIB_OSTYPE=OpenBSD ;
291 ENDLDLIBS="-lossaudio" ;
293 netbsd* ) PWLIB_OSTYPE=NetBSD ;
294 ENDLDLIBS="-lossaudio" ;
296 solaris* | sunos* ) PWLIB_OSTYPE=solaris ;
298 darwin* ) PWLIB_OSTYPE=Darwin ;
300 beos*) PWLIB_OSTYPE=beos ;
301 STDCCFLAGS="$STDCCFLAGS -D__BEOS__"
303 cygwin*) PWLIB_OSTYPE=cygwin ;
305 mingw*) PWLIB_OSTYPE=mingw ;
306 STDCCFLAGS="$STDCCFLAGS -mms-bitfields" ;
307 ENDLDLIBS="-lwinmm -lwsock32 -lsnmpapi -lmpr -lcomdlg32 -lgdi32 -lavicap32" ;
309 * ) PWLIB_OSTYPE="$host_os" ;
310 AC_MSG_WARN("OS $PWLIB_OSTYPE not recognized - proceed with caution!") ;
316 x86 | i686 | i586 | i486 | i386 ) PWLIB_MACHTYPE=x86
319 x86_64) PWLIB_MACHTYPE=x86_64 ;
324 alpha | alphaev56 | alphaev6 | alphaev67 | alphaev7) PWLIB_MACHTYPE=alpha ;
328 sparc ) PWLIB_MACHTYPE=sparc ;
331 powerpc ) PWLIB_MACHTYPE=ppc ;
334 ppc ) PWLIB_MACHTYPE=ppc ;
337 powerpc64 ) PWLIB_MACHTYPE=ppc64 ;
342 ppc64 ) PWLIB_MACHTYPE=ppc64 ;
347 ia64) PWLIB_MACHTYPE=ia64 ;
351 s390x) PWLIB_MACHTYPE=s390x ;
356 s390) PWLIB_MACHTYPE=s390 ;
359 * ) PWLIB_MACHTYPE="$host_cpu";
360 AC_MSG_WARN("CPU $PWLIB_MACHTYPE not recognized - proceed with caution!") ;;
363 PWLIB_PLATFORM="${PWLIB_OSTYPE}_${PWLIB_MACHTYPE}"
365 AC_SUBST([PWLIB_PLATFORM])
370 [AST_CHECK_OPENH323], [
373 if test "${OPENH323DIR:-unset}" != "unset" ; then
374 AC_CHECK_FILE(${OPENH323DIR}/version.h, HAS_OPENH323=1, )
376 if test "${HAS_OPENH323:-unset}" = "unset" ; then
377 AC_CHECK_FILE(${PWLIBDIR}/../openh323/version.h, OPENH323DIR="${PWLIBDIR}/../openh323"; HAS_OPENH323=1, )
378 if test "${HAS_OPENH323:-unset}" != "unset" ; then
379 OPENH323DIR="${PWLIBDIR}/../openh323"
380 AC_CHECK_FILE(${OPENH323DIR}/include/h323.h, , OPENH323_INCDIR="${PWLIB_INCDIR}/openh323"; OPENH323_LIBDIR="${PWLIB_LIBDIR}")
382 AC_CHECK_FILE(${HOME}/openh323/include/h323.h, HAS_OPENH323=1, )
383 if test "${HAS_OPENH323:-unset}" != "unset" ; then
384 OPENH323DIR="${HOME}/openh323"
386 AC_CHECK_FILE(/usr/local/include/openh323/h323.h, HAS_OPENH323=1, )
387 if test "${HAS_OPENH323:-unset}" != "unset" ; then
388 OPENH323DIR="/usr/local/share/openh323"
389 OPENH323_INCDIR="/usr/local/include/openh323"
390 if test "x$LIB64" != "x"; then
391 OPENH323_LIBDIR="/usr/local/lib64"
393 OPENH323_LIBDIR="/usr/local/lib"
396 AC_CHECK_FILE(/usr/include/openh323/h323.h, HAS_OPENH323=1, )
397 if test "${HAS_OPENH323:-unset}" != "unset" ; then
398 OPENH323DIR="/usr/share/openh323"
399 OPENH323_INCDIR="/usr/include/openh323"
400 if test "x$LIB64" != "x"; then
401 OPENH323_LIBDIR="/usr/lib64"
403 OPENH323_LIBDIR="/usr/lib"
411 if test "${HAS_OPENH323:-unset}" != "unset" ; then
412 if test "${OPENH323_INCDIR:-unset}" = "unset"; then
413 OPENH323_INCDIR="${OPENH323DIR}/include"
415 if test "${OPENH323_LIBDIR:-unset}" = "unset"; then
416 OPENH323_LIBDIR="${OPENH323DIR}/lib"
419 OPENH323_LIBDIR="`cd ${OPENH323_LIBDIR}; pwd`"
420 OPENH323_INCDIR="`cd ${OPENH323_INCDIR}; pwd`"
421 OPENH323DIR="`cd ${OPENH323DIR}; pwd`"
423 AC_SUBST([OPENH323DIR])
424 AC_SUBST([OPENH323_INCDIR])
425 AC_SUBST([OPENH323_LIBDIR])
431 [AST_CHECK_PWLIB_VERSION], [
432 if test "${HAS_$2:-unset}" != "unset"; then
433 $2_VERSION=`grep "$2_VERSION" ${$2_INCDIR}/$3 | cut -f2 -d ' ' | sed -e 's/"//g'`
434 $2_MAJOR_VERSION=`echo ${$2_VERSION} | cut -f1 -d.`
435 $2_MINOR_VERSION=`echo ${$2_VERSION} | cut -f2 -d.`
436 $2_BUILD_NUMBER=`echo ${$2_VERSION} | cut -f3 -d.`
437 let $2_VER=${$2_MAJOR_VERSION}*10000+${$2_MINOR_VERSION}*100+${$2_BUILD_NUMBER}
438 let $2_REQ=$4*10000+$5*100+$6
440 AC_MSG_CHECKING(if $1 version ${$2_VERSION} is compatible with chan_h323)
441 if test ${$2_VER} -lt ${$2_REQ}; then
452 [AST_CHECK_PWLIB_BUILD], [
453 if test "${HAS_$2:-unset}" != "unset"; then
454 AC_MSG_CHECKING($1 installation validity)
456 saved_cppflags="${CPPFLAGS}"
458 if test "${$2_LIB:-unset}" != "unset"; then
459 LIBS="${LIBS} ${$2_LIB} $7"
461 LIBS="${LIBS} -L${$2_LIBDIR} -l${PLATFORM_$2} $7"
463 CPPFLAGS="${CPPFLAGS} -I${$2_INCDIR} $6"
468 [AC_LANG_PROGRAM([$4],[$5])],
480 CPPFLAGS="${saved_cppflags}"
482 if test "${ac_cv_lib_$2}" = "yes"; then
483 if test "${$2_LIB:-undef}" = "undef"; then
484 if test "${$2_LIBDIR}" != "" -a "${$2_LIBDIR}" != "/usr/lib"; then
485 $2_LIB="-L${$2_LIBDIR} -l${PLATFORM_$2}"
487 $2_LIB="-l${PLATFORM_$2}"
490 if test "${$2_INCDIR}" != "" -a "${$2_INCDIR}" != "/usr/include"; then
491 $2_INCLUDE="-I${$2_INCDIR}"
494 AC_DEFINE([HAVE_$2], 1, [$3])
500 [AST_CHECK_OPENH323_BUILD], [
501 if test "${HAS_OPENH323:-unset}" != "unset"; then
502 AC_MSG_CHECKING(OpenH323 build option)
504 prefixes="h323_${PWLIB_PLATFORM}_ h323_ openh323"
505 for pfx in $prefixes; do
506 files=`ls -l ${OPENH323_LIBDIR}/lib${pfx}*.so* 2>/dev/null`
508 if test -n "$files"; then
510 if test -f $f -a ! -L $f; then
511 libfile=`basename $f`
516 if test -n "$libfile"; then
521 if test "${libfile:-unset}" != "unset"; then
522 OPENH323_SUFFIX=`eval "echo ${libfile} | sed -e 's/lib${OPENH323_PREFIX}\(@<:@^.@:>@*\)\..*/\1/'"`
524 case "${OPENH323_SUFFIX}" in
526 OPENH323_BUILD="notrace";;
528 OPENH323_BUILD="opt";;
530 OPENH323_BUILD="debug";;
532 if test "${OPENH323_PREFIX:-undef}" = "openh323"; then
533 notrace=`eval "grep NOTRACE ${OPENH323DIR}/openh323u.mak | grep = | sed -e 's/@<:@A-Z0-9_@:>@*@<:@ @:>@*=@<:@ @:>@*//'"`
534 if test "x$notrace" = "x"; then
537 if test "$notrace" -ne 0; then
538 OPENH323_BUILD="notrace"
542 OPENH323_LIB="-l${OPENH323_PREFIX}"
544 OPENH323_BUILD="notrace"
548 AC_MSG_RESULT(${OPENH323_BUILD})
550 AC_SUBST([OPENH323_SUFFIX])
551 AC_SUBST([OPENH323_BUILD])
558 AN_FUNCTION([fork], [AST_FUNC_FORK])
559 AN_FUNCTION([vfork], [AST_FUNC_FORK])
560 AC_DEFUN([AST_FUNC_FORK],
561 [AC_REQUIRE([AC_TYPE_PID_T])dnl
562 AC_CHECK_HEADERS(vfork.h)
563 AC_CHECK_FUNCS(fork vfork)
564 if test "x$ac_cv_func_fork" = xyes; then
567 ac_cv_func_fork_works=$ac_cv_func_fork
569 if test "x$ac_cv_func_fork_works" = xcross; then
571 *-*-amigaos* | *-*-msdosdjgpp* | *-*-uclinux* )
572 # Override, as these systems have only a dummy fork() stub
573 ac_cv_func_fork_works=no
576 ac_cv_func_fork_works=yes
579 AC_MSG_WARN([result $ac_cv_func_fork_works guessed because of cross compilation])
581 ac_cv_func_vfork_works=$ac_cv_func_vfork
582 if test "x$ac_cv_func_vfork" = xyes; then
585 if test "x$ac_cv_func_fork_works" = xcross; then
586 ac_cv_func_vfork_works=$ac_cv_func_vfork
587 AC_MSG_WARN([result $ac_cv_func_vfork_works guessed because of cross compilation])
590 if test "x$ac_cv_func_vfork_works" = xyes; then
591 AC_DEFINE(HAVE_WORKING_VFORK, 1, [Define to 1 if `vfork' works.])
593 AC_DEFINE(vfork, fork, [Define as `fork' if `vfork' does not work.])
595 if test "x$ac_cv_func_fork_works" = xyes; then
596 AC_DEFINE(HAVE_WORKING_FORK, 1, [Define to 1 if `fork' works.])
603 AC_DEFUN([_AST_FUNC_FORK],
604 [AC_CACHE_CHECK(for working fork, ac_cv_func_fork_works,
606 [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
608 /* By Ruediger Kuhlmann. */
611 [ac_cv_func_fork_works=yes],
612 [ac_cv_func_fork_works=no],
613 [ac_cv_func_fork_works=cross])])]
618 # find the pathname to the GNU or non-GNU linker
619 AC_DEFUN([AST_PROG_LD],
620 [AC_ARG_WITH([gnu-ld],
621 [AC_HELP_STRING([--with-gnu-ld],
622 [assume the C compiler uses GNU ld @<:@default=no@:>@])],
623 [test "$withval" = no || with_gnu_ld=yes],
625 AC_REQUIRE([AST_PROG_SED])dnl
626 AC_REQUIRE([AC_PROG_CC])dnl
627 AC_REQUIRE([AC_CANONICAL_HOST])dnl
628 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
630 if test "$GCC" = yes; then
631 # Check if gcc -print-prog-name=ld gives a path.
632 AC_MSG_CHECKING([for ld used by $CC])
635 # gcc leaves a trailing carriage return which upsets mingw
636 ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
638 ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
641 # Accept absolute paths.
642 [[\\/]]* | ?:[[\\/]]*)
643 re_direlt='/[[^/]][[^/]]*/\.\./'
644 # Canonicalize the pathname of ld
645 ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
646 while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
647 ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
649 test -z "$LD" && LD="$ac_prog"
652 # If it fails, then pretend we aren't using GCC.
656 # If it is relative, then search for the first ld in PATH.
660 elif test "$with_gnu_ld" = yes; then
661 AC_MSG_CHECKING([for GNU ld])
663 AC_MSG_CHECKING([for non-GNU ld])
665 AC_CACHE_VAL(lt_cv_path_LD,
666 [if test -z "$LD"; then
667 lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
668 for ac_dir in $PATH; do
670 test -z "$ac_dir" && ac_dir=.
671 if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
672 lt_cv_path_LD="$ac_dir/$ac_prog"
673 # Check to see if the program is GNU ld. I'd rather use --version,
674 # but apparently some variants of GNU ld only accept -v.
675 # Break only if it was the GNU/non-GNU ld that we prefer.
676 case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
677 *GNU* | *'with BFD'*)
678 test "$with_gnu_ld" != no && break
681 test "$with_gnu_ld" != yes && break
688 lt_cv_path_LD="$LD" # Let the user override the test with a path.
691 if test -n "$LD"; then
696 test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
703 AC_DEFUN([AST_PROG_LD_GNU],
704 [AC_REQUIRE([AST_PROG_EGREP])dnl
705 AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
706 [# I'd rather use --version here, but apparently some GNU lds only accept -v.
707 case `$LD -v 2>&1 </dev/null` in
708 *GNU* | *'with BFD'*)
709 lt_cv_prog_gnu_ld=yes
715 with_gnu_ld=$lt_cv_prog_gnu_ld
720 m4_ifndef([AST_PROG_EGREP], [AC_DEFUN([AST_PROG_EGREP],
721 [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
722 [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
723 then ac_cv_prog_egrep='grep -E'
724 else ac_cv_prog_egrep='egrep'
726 EGREP=$ac_cv_prog_egrep
728 ])]) # AST_PROG_EGREP
732 # Check for a fully functional sed program that truncates
733 # as few characters as possible. Prefer GNU sed if found.
734 AC_DEFUN([AST_PROG_SED],
735 [AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
736 [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
737 dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
738 ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
739 for ac_i in 1 2 3 4 5 6 7; do
740 ac_script="$ac_script$as_nl$ac_script"
742 echo "$ac_script" | sed 99q >conftest.sed
743 $as_unset ac_script || ac_script=
744 _AC_PATH_PROG_FEATURE_CHECK(SED, [sed gsed],
745 [_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED],
746 ["$ac_path_SED" -f conftest.sed])])])
747 SED="$ac_cv_path_SED"
752 dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
754 dnl @summary figure out how to build C programs using POSIX threads
756 dnl This macro figures out how to build C programs using POSIX threads.
757 dnl It sets the PTHREAD_LIBS output variable to the threads library and
758 dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
759 dnl C compiler flags that are needed. (The user can also force certain
760 dnl compiler flags/libs to be tested by setting these environment
763 dnl Also sets PTHREAD_CC to any special C compiler that is needed for
764 dnl multi-threaded programs (defaults to the value of CC otherwise).
765 dnl (This is necessary on AIX to use the special cc_r compiler alias.)
767 dnl NOTE: You are assumed to not only compile your program with these
768 dnl flags, but also link it with them as well. e.g. you should link
769 dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
772 dnl If you are only building threads programs, you may wish to use
773 dnl these variables in your default LIBS, CFLAGS, and CC:
775 dnl LIBS="$PTHREAD_LIBS $LIBS"
776 dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
779 dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
780 dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
781 dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
783 dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
784 dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
785 dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
786 dnl default action will define HAVE_PTHREAD.
788 dnl Please let the authors know if this macro fails on any platform, or
789 dnl if you have any other suggestions or comments. This macro was based
790 dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
791 dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
792 dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
793 dnl We are also grateful for the helpful feedback of numerous users.
795 dnl @category InstalledPackages
796 dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
797 dnl @version 2006-05-29
798 dnl @license GPLWithACException
800 AC_DEFUN([ACX_PTHREAD], [
801 AC_REQUIRE([AC_CANONICAL_HOST])
806 # We used to check for pthread.h first, but this fails if pthread.h
807 # requires special compiler flags (e.g. on True64 or Sequent).
808 # It gets checked for in the link test anyway.
810 # First of all, check if the user has set any of the PTHREAD_LIBS,
811 # etcetera environment variables, and if threads linking works using
813 if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
814 save_CFLAGS="$CFLAGS"
815 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
817 LIBS="$PTHREAD_LIBS $LIBS"
818 AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
819 AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
820 AC_MSG_RESULT($acx_pthread_ok)
821 if test x"$acx_pthread_ok" = xno; then
826 CFLAGS="$save_CFLAGS"
829 # We must check for the threads library under a number of different
830 # names; the ordering is very important because some systems
831 # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
832 # libraries is broken (non-POSIX).
834 # Create a list of thread flags to try. Items starting with a "-" are
835 # C compiler flags, and other items are library names, except for "none"
836 # which indicates that we try without any flags at all, and "pthread-config"
837 # which is a program returning the flags for the Pth emulation library.
839 acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
841 # The ordering *is* (sometimes) important. Some notes on the
842 # individual items follow:
844 # pthreads: AIX (must check this before -lpthread)
845 # none: in case threads are in libc; should be tried before -Kthread and
846 # other compiler flags to prevent continual compiler warnings
847 # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
848 # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
849 # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
850 # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
851 # -pthreads: Solaris/gcc
852 # -mthreads: Mingw32/gcc, Lynx/gcc
853 # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
854 # doesn't hurt to check since this sometimes defines pthreads too;
855 # also defines -D_REENTRANT)
856 # ... -mt is also the pthreads flag for HP/aCC
857 # pthread: Linux, etcetera
858 # --thread-safe: KAI C++
859 # pthread-config: use pthread-config program (for GNU Pth library)
861 case "${host_cpu}-${host_os}" in
864 # On Solaris (at least, for some versions), libc contains stubbed
865 # (non-functional) versions of the pthreads routines, so link-based
866 # tests will erroneously succeed. (We need to link with -pthreads/-mt/
867 # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
868 # a function called by this macro, so we could check for that, but
869 # who knows whether they'll stub that too in a future libc.) So,
870 # we'll just look for -pthreads and -lpthread first:
872 acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
876 if test x"$acx_pthread_ok" = xno; then
877 for flag in $acx_pthread_flags; do
881 AC_MSG_CHECKING([whether pthreads work without any flags])
885 AC_MSG_CHECKING([whether pthreads work with $flag])
886 PTHREAD_CFLAGS="$flag"
890 AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
891 if test x"$acx_pthread_config" = xno; then continue; fi
892 PTHREAD_CFLAGS="`pthread-config --cflags`"
893 PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
897 AC_MSG_CHECKING([for the pthreads library -l$flag])
898 PTHREAD_LIBS="-l$flag"
903 save_CFLAGS="$CFLAGS"
904 LIBS="$PTHREAD_LIBS $LIBS"
905 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
907 # Check for various functions. We must include pthread.h,
908 # since some functions may be macros. (On the Sequent, we
909 # need a special flag -Kthread to make this header compile.)
910 # We check for pthread_join because it is in -lpthread on IRIX
911 # while pthread_create is in libc. We check for pthread_attr_init
912 # due to DEC craziness with -lpthreads. We check for
913 # pthread_cleanup_push because it is one of the few pthread
914 # functions on Solaris that doesn't have a non-functional libc stub.
915 # We try pthread_create on general principles.
916 AC_TRY_LINK([#include <pthread.h>],
917 [pthread_t th; pthread_join(th, 0);
918 pthread_attr_init(0); pthread_cleanup_push(0, 0);
919 pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
920 [acx_pthread_ok=yes])
923 CFLAGS="$save_CFLAGS"
925 AC_MSG_RESULT($acx_pthread_ok)
926 if test "x$acx_pthread_ok" = xyes; then
935 # Various other checks:
936 if test "x$acx_pthread_ok" = xyes; then
938 LIBS="$PTHREAD_LIBS $LIBS"
939 save_CFLAGS="$CFLAGS"
940 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
942 # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
943 AC_MSG_CHECKING([for joinable pthread attribute])
945 for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
946 AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
947 [attr_name=$attr; break])
949 AC_MSG_RESULT($attr_name)
950 if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
951 AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
952 [Define to necessary symbol if this constant
953 uses a non-standard name on your system.])
956 AC_MSG_CHECKING([if more special flags are required for pthreads])
958 case "${host_cpu}-${host_os}" in
959 *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
960 *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
962 AC_MSG_RESULT(${flag})
963 if test "x$flag" != xno; then
964 PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
968 CFLAGS="$save_CFLAGS"
970 # More AIX lossage: must compile with xlc_r or cc_r
971 if test x"$GCC" != xyes; then
972 AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
980 AC_SUBST(PTHREAD_LIBS)
981 AC_SUBST(PTHREAD_CFLAGS)
984 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
985 if test x"$acx_pthread_ok" = xyes; then
986 ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])