dnl ----------------------------------------------------------------------- dnl dnl Copyright 1999-2008 H. Peter Anvin - All Rights Reserved dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation, Inc., 53 Temple Place Ste 330, dnl Bostom MA 02111-1307, USA; either version 2 of the License, or dnl (at your option) any later version; incorporated herein by reference. dnl dnl ----------------------------------------------------------------------- dnl -------------------------------------------------------------------------- dnl PA_ADD_CFLAGS() dnl dnl Attempt to add the given option to CFLAGS, if it doesn't break compilation dnl -------------------------------------------------------------------------- AC_DEFUN(PA_ADD_CFLAGS, [AC_MSG_CHECKING([if $CC accepts $1]) pa_add_cflags__old_cflags="$CFLAGS" CFLAGS="$CFLAGS $1" AC_TRY_LINK([#include ], [printf("Hello, World!\n");], AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]) CFLAGS="$pa_add_cflags__old_cflags")]) dnl -------------------------------------------------------------------------- dnl PA_SIGSETJMP dnl dnl Do we have sigsetjmp/siglongjmp? (AC_CHECK_FUNCS doesn't seem to work dnl for these particular functions.) dnl -------------------------------------------------------------------------- AC_DEFUN(PA_SIGSETJMP, [AC_MSG_CHECKING([for sigsetjmp]) AC_TRY_LINK([ #ifdef HAVE_SETJMP_H #include #endif], [sigjmp_buf buf; sigsetjmp(buf,1); siglongjmp(buf,2);], AC_MSG_RESULT([yes]) $1, AC_MSG_RESULT([no]) $2)]) dnl -------------------------------------------------------------------------- dnl PA_MSGHDR_MSG_CONTROL dnl dnl Does struct msghdr have the msg_control field? dnl -------------------------------------------------------------------------- AH_TEMPLATE([HAVE_MSGHDR_MSG_CONTROL], [Define if struct msghdr has the msg_control field.]) AC_DEFUN(PA_MSGHDR_MSG_CONTROL, [AC_CHECK_MEMBER(struct msghdr.msg_control, [AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL)], [], [ #include #include #include ])]) dnl ------------------------------------------------------------------------ dnl PA_STRUCT_IN_PKTINFO dnl dnl Look for definition of struct in_pktinfo, which at least has an dnl ipi_addr member. Some versions of glibc lack struct in_pktinfo; dnl if so we need to include the definition ourselves -- but we only dnl want to do that if absolutely necessary! dnl ------------------------------------------------------------------------ AH_TEMPLATE([HAVE_STRUCT_IN_PKTINFO], [Define if struct in_pktinfo is defined.]) AC_DEFUN(PA_STRUCT_IN_PKTINFO, [AC_CHECK_MEMBER(struct in_pktinfo.ipi_addr, [AC_DEFINE(HAVE_STRUCT_IN_PKTINFO)], [], [ #include #include #include #include #include #include ])]) dnl ------------------------------------------------------------------------ dnl PA_STRUCT_SOCKADDR_IN6 dnl dnl Look for definition of struct sockaddr_in6, which at least has an dnl sin6_addr member dnl AH_TEMPLATE([HAVE_STRUCT_SOCKADDR_IN6], [Define if struct sockaddr_in6 is defined.]) AC_DEFUN(PA_STRUCT_SOCKADDR_IN6, [AC_CHECK_MEMBER(struct sockaddr_in6.sin6_addr, [ AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6) HAVE_INET6=true; ], [ HAVE_INET6=false; ], [ #include #include #include #include ])]) dnl ------------------------------------------------------------------------ dnl PA_STRUCT_ADDRINFO dnl dnl Look for definition of struct addrinfo, which at least has an dnl ai_addr member dnl AH_TEMPLATE([HAVE_STRUCT_ADDRINFO], [Define if struct addrinfo is defined.]) AC_DEFUN(PA_STRUCT_ADDRINFO, [AC_CHECK_MEMBER(struct addrinfo.ai_addr, [AC_DEFINE(HAVE_STRUCT_ADDRINFO)], [], [ #include #include #include ])]) dnl ------------------------------------------------------------------------ dnl PA_STRUCT_IN6_PKTINFO dnl dnl Look for definition of struct in6_pktinfo, which at least has an dnl ipi6_addr member dnl AH_TEMPLATE([HAVE_STRUCT_IN6_PKTINFO], [Define if struct in6_pktinfo is defined.]) AC_DEFUN(PA_STRUCT_IN6_PKTINFO, [AC_CHECK_MEMBER(struct in6_pktinfo.ipi6_addr, [AC_DEFINE(HAVE_STRUCT_IN6_PKTINFO)], [], [ #include #include #include #include ])]) dnl -------------------------------------------------------------------------- dnl PA_HAVE_TCPWRAPPERS dnl dnl Do we have the tcpwrappers -lwrap? This can't be done using AC_CHECK_LIBS dnl due to the need to provide "allow_severity" and "deny_severity" variables dnl -------------------------------------------------------------------------- AH_TEMPLATE([HAVE_TCPWRAPPERS], [Define if we have tcpwrappers (-lwrap) and .]) AC_DEFUN(PA_HAVE_TCPWRAPPERS, [AC_CHECK_LIB([wrap], [main]) AC_MSG_CHECKING([for tcpwrappers]) AC_TRY_LINK( [ #include int allow_severity = 0; int deny_severity = 0; ], [ hosts_ctl("sample_daemon", STRING_UNKNOWN, STRING_UNKNOWN, STRING_UNKNOWN); ], [ AC_DEFINE(HAVE_TCPWRAPPERS) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ])]) dnl ------------------------------------------------------------------------ dnl PA_CHECK_INTTYPES_H_SANE dnl dnl At least some versions of AIX 4 have macros which are dnl completely broken. Try to detect those. dnl -------------------------------------------------------------------------- AH_TEMPLATE([INTTYPES_H_IS_SANE], [Define if the macros in are usable]) AC_DEFUN(PA_CHECK_INTTYPES_H_SANE, [AC_CHECK_HEADERS(inttypes.h, [ AC_MSG_CHECKING([if inttypes.h is sane]) AC_TRY_LINK( [ #include #include ], [uintmax_t max = UINTMAX_C(0); printf("%"PRIuMAX"\n", max);], AC_MSG_RESULT([yes]) AC_DEFINE(INTTYPES_H_IS_SANE), AC_MSG_RESULT([no (AIX, eh?)])) ]) ]) dnl ------------------------------------------------------------------------ dnl PA_WITH_BOOL dnl dnl PA_WITH_BOOL(option, default, help, enable, disable) dnl dnl Provides a more convenient way to specify --with-option and dnl --without-option, with a default. default should be either 0 or 1. dnl ------------------------------------------------------------------------ AC_DEFUN(PA_WITH_BOOL, [AC_ARG_WITH([$1], [$3], if test ["$withval"] != no; then [$4] else [$5] fi, if test [$2] -ne 0; then [$4] else [$5] fi)]) dnl -------------------------------------------------------------------------- dnl PA_HEADER_DEFINES dnl dnl PA_HEADER_DEFINES(header, type, value) dnl -------------------------------------------------------------------------- AC_DEFUN(PA_HEADER_DEFINES, [AC_MSG_CHECKING([if $1 defines $3]) AH_TEMPLATE([HAVE_$3_DEFINITION], [Define if $1 defines $3]) AC_TRY_COMPILE([ #include <$1> ], [ int main() { $2 dummy = $3; return 0; } ], [ pa_header_define=`echo HAVE_$3_DEFINITION | tr '[a-z]' '[A-Z]'` AC_DEFINE_UNQUOTED($pa_header_define) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ])]) dnl -------------------------------------------------------------------------- dnl PA_SEARCH_LIBS_AND_ADD dnl dnl PA_SEARCH_LIBS_AND_ADD(function, libraries [,function to add]) dnl -------------------------------------------------------------------------- AC_DEFUN(PA_SEARCH_LIBS_AND_ADD, [ AH_TEMPLATE(AS_TR_CPP(HAVE_$1), [Define if $1 function was found]) AC_SEARCH_LIBS($1, $2, [ AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1)) pa_add_$1=false; ], [ XTRA=true; if test $# -eq 3; then AC_LIBOBJ($3) else AC_LIBOBJ($1) fi pa_add_$1=true; ])])