dnl Process this file with autoconf to produce a configure script # $Id: configure.ac,v 1.228 2007/11/17 16:58:24 ca Exp $ # @start1 define(mta_MAJOR, [1]) define(mta_MINOR, [0]) define(mta_TYPE, [PreAlpha]) define(mta_TYPEVERSION, [22]) define(mta_LEVEL, [0]) define(mta_TYPE_N, ifelse( mta_TYPE, [PreAlpha], [0], mta_TYPE, [Alpha], [1], mta_TYPE, [Beta], [2], mta_TYPE, [Gamma], [3], [4] )) AC_INIT(mta, [mta_MAJOR.mta_MINOR.mta_TYPE[]mta_TYPEVERSION.mta_LEVEL], [bugs (at) MeTA1.org]) AC_PREREQ(2.52) AC_COPYRIGHT([Copyright (c) 2002-2006 Sendmail, Inc. and its suppliers]) AC_REVISION([$Id: configure.ac,v 1.228 2007/11/17 16:58:24 ca Exp $]) AC_CONFIG_SRCDIR(smtps/smtps.c) AC_CONFIG_AUX_DIR(build) AC_CANONICAL_SYSTEM AC_PROG_MAKE_SET AM_INIT_AUTOMAKE(meta1, AC_PACKAGE_VERSION) AM_CONFIG_HEADER(include/smconf.h) AC_CONFIG_SUBDIRS(statethreads) AC_PROG_CC(xlc cc gcc) AC_HEADER_STDC AC_PROG_RANLIB AC_PROG_YACC dnl ---- pthreads ACX_PTHREAD() # # We'd like to use sigwait() too # should this be further down where pthread options are used? AC_CHECK_FUNCS(sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(c, sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(pthread, sigwait, AC_DEFINE(HAVE_SIGWAIT), AC_CHECK_LIB(pthread, _Psigwait, AC_DEFINE(HAVE_SIGWAIT), )))) # # Additional OS-specific issues related to pthreads and sigwait. # case "$host" in # # One more place to look for sigwait. # *-freebsd*) AC_CHECK_LIB(c_r, sigwait, AC_DEFINE(HAVE_SIGWAIT),) ;; # # BSDI 3.0 through 4.0.1 needs pthread_init() to be # called before certain pthreads calls. This is deprecated # in BSD/OS 4.1. # *-bsdi3.*|*-bsdi4.0*) AC_DEFINE(NEED_PTHREAD_INIT,,need pthread_init) ;; # # Ensure the right sigwait() semantics on Solaris and make # sure we call pthread_setconcurrency. # *-solaris*) AC_DEFINE(_POSIX_PTHREAD_SEMANTICS,,use posix sigwait) AC_CHECK_FUNCS(pthread_setconcurrency) ;; # # UnixWare does things its own way. # *-sco-sysv*uw*) AC_DEFINE(HAVE_UNIXWARE_SIGWAIT,,have unixware sigwait) ;; esac dnl ------------ dnl this is CONFUSING! dnl autoconf looks for enable-FEATURE. BUT: we want to enable the feature dnl by default, hence we call it disable-FEATURE. Nevertheless, dnl enableval is set based on enable-FEATURE, so there is some negation dnl going on... AC_MSG_CHECKING(if --disable-included-bdb option specified) AC_ARG_ENABLE(included-bdb, AC_HELP_STRING([--disable-included-bdb], [disable included Berkeley DB distribution.]), , enableval="yes") sm_cv_enable_included_bdb=$enableval case "$sm_cv_enable_included_bdb" in no) AC_MSG_RESULT(yes) ;; yes) # enable included BDB MTA_DB_INC=\${top_builddir}/bdbbld MTA_DB_LIB=\${top_builddir}/bdbbld/libdb-4.3.a CPPFLAGS="$CPPFLAGS -I$MTA_DB_INC" AC_DEFINE(HAVE_BERKELEYDB4, 1, [Define if Berkeley DB 4.3 is available]) AC_MSG_RESULT(no) ;; esac dnl ------------ dnl Berkeley DB stuff dnl use pthread options since the library should be compiled for it; dnl we want to use it with the QMGR OLD_LIBS="$LIBS" OLD_CFLAGS="$CFLAGS" OLD_CC="$CC" # Berkeley DB 4.3 calls fdatasync, and it's only available in -lrt on Solaris. MTA_FDATASYNC_LIB="" fdatasync_in_lrt=false AC_CHECK_FUNCS(fdatasync) if test "$ac_cv_func_fdatasync" != "yes"; then AC_CHECK_LIB(rt, fdatasync, [fdatasync_in_lrt=true; MTA_FDATASYNC_LIB="-lrt"], fdatasync_in_lrt=false) fi LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" # use included BDB? if test "$sm_cv_enable_included_bdb" = "no"; then MTA_BDBBLD= dnl AC_CHECK_FUNCS(pthread_rwlock_init) AC_ARG_WITH(bdb-libdir, [ --with-bdb-libdir=DIR Berkeley DB lib files are in DIR], with_bdb_lib=$withval) AC_ARG_WITH(bdb-incdir, [ --with-bdb-incdir=DIR Berkeley DB include files are in DIR], with_bdb_inc=$withval) BERKELEY_DB4x_CHK() if test "$dblib" = no; then AC_MSG_WARN([Bad Berkeley DB library implementation specified;]) AC_MSG_WARN([see README about --with-bdb-libdir; Section Required Packages]) AC_ERROR([Berkeley DB 4.x (x > 0) required]) fi SM_BERKELEYDB4() if test "$sm_cv_berkeleyDB4" = "no"; then AC_MSG_WARN([Bad Berkeley DB library implementation specified;]) AC_MSG_WARN([see README about --with-bdb-libdir; Section Required Packages]) AC_ERROR([Berkeley DB 4.x (x > 0) required]) fi else MTA_DB_LIB="${MTA_DB_LIB} ${MTA_FDATASYNC_LIB}" MTA_BDBBLD=bdbbld AC_CONFIG_SUBDIRS(bdbbld) fi dnl ------ other pthread checks AC_CHECK_FUNCS(pthread_yield pthread_attr_getstacksize) dnl ------ restore original values LIBS="$OLD_LIBS" CFLAGS="$OLD_CFLAGS" CC="$OLD_CC" dnl ------------ dnl ------------ AC_ARG_ENABLE(msp, [ --enable-msp enable a simple MSP], msp=$enableval, msp=no) AM_CONDITIONAL(MTA_MSP, test x$msp = xyes) dnl ------------ AC_SUBST(MTA_BDBBLD) AC_SUBST(MTA_DB_INC) AC_SUBST(MTA_DB_LIB) MTA_MAJOR=mta_MAJOR MTA_MINOR=mta_MINOR MTA_TYPE=mta_TYPE MTA_TYPE_N=mta_TYPE_N MTA_TYPEVERSION=mta_TYPEVERSION MTA_LEVEL=mta_LEVEL AC_SUBST(MTA_MAJOR) AC_SUBST(MTA_MINOR) AC_SUBST(MTA_TYPE) AC_SUBST(MTA_TYPE_N) AC_SUBST(MTA_TYPEVERSION) AC_SUBST(MTA_LEVEL) AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_CHECK_HEADERS(assert.h errno.h limits.h pthread.h stdbool.h stdlib.h stddef.h stdint.h string.h strings.h sysexits.h unistd.h stdarg.h) AC_CHECK_HEADERS(pwd.h grp.h) AC_CHECK_HEADERS(err.h) AC_CHECK_HEADERS(sys/cdefs.h) AC_CHECK_HEADERS(sys/param.h) AC_CHECK_HEADERS(sys/stat.h) AC_CHECK_HEADERS(sys/socket.h) AC_CHECK_HEADERS(sys/uio.h sys/ioctl.h sys/filio.h) AC_CHECK_HEADERS(sys/mman.h) AC_CHECK_HEADERS(sys/ipc.h) AC_CHECK_HEADERS(ustat.h sys/statfs.h sys/vfs.h sys/statvfs.h) AC_CHECK_HEADERS(sys/mount.h,,, [#include ]) AC_CHECK_HEADERS(arpa/nameser.h netinet/in.h) AC_CHECK_HEADERS(resolv.h,,, [ #include #include #include ]) AC_CHECK_HEADERS(note.h) AC_CHECK_FUNCS(ustat statfs statvfs) AC_CHECK_TYPE(struct statfs) AC_CHECK_TYPE(struct statvfs) AC_CHECK_TYPE(struct fs_data) SM_STATFS_4ARGS AC_C_CONST dnl AC_TYPE_GID_T AC_TYPE_SIZE_T AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(time_t) AC_CHECK_SIZEOF(pid_t) dnl should these be AC_CHECK_TYPES()? AC_CHECK_TYPE(uchar, unsigned char) AC_CHECK_TYPE(byte, unsigned char) AC_CHECK_TYPE(ushort, unsigned short) AC_CHECK_TYPE(uint, unsigned int) AC_CHECK_TYPE(ulong, unsigned long) if test "$ac_cv_sizeof_int" = "4"; then AC_CHECK_TYPE(int32_t, int) AC_CHECK_TYPE(uint32_t, unsigned int) elif test "$ac_cv_sizeof_short" = "4"; then AC_CHECK_TYPE(int32_t, short) AC_CHECK_TYPE(uint32_t, unsigned short) elif test "$ac_cv_sizeof_long" = "4"; then AC_CHECK_TYPE(int32_t, long) AC_CHECK_TYPE(uint32_t, unsigned long) else AC_CHECK_TYPE(int32_t, 'cannot determine 32 bit size') fi if test "$ac_cv_sizeof_int" = "2"; then AC_CHECK_TYPE(int16_t, int) AC_CHECK_TYPE(uint16_t, unsigned int) elif test "$ac_cv_sizeof_short" = "2"; then AC_CHECK_TYPE(int16_t, short) AC_CHECK_TYPE(uint16_t, unsigned short) elif test "$ac_cv_sizeof_long" = "2"; then AC_CHECK_TYPE(int16_t, long) AC_CHECK_TYPE(uint16_t, unsigned long) else AC_CHECK_TYPE(int16_t, 'cannot determine 16 bit size') fi if test "$ac_cv_sizeof_int" = "1"; then AC_CHECK_TYPE(int8_t, int) AC_CHECK_TYPE(uint8_t, unsigned int) elif test "$ac_cv_sizeof_short" = "1"; then AC_CHECK_TYPE(int8_t, short) AC_CHECK_TYPE(uint8_t, unsigned short) elif test "$ac_cv_sizeof_char" = "1"; then AC_CHECK_TYPE(int8_t, char) AC_CHECK_TYPE(uint8_t, unsigned char) else AC_CHECK_TYPE(int8_t, 'cannot determine 8 bit size') fi AC_CHECK_SIZEOF(size_t) SM_UNSIGNED_SIZE_T SM_UNSIGNED_CHAR AC_CHECK_TYPE(uid_t, int) AC_CHECK_TYPE(gid_t, int) AC_CHECK_TYPE(ssize_t, int) AC_CHECK_TYPE(off_t, unsigned long) AC_CHECK_SIZEOF(long long) dnl "type" and "unsigned type" should have the same size... always? AC_CHECK_SIZEOF(unsigned long long) AC_CHECK_SIZEOF(quad_t) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(off_t) if test "$ac_cv_sizeof_int" = "8"; then AC_CHECK_TYPE(int64_t, int) AC_CHECK_TYPE(uint64_t, unsigned int) elif test "$ac_cv_sizeof_short" = "8"; then AC_CHECK_TYPE(int64_t, short) AC_CHECK_TYPE(uint64_t, unsigned short) elif test "$ac_cv_sizeof_long" = "8"; then AC_CHECK_TYPE(int64_t, long) AC_CHECK_TYPE(uint64_t, unsigned long) elif test "$ac_cv_sizeof_long_long" = "8"; then AC_CHECK_TYPE(int64_t, long long) AC_CHECK_TYPE(uint64_t, unsigned long long) else AC_CHECK_TYPE(int64_t, 'cannot determine 64 bit size') fi AC_CHECK_TYPE(caddr_t, char *) SM_SAFE_CTYPE AC_CHECK_TYPES(struct cmsghdr,,,[#include #include ]) SM_MSGHDR_MSG_CONTROL SM_SOCK_UN_SUN_LEN SM_STAT_MEMBER(st_mtime) SM_STAT_MEMBER(st_mtimespec) dnl not really checked in the source code 2005-01-28 dnl SM_RUSAGE_MEMBER(ru_utime) dnl SM_RUSAGE_MEMBER(ru_stime) dnl SM_RUSAGE_MEMBER(ru_maxrss) dnl SM_RUSAGE_MEMBER(ru_ixrss) dnl SM_RUSAGE_MEMBER(ru_idrss) dnl SM_RUSAGE_MEMBER(ru_isrss) dnl SM_RUSAGE_MEMBER(ru_minflt) dnl SM_RUSAGE_MEMBER(ru_majflt) dnl SM_RUSAGE_MEMBER(ru_nswap) dnl SM_RUSAGE_MEMBER(ru_inblock) dnl SM_RUSAGE_MEMBER(ru_oublock) dnl SM_RUSAGE_MEMBER(ru_msgsnd) dnl SM_RUSAGE_MEMBER(ru_msgrcv) dnl SM_RUSAGE_MEMBER(ru_nsignals) dnl SM_RUSAGE_MEMBER(ru_nvcsw) dnl SM_RUSAGE_MEMBER(ru_nivcsw) AC_FUNC_MALLOC SM_FREE_NULL AC_CHECK_FUNCS(memset bzero, break) AC_CHECK_FUNCS(memcpy bcopy, break) AC_CHECK_FUNCS(memmove bcopy, break) AC_CHECK_FUNCS(memcmp) AC_CHECK_FUNCS(getgrgid) AC_CHECK_FUNCS(calloc strchr strrchr) AC_CHECK_FUNCS(select poll, break) AC_CHECK_FUNCS(strerror) dnl defines also HAVE_WORKING_STRERROR_R if it returns char * dnl AC_FUNC_STRERROR_R AC_CHECK_FUNCS(ffs) AC_CHECK_FUNCS(strlcpy strlcat) AC_CHECK_FUNCS(strsep) AC_CHECK_FUNCS(sigprocmask) AC_CHECK_FUNCS(vsyslog syslog_r) AC_CHECK_FUNCS(timegm clock_gettime strptime strftime nanosleep) AC_CHECK_FUNCS(getrlimit) AC_CHECK_FUNCS(closefrom fdwalk) AC_CHECK_FUNCS(lockf) AC_CHECK_FUNCS(fgetln) AC_CHECK_FUNCS(err errx verr verrx warn vwarn) AC_CHECK_FUNCS(vsnprintf asprintf) AC_CHECK_FUNCS(getaddrinfo) SM_TYPE_GETPWNAME_R SM_TYPE_CTIME_R SM_NEED_PROTO([ #include ], strsep)dnl SM_NEED_PROTO([ #include ], strptime)dnl AC_CHECK_TYPE(hrtime_t, int64_t) AC_CHECK_FUNCS(gethrtime gethrvtime) AC_CHECK_FUNCS(moncontrol) SM_STRFTIME_E SM___PROGNAME AC_SUBST(ac_aux_dir) # --- old pthread/bdb place # # Look for sysconf to allow detection of the number of processors. # AC_CHECK_FUNCS(sysconf) ALWAYS_DEFINES="-D_REENTRANT" thread_dir=pthreads # what is this? # dnl AC_SUBST(ALWAYS_DEFINES) # dnl AC_SUBST(ISC_PLATFORM_USETHREADS) # dnl ISC_THREAD_DIR=$thread_dir # dnl AC_SUBST(ISC_THREAD_DIR) # # flockfile is usually provided by pthreads, but we may want to use it # even if compiled with --disable-threads. getc_unlocked might also not # be defined. # AC_CHECK_FUNCS(flockfile) AC_CHECK_FUNCS(getc_unlocked) # # Indicate what the final decision was regarding threads. # AC_MSG_CHECKING(whether to build with threads) if $use_threads; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) # how to stop? we need pthreads! fi # # End of pthreads stuff. # AC_CHECK_HEADERS(openssl/ssl.h) SM_TLS AC_ARG_WITH(sasl-libdir, [ --with-sasl-libdir=DIR Cyrus SASLv2 lib files are in DIR], with_sasl_lib=$withval, with_sasl_lib=/usr/local/lib) AC_ARG_WITH(sasl-incdir, [ --with-sasl-incdir=DIR Cyrus SASLv2 include files are in DIR], with_sasl_inc=$withval, with_sasl_inc=/usr/local/include) SM_SASL AC_ARG_ENABLE(pmilter, [ --enable-pmilter enable pmilter interface (no)], AC_DEFINE(MTA_USE_PMILTER, [1], [Enable pmilter interface?]), []) SM_TINYCDB dnl check libraries for required functions AC_CHECK_LIB(nsl, gethostbyname,, AC_CHECK_LIB(nsl, inet_pton,, AC_CHECK_LIB(nsl, inet_aton))) AC_CHECK_FUNCS(inet_pton inet_aton) AC_CHECK_LIB(socket, connect) AC_CHECK_LIB(resolv, res_query,, AC_CHECK_LIB(resolv, res_nquery,, AC_CHECK_LIB(resolv, __dn_expand))) dnl This is ugly: it may be defined in resolv.h to __res_close. dnl How to check for that? Just write a test program that uses it? AC_CHECK_FUNCS(res_close) SM_SYS_NERR SM_SYS_ERRLIST dnl check for socket functions after checking for socket lib SM_TYPE_ACCEPT SM_TYPE_GETSOCKOPT SM_INET_BLKSIZE SM_FUNC_SNPRINTF SM_NEED_NAMESER_COMPAT_H SM_RES_QUERY_PROTOTYPE SM_SHA AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes) dnl The use of `AC_OUTPUT' with argument is deprecated, this obsoleted dnl interface is equivalent to: dnl AC_CONFIG_FILES(FILE...) dnl AC_CONFIG_COMMANDS([default], EXTRA-CMDS, INIT-CMDS) dnl AC_OUTPUT AC_CONFIG_COMMANDS([sm.check.sh], [chmod +x misc/sm.check.sh]) AC_CONFIG_COMMANDS([sm.setup.sh], [chmod +x misc/sm.setup.sh]) AC_CONFIG_COMMANDS([mailq.sh], [chmod +x misc/mailq.sh]) AC_CONFIG_COMMANDS([qmgrctl.sh], [chmod +x misc/qmgrctl.sh]) dnl do not put statethreads here: it is configured by itself AC_OUTPUT([Makefile librepl/Makefile libmta/Makefile libdns/Makefile libsmmap/Makefile libconf/Makefile libcdb/Makefile libibdb/Makefile libiqdb/Makefile libedb/Makefile libedbc/Makefile libactdb/Makefile libdadb/Makefile libthr/Makefile libevthr/Makefile libpmilter/Makefile smtps/Makefile smtpc/Makefile qmgr/Makefile smar/Makefile mcp/Makefile libcheck/Makefile checks/Makefile check2/Makefile chkmts/Makefile misc/Makefile perf/Makefile doc/Makefile man/Makefile contrib/Makefile misc/sm.setup.sh misc/sm.check.sh misc/mailq.sh misc/qmgrctl.sh], [test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in]) # @end1