configure.in   [plain text]


dnl jabberd2 configure script
dnl $Id: configure.in,v 1.1 2006/03/14 23:27:24 peralta Exp $

dnl
dnl autoconf setup
dnl

AC_PREREQ(2.57)

dnl startup
AC_INIT(jabberd, 2.0s9)
AM_INIT_AUTOMAKE

dnl copyright
AC_COPYRIGHT([Copyright (c) 2002-2004 Robert Norris
This configure script may be copied, distributed and modified under the
terms of the jabberd license; see COPYING for more details.])

dnl identify the source tree
AC_CONFIG_SRCDIR(sx/sx.h)

dnl output config header
AM_CONFIG_HEADER(config.h)


dnl
dnl build environment setup
dnl

dnl developer flags
AC_ARG_ENABLE(developer, AC_HELP_STRING([--enable-developer], [Compile with warnings and debugging symbols]),
              CFLAGS="-Wall -g $CFLAGS")

dnl basic tools
AC_PROG_CC
AC_PROG_MAKE_SET

dnl need libtool for internal linking
AC_DISABLE_STATIC
AC_PROG_LIBTOOL

dnl use libtool to compile checks
ac_link="${SHELL} ${srcdir}/libtool --mode=link $ac_link"


dnl
dnl extra paths
dnl

AC_ARG_WITH(extra_include_path, AC_HELP_STRING([--with-extra-include-path],
                                           [use additional include paths]),
            extra_include_path=$withval)
split_includes="`echo $extra_include_path | sed -e 's/:/ /g'`"
for incpath in $split_includes ; do
    CPPFLAGS="-I$incpath $CPPFLAGS"
done

AC_ARG_WITH(extra_library_path, AC_HELP_STRING([--with-extra-library-path],
                                               [use additional library paths]),
            extra_library_path=$withval)
split_libs="`echo $extra_library_path | sed -e 's/:/ /g'`"
for libpath in $split_libs ; do
    LDFLAGS="-L$libpath $LDFLAGS"
done

dnl
dnl header checks
dnl
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_TIME

# Two-step header checking.  First check for headers which don't
# require any other headers.
AC_CHECK_HEADERS( \
    arpa/inet.h \
    arpa/nameser.h \
    fcntl.h \
    netinet/in.h \
    signal.h \
    sys/filio.h \
    sys/ioctl.h \
    sys/types.h \
    sys/socket.h \
    sys/stat.h \
    sys/time.h \
    sys/timeb.h \
    sys/utsname.h \
    syslog.h \
    unistd.h \
    windows.h \
    winsock2.h)

# Now check for those headers that do, including all the required
# headers.
AC_CHECK_HEADERS(resolv.h windns.h,,,
[#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif])


dnl
dnl quirky functions
dnl

AC_CHECK_FUNC(connect, ,[AC_CHECK_LIB(socket, connect)])
AC_CHECK_LIB(ws2_32, _head_libws2_32_a)
AC_CHECK_FUNC(gethostbyname, ,[AC_CHECK_LIB(resolv, gethostbyname)])
AC_CHECK_FUNC(gethostbyname, ,[AC_CHECK_LIB(nsl, gethostbyname)])

if test "x$ac_cv_lib_nsl_gethostbyname" != "xyes" && test "x$ac_cv_func_gethostbyname" != "xyes" ; then
  AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(socket, gethostbyname)])
fi

if test "$ac_cv_lib_nsl_gethostbyname" = "$ac_cv_func_gethostbyname" ; then
  AC_MSG_CHECKING([if we can include libnsl + libsocket])
  LIBS="-lnsl -lsocket $LIBS"
  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[(void) gethostbyname]])],[my_ac_link_result=yes],[my_ac_link_result=no ])
  if test "$my_ac_link_result" = "no" ; then
    AC_MSG_RESULT([failure])
    AC_MSG_ERROR([unable to use gethostbyname()])
  else
    AC_MSG_RESULT([success])
  fi
fi

dnl res_query has been seen in libc, libbind and libresolv
if test "x-$ac_cv_header_resolv_h" = "x-yes" ; then
    AC_CHECK_FUNCS(res_query)
    if test "x-$ac_cv_func_res_query" = "x-yes" ; then
        have_res_query=yes
    else
        AC_CHECK_LIB(resolv, res_query)
        if test "x-$ac_cv_lib_resolv_res_query" = "x-yes" ; then
            have_res_query=yes
        else
            AC_CHECK_LIB(bind, res_query)
            if test "x-$ac_cv_lib_bind_res_query" = "x-yes" ; then
                have_res_query=yes
            else
                dnl some glibcs have res_query as a macro, so work around it
                AC_MSG_CHECKING([for res_query in -lresolv (alternate version)])
                save_libs="$LIBS"
                LIBS="-lresolv $LIBS"
                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <resolv.h>]],
                                                [[res_query(0,0,0,0,0)]])],
                               [AC_MSG_RESULT(yes)
                                have_res_query=yes],
                               [AC_MSG_RESULT(no)
                                LIBS="$save_libs"])
            fi
        fi
    fi
fi

dnl windows calls it DnsQuery
if test "x-$ac_cv_header_windns_h" = "x-yes" ; then
    AC_MSG_CHECKING([for DnsQuery in -ldnsapi])
    save_libs="$LIBS"
    LIBS="-ldnsapi $LIBS"
    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <windows.h>
                                      #include <windns.h>]],
                                    [[DnsQuery(0,0,0,0,0,0)]])],
                   [AC_MSG_RESULT(yes)
                    have_dnsquery=yes],
                   [AC_MSG_RESULT(no)
                    LIBS="$save_libs"])
fi

if test "x-$have_res_query" = "x-yes" ; then
    AC_DEFINE(HAVE_RES_QUERY,1,[Define to 1 if you have the 'res_query' function.])
elif test "x-$have_dnsquery" = "x-yes" ; then
    AC_DEFINE(HAVE_DNSQUERY,1,[Define to 1 if you have the 'DnsQuery' function.])
else
    AC_MSG_ERROR([no DNS resolver interface (res_query or DnsQuery) found])
fi

dnl inet_ntop/inet_pton have been seen in -lnsl, and sometimes not at all
AC_CHECK_FUNC(inet_ntop, ,[AC_CHECK_LIB(nsl, inet_ntop)])
unset ac_cv_func_inet_ntop
AC_CHECK_FUNCS(inet_ntop inet_pton)

dnl some glibcs have broken sockaddr_storage members
if test "x-$ac_cv_type_struct_sockaddr_storage" = "x-yes" ; then
    AC_MSG_CHECKING(for broken __ss_family member in struct sockaddr_storage)
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(_IP6_INCLUDES,
                                       [[do {
                                             struct sockaddr_storage s;
                                             s.__ss_family = 0;
                                         } while(0)]])],
                      [AC_MSG_RESULT(yes)
                       AC_DEFINE(ss_family, __ss_family,
                                 [Define to '__ss_family' if 'struct sockaddr_storage' defines '__ss_family' instead of 'ss_family'.])],
                      AC_MSG_RESULT(no))

    AC_MSG_CHECKING(for broken __ss_len member in struct sockaddr_storage)
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(_IP6_INCLUDES,
                                       [[do {
                                             struct sockaddr_storage s;
                                             s.__ss_len = 0;
                                         } while(0)]])],
                      [AC_MSG_RESULT(yes)
                       AC_DEFINE(ss_len, __ss_len,
                                 [Define to '__ss_len' if 'struct sockaddr_storage' defines '__ss_len' instead of 'ss_len'.])],
                      AC_MSG_RESULT(no))
fi


dnl syslog
if test "x-$ac_cv_header_syslog_h" = "x-yes" ; then
    AC_CHECK_FUNCS(syslog)
fi

if test "x-$ac_cv_header_windows_h" = "x-yes" ; then
    AC_MSG_CHECKING(for ReportEvent)
    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <windows.h>]],
                                    [[ReportEvent(0,0,0,0,0,0,0,0,0)]])],
                   [AC_MSG_RESULT(yes)
                    AC_DEFINE(HAVE_REPORTEVENT,1,[Define to 1 if you have the 'ReportEvent' function.])],
                   AC_MSG_RESULT(no))
fi


dnl snprintf/vsnprintf don't exist everywhere. additionally, we require
dnl them to gracefully accept NULLs, which is non-standard
AC_CHECK_FUNCS(snprintf vsnprintf)
if test "x-$ac_cv_func_snprintf" = "x-yes" ; then
    AC_MSG_CHECKING([if snprintf can handle NULL arguments])
    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
                                    #include <signal.h>
                                    segv() { exit(1); }
                                    main() { char b[10]; signal(SIGSEGV,segv); snprintf(b,10,"%s",NULL); exit(0); }]])],
                  AC_MSG_RESULT(yes),
                  [AC_MSG_RESULT(no)
                   AC_DEFINE(HAVE_BROKEN_SNPRINTF,1,[Define to 1 if 'snprintf' cannot handle NULL arguments.])])
fi
if test "x-$ac_cv_func_vsnprintf" = "x-yes" ; then
    AC_MSG_CHECKING([if vsnprintf can handle NULL arguments])
    AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
                                    #include <signal.h>
                                    #include <stdarg.h>
                                    segv() { exit(1); }
                                    expand(char *f,...) { va_list ap; char b[10]; va_start(ap,f); vsnprintf(b,10,f,ap); va_end(ap); }
                                    main() { char b[10]; signal(SIGSEGV,segv); expand("%s", NULL); exit(0); }]])],
                  AC_MSG_RESULT(yes),
                  [AC_MSG_RESULT(no)
                   AC_DEFINE(HAVE_BROKEN_VSNPRINTF,1,[Define to 1 if 'vsnprintf' cannot handle NULL arguments.])])
fi


dnl
dnl external packages
dnl

dnl find libidn >= 0.3.0
AC_ARG_ENABLE(idn, AC_HELP_STRING([--enable-idn], [enable IDN support (yes)]), want_idn=$enableval, want_idn=yes)
if test "x-$want_idn" = "x-yes" ; then
    AC_CHECK_HEADERS(stringprep.h)
    if test "x-$ac_cv_header_stringprep_h" = "x-yes" ; then
        AC_CHECK_LIB(idn, stringprep_check_version)
    fi
    if test "x-$ac_cv_lib_idn_stringprep_check_version" = "x-yes" ; then
        AC_MSG_CHECKING(for Libidn version >= 0.3.0)
        AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <stringprep.h>]],
                                       [[return !(stringprep_check_version("0.3.0"))]])],
                      [AC_MSG_RESULT(yes)
                        have_idn=yes],
                      AC_MSG_RESULT(no))
    fi
    if test "x-$have_idn" = "x-" ; then
        AC_MSG_ERROR([Libidn >= 0.3.0 not found])
    fi

    AC_DEFINE(HAVE_IDN,1,[Define to 1 if Libidn is available.])
fi


AC_CHECK_LIB(sasl2,sasl_client_init)

dnl find openssl >= 0.9.6b
AC_ARG_ENABLE(ssl, AC_HELP_STRING([--enable-ssl], [enable SSL/TLS support (yes)]), want_ssl=$enableval, want_ssl=yes)
if test "x-$want_ssl" = "x-yes" ; then
    AC_CHECK_HEADERS(openssl/crypto.h)
    if test "x-$ac_cv_header_openssl_crypto_h" = "x-yes" ; then
        AC_CHECK_LIB(crypto, CRYPTO_lock)
    fi
    if test "x-$ac_cv_lib_crypto_CRYPTO_lock" = "x-yes" ; then
        AC_CHECK_HEADERS(openssl/ssl.h)
    fi
    if test "x-$ac_cv_header_openssl_ssl_h" = "x-yes" ; then
        AC_CHECK_LIB(ssl, SSL_connect)
    fi
    if test "x-$ac_cv_lib_ssl_SSL_connect" = "x-yes" ; then
        AC_MSG_CHECKING(for OpenSSL version >= 0.9.6b)
        AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <openssl/opensslv.h>]],
                                       [[return !(SSLeay() >= 0x000906020L)]])],
                      [AC_MSG_RESULT(yes)
                       have_openssl=yes],
                      AC_MSG_RESULT(no))
    fi
    if test "x-$have_openssl" = "x-" ; then
        AC_MSG_ERROR([OpenSSL >= 0.9.6b not found])
    fi

    AC_DEFINE(HAVE_SSL,1,[Define to 1 if OpenSSL is available.])
fi


dnl
dnl optional libs
dnl

dnl mysql
AC_ARG_ENABLE(mysql, AC_HELP_STRING([--enable-mysql], [enable MySQL auth/reg/storage support (yes)]),
              want_mysql=$enableval, want_mysql=yes)
if test "x-$want_mysql" = "x-yes" ; then
    AC_CHECK_HEADERS(mysql.h)
    if test "x-$ac_cv_header_mysql_h" != "x-yes" ; then
        for incpath in /usr/include/mysql /usr/local/include/mysql; do
            if test "x-$ac_cv_header_mysql_h" != "x-yes" ; then
                AC_MSG_CHECKING([for mysql.h in $incpath])
                save_cppflags="$CPPFLAGS"
                CPPFLAGS="-I$incpath $CPPFLAGS"
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mysql.h>]])],
                                  [AC_MSG_RESULT(yes)
                                   AC_DEFINE(HAVE_MYSQL_H,,[Define if you have mysql.h])
                                   ac_cv_header_mysql_h=yes],
                                  AC_MSG_RESULT(no))
                if test "x-$ac_cv_header_mysql_h" != "x-yes" ; then
                    CPPFLAGS="$save_cppflags"
                fi
            fi
        done
    fi
    if test "x-$ac_cv_header_mysql_h" = "x-yes" ; then
        AC_CHECK_LIB(mysqlclient, mysql_init)
    fi
    if test "x-$ac_cv_lib_mysqlclient_mysql_init" != "x-yes" ; then
        AC_MSG_ERROR([MySQL client libraries not found])
    else
        AC_DEFINE(STORAGE_MYSQL,1,[Define to 1 if you want to use MySQL for auth/reg/storage.])
    fi
fi


dnl postgresql
AC_ARG_ENABLE(pgsql, AC_HELP_STRING([--enable-pgsql], [enable PostgreSQL auth/reg/storage support (no)]),
              want_pgsql=$enableval, want_pgsql=no)
if test "x-$want_pgsql" = "x-yes" ; then
    AC_CHECK_HEADERS(libpq-fe.h)
    if test "x-$ac_cv_header_libpq_fe_h" != "x-yes" ; then
        for incpath in /usr/include/postgresql /usr/local/include/postgresql; do
            if test "x-$ac_cv_header_libpq_fe_h" != "x-yes" ; then
                AC_MSG_CHECKING([for libpq-fe.h in $incpath])
                save_cppflags="$CPPFLAGS"
                CPPFLAGS="-I$incpath $CPPFLAGS"
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libpq-fe.h>]])],
                                  [AC_MSG_RESULT(yes)
                                   AC_DEFINE(HAVE_LIBPQ_FE_H,,[Define if you have libpq_fe.h])
                                   ac_cv_header_libpq_fe_h=yes],
                                  AC_MSG_RESULT(no))
                if test "x-$ac_cv_header_libpq_fe_h" != "x-yes" ; then
                    CPPFLAGS="$save_cppflags"
                fi
            fi
        done
    fi
    if test "x-$ac_cv_header_libpq_fe_h" = "x-yes" ; then
        AC_CHECK_LIB(pq, PQsetdbLogin)
    fi
    if test "x-$ac_cv_lib_pq_PQsetdbLogin" != "x-yes" ; then
        AC_MSG_ERROR([PostgreSQL client libraries not found])
    else
        AC_DEFINE(STORAGE_PGSQL,1,[Define to 1 if you want to use PostgreSQL for auth/reg/storage.])
    fi
fi


dnl SQLite 3
AC_ARG_ENABLE(sqlite, AC_HELP_STRING([--enable-sqlite], [enable SQLite 3 storage support (no)]),
              want_sqlite=$enableval, want_sqlite=no)
if test "x-$want_sqlite" = "x-yes" ; then
    AC_CHECK_HEADERS(sqlite3.h)
    if test "x-$ac_cv_header_sqlite3_h" = "x-yes" ; then
        AC_CHECK_LIB(sqlite3, sqlite3_open)
    fi
    if test "x-$ac_cv_lib_sqlite3_sqlite3_open" != "x-yes" ; then
        AC_MSG_ERROR([SQLite 3 library not found])
    else
        AC_DEFINE(STORAGE_SQLITE,1,[Define to 1 if you want to use SQLite 3 for storage.])
    fi
fi


dnl berkeley db
AC_ARG_ENABLE(db, AC_HELP_STRING([--enable-db], [enable Berkeley DB auth/reg/storage support (no)]),
              want_db=$enableval, want_db=no)
if test "x-$want_db" = "x-yes" ; then
    AC_CHECK_HEADERS(db.h)
    if test "x-$ac_cv_header_db_h" = "x-yes" ; then
        for lib in db-4.2 db-4.1 db-4 db4 db ; do
            if test "x-$have_db_version" != "x-yes" ; then
                AC_MSG_CHECKING([for db_create in -l$lib])
                save_libs="$LIBS"
                LIBS="-l$lib $LIBS"
                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <db.h>]],
                                                [[db_create(0,0,0)]])],
                               [AC_MSG_RESULT(yes)
                                AC_MSG_CHECKING(for Berkeley DB version >= 4.1.25)
                                AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <db.h>]],
                                                               [[do {
                                                                     int major, minor, patch;
                                                                     db_version(&major, &minor, &patch);
                                                                     if(major < 4 ||
                                                                         (major == 4 && minor < 1) ||
                                                                         (major == 4 && minor == 1 && patch < 24))
                                                                         return 1;
                                                                 } while(0)]])],
                                              [AC_MSG_RESULT(yes)
                                               have_db_version=yes],
                                              AC_MSG_RESULT(no))],
                                AC_MSG_RESULT(no))
                if test "x-$have_db_version" = "x-" ; then
                    LIBS="$save_libs"
                fi
            fi
        done
    fi
    if test "x-$have_db_version" != "x-yes" ; then
        AC_MSG_ERROR([Berkeley DB >= 4.1.24 not found])
    else
        AC_DEFINE(STORAGE_DB,1,[Define to 1 if you want to use Berkeley DB for auth/reg/storage.])
    fi
fi


dnl openldap
AC_ARG_ENABLE(ldap, AC_HELP_STRING([--enable-ldap], [enable OpenLDAP auth/reg support (no)]),
              want_ldap=$enableval, want_ldap=no)
if test "x-$want_ldap" = "x-yes" ; then
    AC_CHECK_HEADERS(lber.h ldap.h)
    if test "x-$ac_cv_header_ldap_h" = "x-yes" -a "x-$ac_cv_header_lber_h" = "x-yes" ; then
        AC_CHECK_LIB(lber, ber_alloc)
        AC_CHECK_LIB(ldap, ldap_init)
    fi
    if test "x-$ac_cv_lib_lber_ber_alloc" = "x-yes" -a "x-$ac_cv_lib_ldap_ldap_init" = "x-yes" ; then
        AC_MSG_CHECKING(for OpenLDAP version >= 2.1.0)
        AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <lber.h>
                                         #include <ldap.h>]],
                                       [[do {
                                             LDAPAPIInfo info;
                                             info.ldapai_info_version = LDAP_API_INFO_VERSION;
                                             ldap_get_option(0, LDAP_OPT_API_INFO, &info);
                                             if(info.ldapai_vendor_version != LDAP_VENDOR_VERSION || LDAP_VENDOR_VERSION < 2004)
                                                 return 1;
                                         } while(0)]])],
                                       [AC_MSG_RESULT(yes)
                                        have_ldap_version=yes],
                                       AC_MSG_RESULT(no))
    fi
    if test "x-$want_ldap" = "x-yes" -a "x-$have_ldap_version" = "x-" ; then
        AC_MSG_ERROR([OpenLDAP client libraries >= 2.1.0 not found])
    else
        AC_DEFINE(STORAGE_LDAP,1,[Define to 1 if you want to use OpenLDAP for auth/reg.])
    fi
fi


dnl pam
AC_ARG_ENABLE(pam, AC_HELP_STRING([--enable-pam], [enable PAM auth/reg support (no)]),
              want_pam=$enableval, want_pam=no)
if test "x-$want_pam" = "x-yes" ; then
    AC_CHECK_HEADERS(security/pam_appl.h)
    if test "x-$ac_cv_header_security_pam_appl_h" = "x-yes" ; then
        AC_CHECK_LIB(pam, pam_start)
    fi
    if test "x-$ac_cv_lib_pam_pam_start" != "x-yes" ; then
        AC_MSG_ERROR([PAM application libraries not found])
    else
        AC_DEFINE(STORAGE_PAM,1,[Define to 1 if you want to use PAM for auth/reg.])
    fi
fi


dnl pipe (not really an external package, but does need some checks)
AC_ARG_ENABLE(pipe, AC_HELP_STRING([--enable-pipe], [enable pipe auth/reg support (no)]),
              want_pipe=$enableval, want_pipe=no)
if test "x-$want_pipe" = "x-yes" ; then
    AC_CHECK_HEADERS(sys/wait.h)
    AC_FUNC_FORK
    AC_CHECK_FUNCS(pipe wait)
    if test "x-$ac_cv_header_sys_wait_h" != "x-yes" -o \
            "x-$ac_cv_func_fork" != "x-yes" -o \
            "x-$ac_cv_func_pipe" != "x-yes" -o \
            "x-$ac_cv_func_wait" != "x-yes" ; then
        AC_MSG_ERROR([Pipe auth/reg requirements (sys/wait.h, fork(), pipe(), wait()) not found])
    else
        AC_DEFINE(STORAGE_PIPE,1,[Define to 1 if you want to use pipes for auth/reg.])
    fi
fi


dnl anon
AC_ARG_ENABLE(anon, AC_HELP_STRING([--enable-anon], [enable anonymous auth/reg support (no)]),
              want_anon=$enableval, want_anon=no)
if test "x-$want_anon" = "x-yes" ; then
    AC_DEFINE(STORAGE_ANON,1,[Define to 1 if you want anonymous auth.])
fi


dnl filesystem storage
AC_ARG_ENABLE(fs, AC_HELP_STRING([--enable-fs], [enable filesystem storage support (no)]),
              want_fs=$enableval, want_fs=no)
if test "x-$want_fs" = "x-yes" ; then
    AC_DEFINE(STORAGE_FS,1,[Define to 1 if you want to use the filesystem for storage.])
fi

dnl Oracle
AC_ARG_WITH(oracle-home,
	[ --with-oracle-home=DIR   the Oracle home directory, for includes and libs. ],
	[ ac_oracle_home="$withval" ])

AC_ARG_ENABLE(oracle, AC_HELP_STRING([--enable-oracle], [enable Oracle auth/reg/storage support (no)]),
              want_oracle=$enableval, want_oracle=no)
if test "x-$want_oracle" = "x-yes" ; then
    AC_CHECK_HEADERS(oci.h)
    if test "x-$ac_cv_header_oci_h" != "x-yes" ; then
       if test -n $ac_oracle_home ; then
	  AC_MSG_CHECKING([for oci.h in $ac_oracle_home])
                save_cppflags="$CPPFLAGS"
                CPPFLAGS="-I$ac_oracle_home/rdbms/demo -I$ac_oracle_home/rdbms/public $CPPFLAGS"
                save_libs="$LIBS"
                LIBS="-L$ac_oracle_home/lib $LIBS"
                save_ldflags="$LDFLAGS"
                LDFLAGS="-Wl,-rpath,$ac_oracle_home/lib $LDFLAGS"
                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <oci.h>]])],
                                  [AC_MSG_RESULT(yes)
                                   AC_DEFINE(HAVE_OCI_H,,[Define if you have oci.h])
                                   ac_cv_header_oci_h=yes],
                                  AC_MSG_RESULT(no))
                if test "x-$ac_cv_header_oci_h" != "x-yes" ; then
                    CPPFLAGS="$save_cppflags"
                    LIBS="$save_libs"
		     LDFLAGS="$save_ldflags"
                fi
       fi
    fi
    if test "x-$ac_cv_header_oci_h" = "x-yes" ; then
        AC_CHECK_LIB(clntsh, OCIInitialize)
    fi
    if test "x-$ac_cv_lib_clntsh_OCIInitialize" != "x-yes" ; then
        AC_MSG_ERROR([Oracle client libraries not found])
    else
        AC_DEFINE(STORAGE_ORACLE,1,[Define to 1 if you want to use Oracle for auth/reg/storage.])
    fi
fi



dnl
dnl generic system types
dnl
AC_CREATE_STDINT_H(ac-stdint.h)




dnl
dnl typedefs, structs, compiler quirks
dnl
AC_TYPE_MODE_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_STRUCT_TM
AC_STRUCT_TIMEZONE


dnl
dnl ipv6 stuff
dnl
AC_DEFUN([_IP6_INCLUDES],[[
#include "ac-stdint.h"
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
]])

dnl these types are missing in places
AC_CHECK_TYPES([in_port_t, sa_family_t, struct sockaddr_storage, struct sockaddr_in6, struct in6_addr],,, _IP6_INCLUDES)


dnl
dnl mio backend checks
dnl
AC_ARG_ENABLE(mio, AC_HELP_STRING([--enable-mio=BACKEND], [use BACKEND to drive MIO]), 
              mio_check=$enableval, mio_check='poll select')

mio_backend=''
for backend in $mio_check ; do
    if test "x-$mio_backend" = "x-" ; then
        case x-$backend in

            x-poll)
                AC_CHECK_HEADERS(poll.h)
                if test "x-$ac_cv_header_poll_h" = "x-yes" ; then
                    AC_CHECK_FUNCS(poll,[
                        mio_backend='poll'
                        AC_DEFINE(MIO_POLL,1,[Define to 1 if you want to use 'poll' for non-blocking I/O.])])
                fi
                ;;

            x-select)
                AC_CHECK_HEADERS(sys/select.h)
                if test "x-$ac_cv_header_sys_select_h" = "x-yes" ; then
                    AC_CHECK_FUNCS(select, have_select=yes)
                fi

                if test "x-$have_select" != "x-yes" -a "x-$ac_cv_header_winsock2_h" = "x-yes" ; then
                    AC_MSG_CHECKING([for select in ws2_32])
                    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <winsock2.h>]],
                                                    [[select(0,0,0,0,0)]])],
                                   [AC_MSG_RESULT(yes)
                                    have_select=yes],
                                   AC_MSG_RESULT(no))
                fi

                if test "x-$have_select" = "x-yes" ; then
                    mio_backend='select'
                    AC_DEFINE(MIO_SELECT,1,[Define to 1 if you want to use 'select' for non-blocking I/O.])
                fi
                ;;
        esac
    fi
done

if test "x-$mio_backend" = "x-" ; then
    AC_MSG_ERROR([no MIO backend available out of: $backend])
fi


dnl functions we need
AC_FUNC_MALLOC
AC_FUNC_MEMCMP
AC_FUNC_MKTIME
AC_FUNC_REALLOC
AC_FUNC_STAT
AC_FUNC_VPRINTF
AC_CHECK_FUNCS( \
    close \
    dup2 \
    fcntl \
    inet_aton \
    ioctl \
    isascii \
    _findfirst \
    getopt \
    gettimeofday \
    getpid \
    _getpid \
    memchr \
    memmove \
    memset \
    mkdir \
    _mkdir \
    modf \
    sleep \
    Sleep \
    strcasecmp \
    stricmp \
    strchr \
    strdup \
    strerror \
    strncasecmp \
    strnicmp \
    strstr \
    tzset \
    uname \
    getpagesize )

dnl windows has different names for a few basic things
if test "x-$ac_cv_func_getpid" != "x-yes" -a "x-$ac_cv_func__getpid" = "x-yes" ; then
    AC_DEFINE(getpid,_getpid,[Define to a function than can provide getpid(2) functionality.])
fi

if test "x-$ac_cv_func_sleep" != "x-yes" -a "x-$ac_cv_func_Sleep" = "x-yes" ; then
    AC_DEFINE(sleep,Sleep,[Define to a function than can provide sleep(2) functionality.])
fi

if test "x-$ac_cv_func_strcasecmp" != "x-yes" -a "x-$ac_cv_func_stricmp" = "x-yes" ; then
    AC_DEFINE(strcasecmp,stricmp,[Define to a function than can provide strcasecmp(3) functionality.])
fi

if test "x-$ac_cv_func_strncasecmp" != "x-yes" -a "x-$ac_cv_func_strnicmp" = "x-yes" ; then
    AC_DEFINE(strncasecmp,strnicmp,[Define to a function than can provide strncasecmp(3) functionality.])
fi

dnl winsock substitutions
if test "x-$ac_cv_func_close" != "x-yes" ; then
    AC_MSG_CHECKING(for closesocket)
    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <winsock2.h>]],
                                    [[closesocket(0)]])],
                   [AC_MSG_RESULT(yes)
                    AC_DEFINE(close,closesocket,[Define to a function than can provide close(2) functionality.])],
                    AC_DEFINE(HAVE_CLOSE,1,[Define to 1 if you have the 'close' function.])
                   AC_MSG_RESULT(no))
fi

if test "x-$ac_cv_func_ioctl" != "x-yes" ; then
    AC_MSG_CHECKING(for ioctlsocket)
    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <winsock2.h>]],
                                    [[ioctlsocket(0,0,0)]])],
                   [AC_MSG_RESULT(yes)
                    AC_DEFINE(ioctl,ioctlsocket,[Define to a function than can provide ioctl(2) functionality.])],
                    AC_DEFINE(HAVE_IOCTL,1,[Define to 1 if you have the 'ioctl' function.])
                   AC_MSG_RESULT(no))
fi


dnl
dnl debugging
dnl
AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [enable debug messages]),
              want_debug=$enableval, want_debug=no)
if test "x-$want_debug" = "x-yes" ; then
    AC_DEFINE(DEBUG,1,[Define to 1 if you want to get debug output with -D.])
    AC_DEFINE(SX_DEBUG,1,[Define to 1 if you want to get SX debug output with -D.])
fi

AC_ARG_ENABLE(nad_debug, AC_HELP_STRING([--enable-nad-debug], [enable NAD pointer tracking]),
              want_nad_debug=$enableval, want_nad_debug=no)
if test "x-$want_nad_debug" = "x-yes" ; then
    AC_DEFINE(NAD_DEBUG,1,[Define to 1 if you want to enable NAD pointer tracking.])
fi

AC_ARG_ENABLE(pool_debug, AC_HELP_STRING([--enable-pool-debug], [enable memory pool statistics]),
              want_pool_debug=$enableval, want_pool_debug=no)
if test "x-$want_pool_debug" = "x-yes" ; then
    AC_DEFINE(POOL_DEBUG,1,[Define to 1 if you want to enable memory pool statistics.])
fi


dnl
dnl finishing up
dnl

dnl put our config in its own subdir
sysconfdir="$sysconfdir/jabberd"

dnl done!
AC_OUTPUT(Makefile \
          etc/Makefile \
          etc/templates/Makefile \
          tools/Makefile \
          man/Makefile \
          expat/Makefile \
          mio/Makefile \
          subst/Makefile \
          sx/Makefile \
          util/Makefile \
          c2s/Makefile \
          resolver/Makefile \
          router/Makefile \
          s2s/Makefile \
          sm/Makefile \
          Doxyfile)