configure.in
28e73e95
 dnl
f51e962f
 dnl   Copyright (C) 2002 - 2006 Tomasz Kojm <tkojm@clamav.net>
72a1b240
 dnl   gethostbyname_r and readdir_r checks (c) COPYRIGHT MIT 1995
4c8f2d76
 dnl   socklen_t check (c) Alexander V. Lukyanov <lav@yars.free.net>
28e73e95
 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; either version 2 of the License, or
 dnl   (at your option) any later version.
 dnl
 dnl   This program is distributed in the hope that it will be useful,
 dnl   but WITHOUT ANY WARRANTY; without even the implied warranty of
 dnl   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 dnl   GNU General Public License for more details.
 dnl
 dnl   You should have received a copy of the GNU General Public License
 dnl   along with this program; if not, write to the Free Software
48b7b4a7
 dnl   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 dnl   MA 02110-1301, USA.
28e73e95
 
 AC_INIT(clamscan/clamscan.c)
 AC_CREATE_TARGET_H(target.h)
10f12d66
 AM_INIT_AUTOMAKE(clamav, "devel-`date +%Y%m%d`")
6d6e8271
 AM_CONFIG_HEADER(clamav-config.h)
 
e8e9d02e
 LC_CURRENT=2
18ac2256
 LC_REVISION=6
28e73e95
 LC_AGE=0
 LIBCLAMAV_VERSION="$LC_CURRENT":"$LC_REVISION":"$LC_AGE"
 AC_SUBST(LIBCLAMAV_VERSION)
 
 AC_PROG_AWK
 AC_PROG_CC
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AC_PROG_LIBTOOL
 
6d6e8271
 AC_DEFINE(SCANBUFF, 131072, [scan buffer size])
 AC_DEFINE(FILEBUFF, 8192,   [file i/o buffer size])
28e73e95
 
 AC_HEADER_STDC
34f71e0e
 AC_CHECK_HEADERS(stdint.h unistd.h sys/int_types.h dlfcn.h inttypes.h sys/inttypes.h memory.h ndir.h stdlib.h strings.h string.h sys/mman.h sys/param.h sys/stat.h sys/types.h malloc.h poll.h regex.h limits.h sys/filio.h sys/uio.h termios.h iconv.h stdbool.h pwd.h grp.h)
05491efb
 AC_CHECK_HEADER(syslog.h,AC_DEFINE(USE_SYSLOG,1,[use syslog]),)
 
28e73e95
 AC_TYPE_OFF_T
 AC_COMPILE_CHECK_SIZEOF(short)
 AC_COMPILE_CHECK_SIZEOF(int)
 AC_COMPILE_CHECK_SIZEOF(long)
e7fe9178
 AC_COMPILE_CHECK_SIZEOF(long long)
2d781f3e
 
71dd1750
 AC_ARG_ENABLE(experimental,
 [  --enable-experimental	enable experimental code],
 enable_experimental=$enableval, enable_experimental="no")
 
 if test "$enable_experimental" = "yes"; then
   AC_DEFINE(CL_EXPERIMENTAL,1,[enable experimental code])
 fi
 
5efcc38b
 AC_CHECK_LIB(socket, bind, [LIBS="$LIBS -lsocket"; CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsocket"; FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lsocket"; CLAMD_LIBS="$CLAMD_LIBS -lsocket"])
 AC_CHECK_LIB(nsl, gethostent, [LIBS="$LIBS -lnsl"; CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lnsl"; FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lnsl"; CLAMD_LIBS="$CLAMD_LIBS -lnsl"])
 
 AC_CHECK_LIB(iconv, libiconv_open, LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -liconv")
2d781f3e
 
cbdc099d
 AC_CHECK_FUNCS(poll setsid memcpy snprintf vsnprintf strerror_r strlcpy strlcat inet_ntop setgroups initgroups ctime_r mkstemp)
720fd280
 AC_FUNC_MMAP
414abe87
 AC_FUNC_FSEEKO
afb48b28
 
25c90ced
 dnl Check for broken snprintf (code by Phil Oleson <oz*nixil.net>)
afb48b28
 if test "x$ac_cv_func_snprintf" = "xyes" ; then
         AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
         AC_TRY_RUN(
                 [
 #include <stdio.h>
 int main(void){char b[5];snprintf(b,5,"123456789");return(b[4]!='\0');}
                 ],
                 [AC_MSG_RESULT(yes)],
                 [
                         AC_MSG_RESULT(no)
                         AC_DEFINE(BROKEN_SNPRINTF,1,[Define if your snprintf is busted])
                         AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
                 ]
         )
 fi
28e73e95
 
 have_pthreads=no
 AC_CHECK_HEADER(pthread.h,[have_pthreads=yes],)
 
6c7dbf7d
 AM_MAINTAINER_MODE
ef1c1b34
 dnl Check for zlib
 AC_MSG_CHECKING(for zlib installation)
 AC_ARG_WITH(zlib,
 [  --with-zlib=DIR	  path to directory containing zlib library (default=
 			  /usr/local or /usr if not found in /usr/local)],
 [
 if test "$withval"; then
   ZLIB_HOME="$withval"
   AC_MSG_RESULT(using $ZLIB_HOME)
 fi
 ], [
 ZLIB_HOME=/usr/local
 if test ! -f "$ZLIB_HOME/include/zlib.h"
 then
   ZLIB_HOME=/usr
 fi
 AC_MSG_RESULT($ZLIB_HOME)
 ])
 
3e296a10
 AC_ARG_ENABLE(zlib-vcheck,
 [  --disable-zlib-vcheck	  do not check for buggy zlib version ],
8a057f52
 zlib_check=$enableval, zlib_check="yes")
3e296a10
 
ef1c1b34
 if test ! -f "$ZLIB_HOME/include/zlib.h"
 then
     AC_MSG_ERROR(Please install zlib and zlib-devel packages)
 else
3e296a10
 
ef1c1b34
     vuln=`grep "ZLIB_VERSION \"1.2.0" $ZLIB_HOME/include/zlib.h`
     if test -z "$vuln"; then
 	vuln=`grep "ZLIB_VERSION \"1.2.1" $ZLIB_HOME/include/zlib.h`
     fi
 
     if test -n "$vuln"; then
3e296a10
 	if test "$zlib_check" = "yes"; then
4233b0eb
 	    AC_MSG_ERROR(The installed zlib version may contain a security bug. Please upgrade to 1.2.2 or later: http://www.zlib.net. You can omit this check with --disable-zlib-vcheck but DO NOT REPORT any stability issues then!)
3e296a10
 	else
 	    AC_MSG_WARN([****** This ClamAV installation may be linked against])
 	    AC_MSG_WARN([****** a broken zlib version. Please DO NOT report any])
 	    AC_MSG_WARN([****** stability problems to the ClamAV developers!])
 	fi
ef1c1b34
     fi
 
67e1ca4a
     if test "$ZLIB_HOME" != "/usr"; then
 	CPPFLAGS="$CPPFLAGS -I$ZLIB_HOME/include"
ef38c83d
 	save_LDFLAGS="$LDFLAGS"
 	LDFLAGS="$LIBS -L$ZLIB_HOME/lib"
67e1ca4a
 	AC_CHECK_LIB(z, inflateEnd, [LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -L$ZLIB_HOME/lib -lz"; AC_DEFINE(HAVE_ZLIB_H,1,zlib installed)], AC_MSG_ERROR(Please install zlib and zlib-devel packages))
ef38c83d
 	LDFLAGS="$save_LDFLAGS"
67e1ca4a
     else
 	AC_CHECK_LIB(z, inflateEnd, [LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lz"; AC_DEFINE(HAVE_ZLIB_H,1,zlib installed)], AC_MSG_ERROR(Please install zlib and zlib-devel packages))
     fi
ef1c1b34
 fi
28e73e95
 
 AC_ARG_ENABLE(bzip2,
25c90ced
 [  --disable-bzip2	  disable bzip2 support],
8a057f52
 want_bzip2=$enableval, want_bzip2="yes")
28e73e95
 
b22aef42
 if test "$want_bzip2" = "yes"
 then
     AC_CHECK_LIB(bz2, bzReadOpen, AC_DEFINE(NOBZ2PREFIX,1,bzip funtions do not have bz2 prefix),)
     AC_CHECK_HEADER(bzlib.h,[LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lbz2"; AC_DEFINE(HAVE_BZLIB_H,1,have bzip2)], AC_MSG_WARN([****** bzip2 support disabled]))
 fi
 
b5456d64
 AC_ARG_ENABLE(ncore,
 [  --disable-ncore	  disable support for NodalCore acceleration (default=auto)],
53721687
 want_ncore=$enableval, want_ncore="auto")
8b7c3c29
 
53721687
 if test "$want_ncore" = "auto"
8b7c3c29
 then
f51e962f
     AC_CHECK_LIB(sn_sigscan, sn_sigscan_initdb, have_sigscan=yes,)
53721687
     if test "$have_sigscan" = "yes"; then
 	want_ncore="yes"
f51e962f
     fi
8b7c3c29
 fi
 
53721687
 if test "$want_ncore" = "yes"
 then
     AC_CHECK_HEADER(dlfcn.h,[LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -ldl" ; AC_DEFINE(HAVE_NCORE,1,Support for NodalCore acceleration)], AC_MSG_WARN([****** NodalCore support disabled (no support for dlopen)]))
 fi
 
3e92581e
 AC_ARG_ENABLE(dns,
6df7cdf5
     AC_HELP_STRING([--disable-dns], [disable support for database verification through DNS]),
     [want_dns=$enableval], [want_dns=yes]
 )
 if test $want_dns = yes; then
03cffee7
     AC_CHECK_LIB(resolv, __dn_expand, resolv_lib="-lresolv",)
     if test -z "$resolv_lib"; then
 	AC_CHECK_LIB(resolv, dn_expand, resolv_lib="-lresolv",)
     fi
a6d4c3f9
     AC_CHECK_HEADER(resolv.h,[FRESHCLAM_LIBS="$FRESHCLAM_LIBS $resolv_lib"; CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS $resolv_lib"; AC_DEFINE(HAVE_RESOLV_H,1,have resolv.h)], AC_MSG_WARN([****** DNS support disabled]), [
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/nameser.h>
 ])
28e73e95
 fi
 
32fc1d7b
 AC_ARG_ENABLE(clamuko,
23a4a7e3
 [  --disable-clamuko	  disable clamuko support (Linux, DragonFly and FreeBSD only)],
8a057f52
 want_clamuko=$enableval, want_clamuko="yes")
32fc1d7b
 
a6945b5d
 AC_FUNC_SETPGRP
 
28e73e95
 AC_ARG_ENABLE(milter,
25c90ced
 [  --enable-milter	  build clamav-milter],
8a057f52
 have_milter=$enableval, have_milter="no")
28e73e95
 
f5c83290
 if test "$have_milter" = "yes"; then
   sendmailprog=no
   AC_ARG_WITH(sendmail,
   [  --with-sendmail=PATH    specify location of Sendmail binary (default=auto find)],
   sendmailprog=$with_sendmail, sendmailprog=no)
 
   if test "$sendmailprog" = "no" ; then
     AC_PATH_PROG(sendmailprog, sendmail, no, $PATH:/sbin:/usr/sbin:/usr/lib:/usr/libexec)
   fi
 
7883b095
   AC_DEFINE_UNQUOTED(SENDMAIL_BIN, "$sendmailprog", [location of Sendmail binary])
f5c83290
 
43c2977c
   sendmailver=`$sendmailprog -d0 < /dev/null | head -1 | awk '{print $2}'`
 
10ac5fe9
   if test -n "$sendmailver"; then
     sendmailver_a=`echo $sendmailver | awk -F. '{printf $1}'`
     sendmailver_b=`echo $sendmailver | awk -F. '{printf $2}'`
     sendmailver_c=`echo $sendmailver | awk -F. '{printf $3}'`
f5c83290
 
10ac5fe9
     AC_DEFINE_UNQUOTED(SENDMAIL_VERSION_A, $sendmailver_a, [major version of Sendmail])
     AC_DEFINE_UNQUOTED(SENDMAIL_VERSION_B, $sendmailver_b, [minor version of Sendmail])
     AC_DEFINE_UNQUOTED(SENDMAIL_VERSION_C, $sendmailver_c, [subversion of Sendmail])
   fi
f5c83290
 fi
 
ae307914
 AC_ARG_ENABLE(dsig,
25c90ced
 [  --disable-dsig	  disable support for digital signatures],
8a057f52
 want_dsig=$enableval, want_dsig="yes")
ae307914
 
 if test "$want_dsig" = "yes"
 then
158b5aa3
     AC_CHECK_LIB(gmp, __gmpz_init, [LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lgmp"; AC_DEFINE(HAVE_GMP,1,have gmp installed)], [AC_CHECK_LIB(gmp, mpz_init, [LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lgmp"; AC_DEFINE(HAVE_GMP,1,have gmp installed)], AC_MSG_WARN([****** GNU MP 2 or newer NOT FOUND - digital signature support will be disabled !]); want_dsig="no")])
ae307914
 fi
 
28e73e95
 AC_ARG_ENABLE(pthreads,
25c90ced
 [  --disable-pthreads      disable POSIX threads support],
8a057f52
 have_pthreads=$enableval,)
28e73e95
 
 AC_ARG_ENABLE(cr,
25c90ced
 [  --disable-cr		  don't link with C reentrant library (BSD) ],
c4ce5fd5
 use_cr=$enableval,)
28e73e95
 
 AC_ARG_ENABLE(id-check,
25c90ced
 [  --enable-id-check	  use id utility instead of /etc/passwd parsing],
8a057f52
 use_id=$enableval, use_id="no")
28e73e95
 
0f8e1ad4
 AC_ARG_ENABLE(yp-check,
25c90ced
 [  --enable-yp-check	  use ypmatch utility instead of /etc/passwd parsing],
8a057f52
 use_yp=$enableval, use_yp="no")
0f8e1ad4
 
28e73e95
 AC_ARG_WITH(user, 
25c90ced
 [  --with-user=uid	  name of the clamav user (default=clamav)],
28e73e95
 clamav_user="$withval", clamav_user="clamav")
 
 AC_ARG_WITH(group, 
25c90ced
 [  --with-group=gid	  name of the clamav group (default=clamav)],
28e73e95
 clamav_group="$withval", clamav_group="clamav")
 
6d6e8271
 AC_DEFINE_UNQUOTED(CLAMAVUSER,"$clamav_user",[name of the clamav user])
 AC_DEFINE_UNQUOTED(CLAMAVGROUP,"$clamav_group",[name of the clamav group])
28e73e95
 
 AC_ARG_ENABLE(clamav,
25c90ced
 [  --disable-clamav	  disable test for clamav user/group],
8a057f52
 test_clamav=$enableval, test_clamav=yes)
28e73e95
 
 AC_ARG_ENABLE(debug,
25c90ced
 [  --enable-debug	  enable debug code],
8a057f52
 enable_debug=$enableval, enable_debug="no")
 
 if test "$enable_debug" = "yes"; then
   AC_DEFINE(CL_DEBUG,1,[enable debugging])
 fi
28e73e95
 
69dfd3de
 AC_ARG_ENABLE(no-cache,
 [  --enable-no-cache	  use "Cache-Control: no-cache" in freshclam],
 enable_nocache=$enableval, enable_nocache="no")
 
 if test "$enable_nocache" = "yes"; then
   AC_DEFINE(FRESHCLAM_NO_CACHE,1,[use "Cache-Control: no-cache" in freshclam])
 fi
 
4ecce39f
 AC_ARG_ENABLE(dns-fix,
 [  --enable-dns-fix	  enable workaround for broken DNS servers (as in SpeedTouch 510)],
 enable_dnsfix=$enableval, enable_dnsfix="no")
 
 if test "$enable_dnsfix" = "yes"; then
   AC_DEFINE(FRESHCLAM_DNS_FIX,1,[enable workaround for broken DNS servers])
 fi
 
28e73e95
 AC_ARG_ENABLE(bigstack,
25c90ced
 [  --enable-bigstack	  increase thread stack size],
8a057f52
 enable_bigstack=$enableval, enable_bigstack="no")
 
 if test "$enable_bigstack" = "yes"; then
   AC_DEFINE(C_BIGSTACK,1,[Increase thread stack size.])
 fi
28e73e95
 
 AC_ARG_WITH(dbdir, 
25c90ced
 [  --with-dbdir=path	  path to virus database directory],
28e73e95
 db_dir="$withval", db_dir="_default_")
 
266f3967
 dnl I had problems with $pkgdatadir thus these funny checks
28e73e95
 if test "$db_dir" = "_default_"
 then
     if test "$prefix" = "NONE"
     then
 	db_dir="$ac_default_prefix/share/clamav"
     else
 	db_dir="$prefix/share/clamav"
     fi
 fi
 
 AC_DEFINE_UNQUOTED(DATADIR,"$db_dir", [Path to virus database directory.])
 DBDIR="$db_dir"
 AC_SUBST(DBDIR)
 
158b5aa3
 dnl configure config directory
28e73e95
 cfg_dir=`echo $sysconfdir | grep prefix`
0ee809e8
 
28e73e95
 if test -n "$cfg_dir"; then
0ee809e8
     if test "$prefix" = "NONE"
     then
 	cfg_dir="$ac_default_prefix/etc"
     else
 	cfg_dir="$prefix/etc"
     fi
28e73e95
 else
     cfg_dir="$sysconfdir"
 fi
 
 CFGDIR=$cfg_dir
 AC_SUBST(CFGDIR)
6d6e8271
 AC_DEFINE_UNQUOTED(CONFDIR,"$cfg_dir",[where to look for the config file])
28e73e95
 
158b5aa3
 dnl check for in_port_t definition
da99018d
 AC_TRY_RUN([
5db1c6b0
 #include <sys/types.h>
da99018d
 #include <netinet/in.h>
 int main(int argc, char **argv) { in_port_t pt; pt = 0; return pt; }
 ], AC_DEFINE(HAVE_IN_PORT_T,1,[in_port_t is defined]), AC_MSG_RESULT(in_port_t is not defined))
feb27080
 
8600c7eb
 dnl check for in_addr_t definition
 AC_TRY_RUN([
 #include <sys/types.h>
 #include <netinet/in.h>
 int main(int argc, char **argv) { in_addr_t pt; pt = 0; return pt; }
 ], AC_DEFINE(HAVE_IN_ADDR_T,1,[in_addr_t is defined]), AC_MSG_RESULT(in_addr_t is not defined))
 
28e73e95
 case "$target_os" in
 linux*)
6d6e8271
     AC_DEFINE(C_LINUX,1,[target is linux])
28e73e95
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
 	if test "$want_clamuko" = "yes"; then
6d6e8271
 	    AC_DEFINE(CLAMUKO,1,[enable clamuko])
28e73e95
 	fi
     fi
7708ddfc
     case `uname -r` in
     1.*|2.0.*)
        AC_DEFINE(INCOMPLETE_CMSG,1,[Early Linux doesn't set cmsg fields])
        ;;
     esac
28e73e95
     ;;
cbdc099d
 kfreebsd*-gnu)
     AC_DEFINE(C_KFREEBSD_GNU,1,[target is kfreebsd-gnu])
     if test "$have_pthreads" = "yes"; then
099cf13c
        THREAD_LIBS="-lpthread"
cbdc099d
        TH_SAFE="-thread-safe"
        AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
        AC_DEFINE(_REENTRANT,1,[thread safe])
        if test "$want_clamuko" = "yes"; then
            AC_DEFINE(CLAMUKO,1,[enable clamuko])
        fi
     fi
     ;;
28e73e95
 cygwin*)
6d6e8271
     AC_DEFINE(C_CYGWIN,1,[os is cygwin])
28e73e95
     if test "$test_clamav" = "yes"; then
 	if test ! -r /etc/passwd; then
 	   test_clamav="no"
 	fi
     fi
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
5523ce72
     use_gethostbyname_r="no"
28e73e95
     ;;
 solaris*)
1d42f2c4
     FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lresolv"
28e73e95
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
 	CLAMD_LIBS="$CLAMD_LIBS -lresolv"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lresolv"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
6d6e8271
     AC_DEFINE(C_SOLARIS,1,[os is solaris])
28e73e95
     ;;
a6d4c3f9
 freebsd[[45]]*)
28e73e95
     if test "$have_pthreads" = "yes"; then
fdf715fd
 	THREAD_LIBS="-pthread -lc_r"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
32fc1d7b
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE(CLAMUKO,1,[enable clamuko])
 	fi
28e73e95
     fi
d6d9e527
     AC_DEFINE(C_BSD,1,[os is freebsd 4 or 5])
     use_gethostbyname_r="no"
     ;;
4cf912b5
 freebsd*)
d6d9e527
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-lthr"
 	TH_SAFE="-thread-safe"
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE(CLAMUKO,1,[enable clamuko])
 	fi
     fi
     AC_DEFINE(C_BSD,1,[os is freebsd 6])
289615f7
     use_gethostbyname_r="no"
28e73e95
     ;;
23a4a7e3
 dragonfly*)
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-pthread"
23a4a7e3
 	TH_SAFE="-thread-safe"
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
 	if test "$want_clamuko" = "yes"; then
 	    AC_DEFINE(CLAMUKO,1,[enable clamuko])
 	fi
     fi
     AC_DEFINE(C_BSD,1,[os is dragonfly])
     use_gethostbyname_r="no"
     ;;
e7fe9178
 openbsd*)
ee039e40
     if test "$have_pthreads" = "yes"; then
c4ce5fd5
 	if test "$use_cr" = "no"; then
099cf13c
 	    THREAD_LIBS="-pthread"
e7fe9178
 	else
099cf13c
 	    THREAD_LIBS="-pthread -lc_r"
ee039e40
 	fi
 	TH_SAFE="-thread-safe"
ed026d36
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
ee039e40
     fi
e7fe9178
     AC_DEFINE(C_BSD,1,[os is OpenBSD])
289615f7
     use_gethostbyname_r="no"
ee039e40
     ;;
e7fe9178
 bsdi*)
28e73e95
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-pthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
e7fe9178
     AC_DEFINE(C_BSD,1,[os is BSDI BSD/OS])
289615f7
     use_gethostbyname_r="no"
28e73e95
     ;;
 netbsd*)
ed026d36
      if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
ed026d36
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
      fi
e7fe9178
     AC_DEFINE(C_BSD,1,[os is NetBSD])
289615f7
     use_gethostbyname_r="no"
28e73e95
     ;;
 bsd*)
     AC_MSG_RESULT(Unknown BSD detected. Disabling thread support.)
     have_pthreads="no"
6d6e8271
     AC_DEFINE(C_BSD,1,[os is bsd flavor])
289615f7
     use_gethostbyname_r="no"
28e73e95
     ;;
 beos*)
     AC_MSG_RESULT(BeOS detected. Disabling thread support.)
     have_pthreads="no"
6d6e8271
     AC_DEFINE(C_BEOS,1,[os is beos])
28e73e95
     ;;
 darwin*)
6d6e8271
     AC_DEFINE(C_BSD,1,[os is bsd flavor])
     AC_DEFINE(C_DARWIN,1,[os is darwin])
8600c7eb
     AC_DEFINE(BIND_8_COMPAT,1,[enable bind8 compatibility])
28e73e95
     use_netinfo="yes"
289615f7
     use_gethostbyname_r="no"
28e73e95
     ;;
75ccac9f
 os2*)
     FRESHCLAM_LIBS="$FRESHCLAM_LIBS -lsyslog"
     CLAMD_LIBS="$CLAMD_LIBS -lsyslog"
     CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsyslog"
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
75ccac9f
 	TH_SAFE="-thread-safe"
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
     fi
     AC_DEFINE(C_OS2,1,[os is OS/2])
     ;;
28e73e95
 sco*)
     dnl njh@bandsman.sco.uk: SCO Unix port
1d42f2c4
     dnl FRESHCLAM_LIBS="-lsocket"
     dnl CLAMD_LIBS="-lsocket"
     dnl CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsocket"
28e73e95
     ;;
 hpux*)
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
6d6e8271
     AC_DEFINE(C_HPUX,1,[os is hpux])
ef38c83d
     use_gethostbyname_r="no"
28e73e95
     ;;
 aix*)
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
6d6e8271
     AC_DEFINE(C_AIX,1,[os is aix])
28e73e95
     ;;
5d01fefa
 *-*-osf*)
     if test "$have_pthreads" = "yes"; then
 	THREAD_LIBS="-pthread"
 	TH_SAFE="-thread-safe"
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
 	AC_DEFINE(_POSIX_PII_SOCKET,1,[POSIX compatibility])
     fi
     AC_DEFINE(C_OSF,1,[os is osf/tru64])
     ;;
4233b0eb
 nto-qnx*)
      if test "$have_pthreads" = "yes"; then
        AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
        AC_DEFINE(_REENTRANT,1,[thread safe])
      fi
     AC_DEFINE(C_QNX6,1,[os is QNX 6.x.x])
     ;;
28e73e95
 irix*)
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
28e73e95
 	TH_SAFE="-thread-safe"
6d6e8271
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
28e73e95
     fi
6d6e8271
     AC_DEFINE(C_IRIX,1,[os is irix])
28e73e95
     ;;
feeaa333
 interix*)
     AC_DEFINE(C_INTERIX,1,[os is interix])
     if test "$test_clamav" = "yes"; then
 	if test ! -r /etc/passwd; then
 	   test_clamav="no"
 	fi
     fi
     if test "$have_pthreads" = "yes"; then
099cf13c
 	THREAD_LIBS="-lpthread"
feeaa333
 	TH_SAFE="-thread-safe"
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
 	AC_DEFINE(_REENTRANT,1,[thread safe])
     fi
     ;;
8bead9a1
 gnu*)
     AC_DEFINE(C_GNU_HURD,1,[target is gnu-hurd])
     if test "$have_pthreads" = "yes"; then
        THREAD_LIBS="-lpthread"
        TH_SAFE="-thread-safe"
        AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
        AC_DEFINE(_REENTRANT,1,[thread safe])
     fi
     ;;
28e73e95
 *)
     ;;
 esac
 
 AC_SUBST(LIBCLAMAV_LIBS)
 AC_SUBST(CLAMD_LIBS)
d685f6dd
 AC_SUBST(CLAMAV_MILTER_LIBS)
28e73e95
 AC_SUBST(FRESHCLAM_LIBS)
 AC_SUBST(TH_SAFE)
099cf13c
 AC_SUBST(THREAD_LIBS)
28e73e95
 
158b5aa3
 dnl --enable-milter
44ebbf5b
 if test "$have_milter" = "yes"; then
158b5aa3
     dnl libmilter checking code adapted from spamass-milter by
     dnl Tom G. Christensen <tgc@statsbiblioteket.dk>
44ebbf5b
 
158b5aa3
     dnl Check for libmilter and it's header files in the usual locations
f34f1f90
     save_LDFLAGS="$LDFLAGS"
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
44ebbf5b
     if test -d /usr/lib/libmilter ; then
 	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -L/usr/lib/libmilter"
     fi
f34f1f90
     LDFLAGS="$LDFLAGS -lmilter $CLAMAV_MILTER_LIBS"
223565eb
     AC_CHECK_LIB(milter, mi_stop,[CLAMAV_MILTER_LIBS="-lmilter $CLAMAV_MILTER_LIBS"],[
158b5aa3
 	dnl Older sendmails require libsm or libsmutil for support functions
44ebbf5b
 	AC_SEARCH_LIBS(strlcpy, [sm smutil], [test "$ac_cv_search_strlcpy" = "none required" || CLAMAV_MILTER_XLIB="$ac_cv_search_strlcpy"])
f34f1f90
 	LDFLAGS="$save_LDFLAGS $CLAMAV_MILTER_LIBS $CLAMAV_MILTER_XLIB"
44ebbf5b
 	$as_unset ac_cv_lib_milter_mi_stop
223565eb
 	AC_CHECK_LIB(milter, mi_stop,[CLAMAV_MILTER_LIBS="-lmilter $CLAMAV_MILTER_XLIB $CLAMAV_MILTER_LIBS"],[
44ebbf5b
 	    AC_MSG_ERROR([Cannot find libmilter])
 	])
     ])
f34f1f90
     LDFLAGS="$save_LDFLAGS"
44ebbf5b
     AC_CHECK_HEADERS(libmilter/mfapi.h,have_milter="yes",[
 	AC_MSG_ERROR([Please install mfapi.h from the sendmail distribution])
     ])
 fi
 
d71dd823
 AM_CONDITIONAL(BUILD_CLAMD, test "$have_pthreads" = "yes")
28e73e95
 AM_CONDITIONAL(HAVE_MILTER, test "$have_milter" = "yes")
 
d71dd823
 if test "$have_pthreads" = "yes"
 then
6d6e8271
     AC_DEFINE(BUILD_CLAMD, 1, "build clamd")
d71dd823
 fi
28e73e95
 
7708ddfc
 dnl Check if we can do fd passing
 dnl Submitted by Richard Lyons <frob-clamav@webcentral.com.au>
 AC_CHECK_FUNCS(recvmsg sendmsg)
 AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
 	ac_cv_have_accrights_in_msghdr, [
     AC_TRY_RUN(
 	[
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
 int main() {
 #ifdef msg_accrights
 exit(1);
 #endif
 struct msghdr m;
 m.msg_accrights = 0;
 exit(0);
 }
 	],
 	[ ac_cv_have_accrights_in_msghdr="yes" ],
 	[ ac_cv_have_accrights_in_msghdr="no" ]
     )
 ])
 if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
     AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR,1,[access rights in msghdr])
 fi
 
 AC_CACHE_CHECK([for msg_control field in struct msghdr],
 	ac_cv_have_control_in_msghdr, [
     AC_TRY_RUN(
 	[
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
 int main() {
 #ifdef msg_control
 exit(1);
 #endif
 struct msghdr m;
 m.msg_control = 0;
 exit(0);
 }
 	],
 	[ ac_cv_have_control_in_msghdr="yes" ],
 	[ ac_cv_have_control_in_msghdr="no" ]
     )
 ])
 if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
     AC_DEFINE(HAVE_CONTROL_IN_MSGHDR,1,[ancillary data style fd pass])
 fi
 
158b5aa3
 dnl tcpwrappers support
 dnl rules from http://ma.ph-freiburg.de/tng/tng-technical/2002-01/msg00094.html
720fd280
 AC_ARG_WITH(tcpwrappers,
25c90ced
 [  --with-tcpwrappers      support hosts.allow / hosts.deny (default=auto)],
720fd280
 [ case "$withval" in
   yes|no) tcpw="$withval" ;;
   *)      AC_MSG_ERROR([--with-tcpwrappers does not take an argument]) ;;
   esac],
 [ tcpw=auto ])
 
 if test "$tcpw" != "no" && test "$have_milter" = "yes" ; then
         AC_CHECK_HEADERS(tcpd.h,[
                 AC_MSG_CHECKING([for TCP wrappers library])
                 save_LIBS="$LIBS"
                 LIBS="$LIBS -lwrap $FRESHCLAM_LIBS"
                 AC_TRY_LINK([
 #include <tcpd.h>
 int allow_severity = 0;
 int deny_severity  = 0;
 
 struct request_info *req;
                 ],[
 hosts_access(req)
                 ],[AC_MSG_RESULT([-lwrap])
                 have_wrappers=yes
 		LIBS="$save_LIBS"
                 CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lwrap"],[
                 dnl try with -lnsl
                 LIBS="$LIBS -lnsl $FRESHCLAM_LIBS"
                 AC_TRY_LINK([
 #include <tcpd.h>
 int allow_severity = 0;
 int deny_severity  = 0;
 
 struct request_info *req;
                 ],[
 hosts_access(req)
                 ],[AC_MSG_RESULT([-lwrap -lnsl])
                 have_wrappers=yes
                 CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lwrap"],[
                 AC_MSG_RESULT(no)
                 have_wrappers=no
                 LIBS=$save_LIBS])],[
                 have_wrappers=no])],[have_wrappers=no])
 
         if test $have_wrappers = yes ; then
                 AC_DEFINE(WITH_TCPWRAP,1, [tcpwrappers support])
         elif test $tcpw = yes ; then
                 AC_MSG_ERROR([could not find TCP wrappers])
         else
                 AC_MSG_WARN([could not find TCP wrappers, support disabled])
         fi
 fi
 
158b5aa3
 dnl Check for gethostbyname_r and number of its arguments
 dnl Code from libwww/configure.in
 AC_MSG_CHECKING(for gethostbyname_r)
 if test -z "$ac_cv_gethostbyname_args"; then
 AC_TRY_COMPILE(
 [
 #include <sys/types.h>
 #include <netdb.h>
 ],[
 struct hostent *hp;
 struct hostent h;
 char *name;
 char buffer[10];
 int  h_errno;
 hp = gethostbyname_r(name, &h, buffer, 10, &h_errno);
 ], ac_cv_gethostbyname_args=5)
 fi
 if test -z "$ac_cv_gethostbyname_args"; then
 AC_TRY_COMPILE(
 [
 #include <sys/types.h>
 #include <netdb.h>
 ],[
 struct hostent h;
 struct hostent_data hdata;
 char *name;
 int  rc;
 rc = gethostbyname_r(name, &h, &hdata);
 ], ac_cv_gethostbyname_args=3)
 fi
 if test -z "$ac_cv_gethostbyname_args"; then
 AC_TRY_COMPILE(
 [
 #include <sys/types.h>
 #include <netdb.h>
 ], [
 struct hostent h;
 struct hostent *hp;
 char *name;
 char buf[10];
 int rc;
 int h_errno;
 
 rc = gethostbyname_r(name, &h, buf, 10, &hp, &h_errno);
 ], ac_cv_gethostbyname_args=6)
 fi
25c90ced
 
 AC_ARG_ENABLE(gethostbyname_r,
 [  --disable-gethostbyname_r	  disable support for gethostbyname_r],
289615f7
 use_gethostbyname_r=$enableval,)
25c90ced
 
289615f7
 if test "$use_gethostbyname_r" = "no"; then
9684d386
     AC_MSG_RESULT(support disabled)
 elif test -z "$ac_cv_gethostbyname_args"; then
158b5aa3
     AC_MSG_RESULT(no)
 else
     if test "$ac_cv_gethostbyname_args" = 3; then
 	AC_DEFINE(HAVE_GETHOSTBYNAME_R_3,1,[gethostbyname_r takes 3 arguments])
     elif test "$ac_cv_gethostbyname_args" = 5; then
 	AC_DEFINE(HAVE_GETHOSTBYNAME_R_5,1,[gethostbyname_r takes 5 arguments])
     elif test "$ac_cv_gethostbyname_args" = 6; then
 	AC_DEFINE(HAVE_GETHOSTBYNAME_R_6,1,[gethostbyname_r takes 6 arguments])
     fi
     AC_MSG_RESULT([yes, and it takes $ac_cv_gethostbyname_args arguments])
 fi
28e73e95
 
72a1b240
 dnl Check for readdir_r and number of its arguments
 dnl Code from libwww/configure.in
 
 AC_MSG_CHECKING(for readdir_r)
 if test -z "$ac_cv_readdir_args"; then
     AC_TRY_COMPILE(
     [
 #include <sys/types.h>
 #include <dirent.h>
     ],
     [
     struct dirent dir, *dirp;
     DIR *mydir;
     dirp = readdir_r(mydir, &dir);
     ], ac_cv_readdir_args=2)
 fi
 if test -z "$ac_cv_readdir_args"; then
     AC_TRY_COMPILE(
         [
 #include <sys/types.h>
 #include <dirent.h>
     ],
     [
         struct dirent dir, *dirp;
         DIR *mydir;
         int rc;
         rc = readdir_r(mydir, &dir, &dirp);
     ], ac_cv_readdir_args=3)
 fi
 
 AC_ARG_ENABLE(readdir_r,
8a057f52
 [  --enable-readdir_r		    enable support for readdir_r],
 enable_readdir_r=$enableval, enable_readdir_r="no")
72a1b240
 
8a057f52
 if test "$enable_readdir_r" = "no"; then
9684d386
     AC_MSG_RESULT(support disabled)
 elif test -z "$ac_cv_readdir_args"; then
72a1b240
     AC_MSG_RESULT(no)
 else
     if test "$ac_cv_readdir_args" = 2; then
 	AC_DEFINE(HAVE_READDIR_R_2,1,[readdir_r takes 2 arguments])
     elif test "$ac_cv_readdir_args" = 3; then
 	AC_DEFINE(HAVE_READDIR_R_3,1,[readdir_r takes 3 arguments])
     fi
     AC_MSG_RESULT([yes, and it takes $ac_cv_readdir_args arguments])
 fi
 
f4b5b80e
 AC_MSG_CHECKING(for ctime_r)
 if test "$ac_cv_func_ctime_r" = "yes"; then
     AC_TRY_COMPILE([
 	#include <time.h>
     ],[
 	char buf[31];
 	time_t t;
 	ctime_r(&t, buf, 30);
     ],[
 	ac_cv_ctime_args=3
 	AC_DEFINE(HAVE_CTIME_R_3,1,[ctime_r takes 3 arguments])
     ],[
 	ac_cv_ctime_args=2
 	AC_DEFINE(HAVE_CTIME_R_2,1,[ctime_r takes 2 arguments])
     ])
 
     AC_MSG_RESULT([yes, and it takes $ac_cv_ctime_args arguments])
 fi
 
4c8f2d76
 dnl Determine socklen_t type. Code from lftp.
 AC_MSG_CHECKING(for socklen_t)
 AC_CACHE_VAL(ac_cv_socklen_t,
 [
     ac_cv_socklen_t=no
     AC_TRY_COMPILE([
 	#include <sys/types.h>
         #include <sys/socket.h>
     ],
     [
 	socklen_t len;
         getpeername(0,0,&len);
     ],
     [
 	ac_cv_socklen_t=yes
     ])
 ])
 AC_MSG_RESULT($ac_cv_socklen_t)
     if test $ac_cv_socklen_t = no; then
     AC_MSG_CHECKING(for socklen_t equivalent)
     AC_CACHE_VAL(ac_cv_socklen_t_equiv,
     [
 	ac_cv_socklen_t_equiv=int
         for t in int size_t unsigned long "unsigned long"; do
 	    AC_TRY_COMPILE([
 		#include <sys/types.h>
 		#include <sys/socket.h>
 	    ],
             [
 		$t len;
 		getpeername(0,0,&len);
             ],
             [
 		ac_cv_socklen_t_equiv="$t"
 		break
             ])
 	done
     ])
     AC_MSG_RESULT($ac_cv_socklen_t_equiv)
     AC_DEFINE_UNQUOTED(socklen_t, $ac_cv_socklen_t_equiv, [Define to "int" if <sys/socket.h> does not define.])
 fi
 
158b5aa3
 dnl Check for clamav in /etc/passwd
28e73e95
 if test "$test_clamav" = "yes"
 then
158b5aa3
     dnl parse /etc/passwd
     if test "$use_id" = "no"
28e73e95
     then
158b5aa3
 	AC_MSG_CHECKING(for $clamav_user in /etc/passwd)
28e73e95
 	if test -r /etc/passwd; then
6d0d15d7
 	    clamavuser=`cat /etc/passwd|grep "^$clamav_user:"`
 	    clamavgroup=`cat /etc/group|grep "^$clamav_group:"`
28e73e95
 	fi
     else
158b5aa3
 	AC_MSG_CHECKING(for $clamav_user using id)
28e73e95
 	id $clamav_user > /dev/null 2>&1
 	if test "$?" = 0 ; then
 	    clamavuser=1
 	    AC_PATH_PROG(GETENT, getent)
 	    if test -n "$GETENT" ; then
 		clamavgroup=`$GETENT group | grep "^${clamav_group}:"`
 	    else
 		clamavgroup=`cat /etc/group|grep $clamav_group`
 	    fi
 	fi
     fi
 
     if test "$use_netinfo" = "yes"
     then
158b5aa3
 	AC_MSG_CHECKING(for $clamav_user using netinfo)
28e73e95
         clamavuser=`/usr/bin/nidump passwd . |grep ${clamav_user}`
         clamavgroup=`/usr/bin/nidump group . |grep ${clamav_group}`
     fi
 
0f8e1ad4
     if test "$use_yp" = "yes"
     then
158b5aa3
 	AC_MSG_CHECKING(for $clamav_user using ypmatch)
0f8e1ad4
         clamavuser=`ypmatch ${clamav_user} passwd`
         clamavgroup=`ypmatch ${clamav_group} group`
     fi
 
28e73e95
     if test -z "$clamavuser" || test -z "$clamavgroup"
     then
158b5aa3
 	AC_MSG_RESULT(no)
 	AC_MSG_ERROR(User $clamav_user (and/or group $clamav_group) doesn't exist. Please read the documentation !)
28e73e95
     else
158b5aa3
 	AC_MSG_RESULT([yes, user $clamav_user and group $clamav_group])
         CLAMAVUSER="$clamav_user"
         CLAMAVGROUP="$clamav_group"
28e73e95
         AC_SUBST(CLAMAVUSER)
         AC_SUBST(CLAMAVGROUP)
     fi
 fi
 
 AC_C_CONST
05491efb
 AC_C_INLINE
28e73e95
 AC_C_BIGENDIAN
 if test $ac_cv_c_bigendian = yes; then
6d6e8271
   AC_DEFINE(WORDS_BIGENDIAN,1,endianess)
28e73e95
 else
6d6e8271
   AC_DEFINE(WORDS_BIGENDIAN,0,endianess)
28e73e95
 fi
 
ee039e40
 dnl check for __attribute__((packed))
 AC_MSG_CHECKING([for structure packing via __attribute__((packed))])
 AC_CACHE_VAL(have_attrib_packed,[
 	AC_TRY_COMPILE(,
 		[struct { int i __attribute__((packed)); } s; ],
 		[have_attrib_packed=yes],
 		[have_attrib_packed=no])
 	])
 AC_MSG_RESULT($have_attrib_packed)
 
 if test "$have_attrib_packed" = no; then
 	AC_MSG_CHECKING(for structure packing via pragma)
 	AC_CACHE_VAL(have_pragma_pack,[
feb27080
 		AC_TRY_RUN([int main(int argc, char **argv) {
ee039e40
 #pragma pack(1)			/* has to be in column 1 ! */
 			struct { char c; long l; } s;
 			return sizeof(s)==sizeof(s.c)+sizeof(s.l) ? 0:1; } ],
 			[have_pragma_pack=yes],
 			[have_pragma_pack=no])
 		])
 	AC_MSG_RESULT($have_pragma_pack)
ef38c83d
 	if test "$have_pragma_pack" = yes; then
 		AC_DEFINE(HAVE_PRAGMA_PACK, 1, "pragma pack")
 	else
 		AC_MSG_CHECKING(for structure packing via hppa/hp-ux pragma)
 		AC_CACHE_VAL(have_pragma_pack_hpux,[
 			AC_TRY_RUN([
 			/* hppa/hp-ux wants pragma outside of function */
 #pragma pack 1 /* has to be in column 1 ! */
 			struct { char c; long l; } s;
 			    int main(int argc, char **argv) {
 			return sizeof(s)==sizeof(s.c)+sizeof(s.l) ? 0:1; } ],
 			[have_pragma_pack_hpux=yes],
 			[have_pragma_pack_hpux=no])
 		])
 		AC_MSG_RESULT($have_pragma_pack_hpux)
 		AC_DEFINE(HAVE_PRAGMA_PACK_HPPA, 1, "pragma pack hppa/hp-ux style")
 	fi
ee039e40
 fi
 
46c07372
 dnl check for __attribute__((aligned))
 AC_MSG_CHECKING([for type aligning via __attribute__((aligned))])
 AC_CACHE_VAL(have_attrib_aligned,[
 	AC_TRY_COMPILE(,
 		[typedef int cl_aligned_int __attribute__((aligned));],
 		[have_attrib_aligned=yes],
 		[have_attrib_aligned=no])
 	])
 AC_MSG_RESULT($have_attrib_aligned)
 
ef38c83d
 if test "$have_attrib_packed" = no -a "$have_pragma_pack" = no -a "$have_pragma_pack_hpux" = no; then
ee039e40
 	AC_MSG_ERROR(Need to know how to pack structures with this compiler)
 fi
46c07372
 
ee039e40
 if test "$have_attrib_packed" = yes; then
46c07372
 	AC_DEFINE(HAVE_ATTRIB_PACKED, 1, [attrib packed])
 fi
 
 if test "$have_attrib_aligned" = yes; then
 	AC_DEFINE(HAVE_ATTRIB_ALIGNED, 1, [attrib aligned])
ee039e40
 fi
 
158b5aa3
 dnl Check if <sys/select.h> needs to be included for fd_set
b7f57a87
 AC_MSG_CHECKING([for fd_set])
 AC_TRY_COMPILE([#include <sys/types.h>],
         [fd_set readMask, writeMask;], have_fd_set=yes, have_fd_set=no)
 if test $have_fd_set = yes; then
     AC_MSG_RESULT([yes, found in sys/types.h])
 else
     AC_HEADER_EGREP(fd_mask, sys/select.h, have_fd_set=yes)
     if test $have_fd_set = yes; then
         AC_DEFINE(HAVE_SYS_SELECT_H, 1, "have <sys/select.h>")
         AC_MSG_RESULT([yes, found in sys/select.h])
     else
         AC_DEFINE(NO_FD_SET, 1, "no fd_set")
         AC_MSG_RESULT(no)
     fi
 fi
 
158b5aa3
 AC_MSG_CHECKING(default FD_SETSIZE value)
c0d52615
 AC_TRY_RUN([
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/time.h>
 #include <sys/select.h>
 #include <sys/types.h>
 main() {
         FILE *fp = fopen("conftestval", "w");
         fprintf (fp, "%d\n", FD_SETSIZE);
         exit(0);
 }
 ],
 DEFAULT_FD_SETSIZE=`cat conftestval`,
 DEFAULT_FD_SETSIZE=256,
 DEFAULT_FD_SETSIZE=256)
 AC_MSG_RESULT($DEFAULT_FD_SETSIZE)
 AC_DEFINE_UNQUOTED(DEFAULT_FD_SETSIZE, $DEFAULT_FD_SETSIZE, "default FD_SETSIZE value")
 
35eb6354
 dnl Check signed right shift implementation
 AC_MSG_CHECKING(if signed right shift is sign extended)
 AC_TRY_RUN([int main(void){int a=-1;int b=a>>1;return(a!=b);}],
     [have_signed_rightshift_extended=yes],
     [have_signed_rightshift_extended=no],
     [have_signed_rightshift_extended=no])
 if test $have_signed_rightshift_extended = yes; then
     AC_DEFINE(HAVE_SAR, 1, Define signed right shift implementation)
 fi
 AC_MSG_RESULT($have_signed_rightshift_extended);
 
 
28e73e95
 AC_OUTPUT([
 libclamav/Makefile
 clamscan/Makefile
 database/Makefile
 docs/Makefile
 clamd/Makefile
 clamdscan/Makefile
 clamav-milter/Makefile
 freshclam/Makefile
 sigtool/Makefile
dc4f2ce8
 clamconf/Makefile
28e73e95
 etc/Makefile
 Makefile
9f51cb51
 clamav-config
 libclamav.pc
a39ae468
 docs/man/clamav-milter.8
 docs/man/clamconf.1
8600c7eb
 docs/man/clamd.8
 docs/man/clamd.conf.5
a39ae468
 docs/man/clamdscan.1
 docs/man/clamscan.1
8600c7eb
 docs/man/freshclam.1
 docs/man/freshclam.conf.5
a39ae468
 docs/man/sigtool.1
28e73e95
 ])