-pre3 (sigh)
[freeradius.git] / configure.in
index 52eb2c4..0596cd0 100644 (file)
@@ -24,8 +24,10 @@ AC_INIT(src/main/radiusd.c)
 AC_CONFIG_HEADER(src/include/autoconf.h)
 AC_REVISION($Revision$)dnl
 
-dnl # The version of the software, first beta, is 0.1
-RADIUSD_VERSION=0.1
+dnl # The version of the software
+RADIUSD_MAJOR_VERSION=0
+RADIUSD_MINOR_VERSION=9.0-pre3
+RADIUSD_VERSION="${RADIUSD_MAJOR_VERSION}.${RADIUSD_MINOR_VERSION}"
 
 dnl #############################################################
 dnl #
@@ -39,8 +41,17 @@ AC_PROG_GCC_TRADITIONAL
 AC_PROG_CC_SUNPRO
 AC_PROG_RANLIB
 
+dnl # autoconf 2.50 and later
+dnl # AC_SYS_LARGEFILE
+
 PACKAGE=freeradius
 
+dnl #
+dnl # check for AIX, to allow us to use some BSD functions
+dnl # must be before macros that call the compiler.
+dnl #
+AC_AIX
+
 dnl Find GNU Make.
 AC_CHECK_PROG(GMAKE, gmake, yes, no)
 if test $GMAKE = no; then
@@ -57,11 +68,20 @@ fi
 dnl libltdl is installable
 AC_LIBLTDL_INSTALLABLE
 
-dnl ensure that we're looking for dlopen
-AC_LIBTOOL_DLOPEN
+dnl use system-wide libtool, if it exists
+AC_ARG_WITH(system-libtool, 
+[  --with-system-libtool              try to use libtool installed in your system [default=use our own]],
+[ AC_PATH_PROG(LIBTOOL, libtool,,$PATH:/usr/local/bin) ],
+[
+  LIBTOOL="`pwd`/libtool"
+  AC_SUBST(LIBTOOL)
+  dnl ensure that we're looking for dlopen
+  AC_LIBTOOL_DLOPEN
+
+  dnl Figure out how to build shared libraries
+  AC_PROG_LIBTOOL
+])
 
-dnl Figure out how to build shared libraries
-AC_PROG_LIBTOOL
 
 dnl Put this in later, when all distributed modules use autoconf.
 dnl AC_ARG_WITH(disablemodulefoo,
@@ -73,12 +93,6 @@ dnl  awk '{print "                            "$0}']))
 AC_ARG_ENABLE(strict-dependencies,
 [  --enable-strict-dependencies  Fail configure on lack of module dependancy.])
 
-AC_ARG_WITH(fooincludedir,
-[  --with-FOO-include-dir=DIR   Dir for includes for FOO, module dependancy.])
-
-AC_ARG_WITH(foolibdir,
-[  --with-FOO-lib-dir=DIR  Dir for libraries for FOO, module dependancy.])
-
 dnl extra argument: --with-logdir
 logdir='${localstatedir}/log/radius'
 AC_MSG_CHECKING(logdir)
@@ -136,21 +150,6 @@ AC_ARG_WITH(raddbdir,
 AC_SUBST(raddbdir)
 AC_MSG_RESULT($raddbdir)
 
-dnl extra argument: --with-dict-nocase
-WITH_DICT_NOCASE=yes
-AC_ARG_WITH(dict-nocase,
-[  --with-dict-nocase      Make dictionary case-independant (default=yes)],
-[  case "$withval" in
-    yes)
-       ;;
-    *)
-       WITH_DICT_NOCASE=""
-  esac ]
-)
-if test "X$WITH_DICT_NOCASE" = "Xyes"; then
-  AC_DEFINE(WITH_DICT_NOCASE)
-fi
-
 dnl extra argument: --with-ascend-binary
 ASCEND_BINARY=yes
 AC_ARG_WITH(ascend-binary,
@@ -178,19 +177,6 @@ AC_ARG_WITH(threads,
   esac ]
 )
 
-dnl extra argument: --with-thread-pool
-WITH_THREAD_POOL=no
-AC_ARG_WITH(thread-pool,
-[  --with-thread-pool      Use a pool of threads for high-load systems.  (default=no) ],
-[ case "$withval" in
-    yes)
-       WITH_THREAD_POOL=yes
-       ;;
-    *)
-        ;;
-  esac ]
-)
-
 dnl extra argument: --with-snmp
 WITH_SNMP=yes
 AC_ARG_WITH(snmp,
@@ -203,13 +189,27 @@ AC_ARG_WITH(snmp,
   esac ]
 )
 
-AC_ARG_ENABLE(ltdl-install,
-[  --disable-ltdl-install  do not install libltdl])
-if test x"${enable_ltdl_install+set}" != xset; then
-  enable_ltdl_install=yes
-  ac_configure_args="$ac_configure_args --enable-ltdl-install"
-fi
-AC_CONFIG_SUBDIRS(libltdl)
+dnl extra argument: --with-large-files
+rad_enable_largefiles=no
+AC_ARG_WITH(large-files,
+[  --with-large-files      Compile in large (2G+) file support. (default=no)],
+[ case "$withval" in
+    yes)
+        rad_enable_largefiles=yes
+       ;;
+    *)
+       ;;
+  esac ]
+)
+
+
+dnl AC_ARG_ENABLE(ltdl-install,
+dnl [  --disable-ltdl-install  do not install libltdl])
+dnl if test x"${enable_ltdl_install+set}" != xset; then
+dnl   enable_ltdl_install=yes
+dnl   ac_configure_args="$ac_configure_args --enable-ltdl-install"
+dnl fi
+dnl AC_CONFIG_SUBDIRS(libltdl)
 
 dnl #
 dnl #  Allow the user to specify a list of modules to be linked
@@ -227,12 +227,12 @@ dnl #
 dnl #  Enable developer C compiler warnings
 dnl #
 AC_ARG_ENABLE(developer,
-[  --enable-developer      Turns on flags of interest to developers.],
-[ case "$withval" in
-    *)
+[  --enable-developer               Enables features of interest to developers.],
+[ case "$enableval" in
+    no)
        developer=no
        ;;
-    yes)
+    *)
        developer=yes
   esac ]
 )
@@ -242,6 +242,46 @@ if test "x$developer" != "xno" -a -d $srcdir/CVS; then
   developer="yes"
 fi
 
+dnl extra argument: --with-experimental-modules
+EXPERIMENTAL=
+AC_ARG_WITH(experimental-modules,
+[  --with-experimental-modules      Use experimental and unstable modules. (default=no) ],
+[ case "$withval" in
+    yes)
+       EXPERIMENTAL=yes
+       ;;
+    *)
+  esac ]
+)
+
+dnl #
+dnl #  These next two arguments don't actually do anything.  They're
+dnl #  place holders so that the top-level configure script can tell
+dnl #  the user how to configure lower-level modules
+dnl #
+
+dnl #
+dnl # extra argument: --with-rlm-FOO-lib-dir
+dnl #
+AC_ARG_WITH(rlm-FOO-lib-dir,
+[  --with-rlm-FOO-lib-dir=DIR       Directory to look for library files used by module FOO],
+[ case "$withval" in
+    *)
+       ;;
+  esac ]
+)
+
+dnl #
+dnl # extra argument: --with-rlm-FOO-include-dir
+dnl #
+AC_ARG_WITH(rlm-FOO-include-dir,
+[  --with-rlm-FOO-include-dir=DIR   Directory to look for include files used by module FOO],
+[ case "$withval" in
+    *)
+       ;;
+  esac ]
+)
+
 dnl See what include-style is used by the make program.
 dnl AC_MSG_CHECKING(include style for make)
 dnl echo "include /dev/null" > testmake.$$
@@ -266,12 +306,21 @@ dnl #  1. Checks for programs
 dnl #
 dnl #############################################################
 
+CHECKRAD=checkrad.pl
 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
-if test ! -x $ac_cv_path_PERL; then
-  AC_MSG_ERROR(perl not found - fatal)
+if test "x$ac_cv_path_PERL" = "x"; then
+  AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
+fi
+AC_PATH_PROG(SNMPGET, snmpget)
+if test "x$ac_cv_path_SNMPGET" = "x"; then
+  AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
+fi
+
+AC_PATH_PROG(SNMPWALK, snmpwalk)
+if test "x$ac_cv_path_SNMPWALK" = "x"; then
+  AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
 fi
-AC_PATH_PROG(SNMPGET, snmpget, /usr/local/bin/snmpget)
-AC_PATH_PROG(SNMPWALK, snmpwalk, /usr/local/bin/snmpwalk)
+
 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
 
 dnl FIXME This is truly gross.
@@ -284,12 +333,6 @@ AC_PATH_PROG(LOCATE,locate)
 AC_PATH_PROG(DIRNAME,dirname)
 AC_PATH_PROG(GREP,grep)
 
-dnl #
-dnl # check for AIX, to allow us to use some BSD functions
-dnl # must be before macros that call the compiler.
-dnl #
-AC_AIX
-
 dnl #############################################################
 dnl #
 dnl #  2. Checks for libraries
@@ -297,47 +340,51 @@ dnl #
 dnl #############################################################
 
 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
-PTHREADLIB=
-if test "$WITH_THREADS" = "yes"; then 
+old_CFLAGS=$CFLAGS
+if test "x$WITH_THREADS" = "xyes"; then 
   if test $ac_cv_prog_suncc = "yes"; then
     CFLAGS="$CFLAGS -mt"
   fi
 
-  AC_CHECK_HEADERS(pthread.h)
-
-  if test "X$ac_cv_header_pthread_h" = "X"; then
-    AC_MSG_ERROR("You are trying to use threads without a POSIX <pthread.h>")
-  fi
+  AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
 
 dnl # 
 dnl # pthread stuff is usually in -lpthread
+dnl # or in -lc_r, on *BSD
 dnl # 
-  AC_CHECK_LIB(pthread, pthread_join,
-    PTHREADLIB="-lpthread"
-  )
-
-dnl # 
-dnl # Except for *BSD, where it's in -lc_r,
-dnl # and where we've got to add extra CFLAGS.
+dnl # On Some systems, we need extra pre-processor flags, to get them to
+dnl # to do the threading properly.
 dnl # 
-  if test "X$PTHREADLIB" = "X"; then
-    SAVED_CFLAGS=$CFLAGS
-    CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE"
-    AC_CHECK_LIB(c_r, pthread_create,
-      PTHREADLIB="-lc_r"
-    )
-  fi
+  AC_CHECK_LIB(pthread, pthread_create,
+               [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
+                  LIBS="$LIBS -lpthread" ],
+               AC_CHECK_LIB(c_r, pthread_create,
+                           [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
+                           [ WITH_THREADS="no" ]
+                           )
+               )
+fi
 
 dnl # 
 dnl # If we have NO pthread libraries, remove any knowledge of threads.
 dnl # 
-  if test "x$PTHREADLIB" = "x"; then
-    CFLAGS=$SAVED_CFLAGS
-    ac_cv_header_pthread_h="no"
-  else
-    LIBS="$LIBS $PTHREADLIB"
-    CFLAGS="$CFLAGS -D_REENTRANT"
-  fi
+if test "x$WITH_THREADS" != "xyes"; then
+  CFLAGS=$old_CFLAGS
+  ac_cv_header_pthread_h="no"
+  WITH_THREADS=no
+else
+  dnl #
+  dnl #  We need sem_init() and friends, as they're the friendliest
+  dnl #  semaphore functions for threading.
+  dnl #
+  dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
+  dnl # Some systems have them in -lsem
+  dnl # Solaris has them in -lposix4
+
+  AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt,
+       [],
+       [AC_MSG_ERROR(-lsem not found.  You may want to download it from ftp://ftp.to.gd-es.com/pub/BSDI/libsem.tar.bz2 or ftp://ftp.freeradius.org/pub/radius/contrib/libsem.tar.gz)]
+   )
 fi
 
 dnl Check if we need -lsocket
@@ -383,7 +430,14 @@ AC_CHECK_HEADERS( \
        netinet/in.h \
        sys/types.h \
        sys/socket.h \
-       sys/time.h
+       sys/time.h \
+       sys/wait.h \
+       sys/security.h \
+       fcntl.h \
+       sys/fcntl.h \
+       prot.h \
+       sia.h \
+       siad.h
 )
 
 REGEX=no
@@ -401,6 +455,19 @@ fi
 AC_SUBST(REGEX)
 AC_SUBST(REGEX_EXTENDED)
 
+dnl #
+dnl #  other checks which require headers
+dnl #
+if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
+then
+  AC_DEFINE(OSFC2)
+fi
+
+if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
+then
+  AC_DEFINE(OSFSIA)
+fi
+
 
 dnl #############################################################
 dnl #
@@ -436,6 +503,16 @@ AC_CHECK_TYPE_INCLUDE([
 #endif
 ],uint8_t, unsigned char)
 
+dnl check for uint16_t
+AC_CHECK_TYPE_INCLUDE([
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+],uint16_t, unsigned short)
+
 dnl check for uint32_t
 AC_CHECK_TYPE_INCLUDE([
 #ifdef HAVE_INTTYPES_H
@@ -457,17 +534,20 @@ AC_CHECK_FUNCS( \
        strsignal \
        sigaction \
        sigprocmask \
+       pthread_sigmask \
        snprintf \
        vsnprintf \
        setsid \
        strncasecmp \
        strcasecmp \
+       localtime_r \
+       ctime_r \
+       gmtime_r \
        strsep \
        inet_aton \
        gethostname \
        setlinebuf \
        setvbuf \
-       sem_init \
        getusershell
 )
 RADIUSD_NEED_DECLARATIONS( \
@@ -483,6 +563,18 @@ RADIUSD_NEED_DECLARATIONS( \
 
 AC_TYPE_SIGNAL
 
+dnl # check if we have utmpx.h
+dnl # if so, check if struct utmpx has entry ut_xtime
+dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
+if test "x$ac_cv_header_utmpx_h" = "xyes"
+then
+ AC_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
+ if test "x$ac_cv_type_struct_utmpx_ut_xtime" = "x"
+ then
+   AC_DEFINE(ut_xtime,ut_tv.tv_sec)
+ fi
+fi
+
 dnl #############################################################
 dnl #
 dnl #  6. Checks for compiler characteristics
@@ -516,12 +608,12 @@ fi
 
 AC_MSG_CHECKING(for developer gcc flags)
 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
-  devflags="-Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
+  devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
   CFLAGS="$CFLAGS $devflags"
   INSTALLSTRIP=""
   AC_MSG_RESULT(yes.  Using $devflags)
 else
-  devflags="none"
+  devflags=""
   CFLAGS="$CFLAGS -DNDEBUG"
   INSTALLSTRIP="-s"
   AC_MSG_RESULT(no.)
@@ -538,37 +630,130 @@ dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
 AC_CHECK_LIB(crypt, crypt,
   CRYPTLIB="-lcrypt"
 )
-AC_SUBST(CRYPTLIB)
 if test "$CRYPTLIB" != ""; then
   AC_DEFINE(HAVE_CRYPT)
 else
   AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
 fi
 
+dnl Check for libcipher
+AC_CHECK_LIB(cipher, setkey,
+   CRYPTLIB="${CRYPTLIB} -lcipher"
+)
+AC_SUBST(CRYPTLIB)
+
 if test "x$WITH_SNMP" = "xyes"; then
   SNMP_CHECKS
 fi
 
-dnl #
-dnl #  Check for sem_init all by itself
-dnl #
-if test "X$ac_cv_func_sem_init" = "Xno"; then
+gethostbyaddrrstyle=""
+AC_MSG_CHECKING([gethostbyaddr_r() syntax])
+AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
+       AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
+       gethostbyaddrrstyle=GNU
+])
+if test "x$gethostbyaddrrstyle" = "x"; then
+       AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
+               AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
+               gethostbyaddrrstyle=SYSV
+       ])
+fi
+if test "x$gethostbyaddrrstyle" = "x"; then
+       AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr(NULL, 0, 0)  ], [
+               AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
+               gethostbyaddrrstyle=BSD
+               AC_MSG_WARN([ ****** BSD Style gethostbyaddr might NOT be thread-safe! ****** ])
+       ])
+fi
 
-dnl #
-dnl #  If not found, sem_init is in -lposix4 on Solaris
-dnl #
- AC_CHECK_LIB(posix4, sem_init)
+if test "x$gethostbyaddrrstyle" = "x"; then
+       AC_MSG_RESULT([none!  It must not exist, here.])
+else
+       AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
+fi
 
-  if test "X$ac_cv_lib_posix4_sem_init" = "X"; then
-    if test "$WITH_THREAD_POOL" = "yes"; then
-      AC_MSG_WARN(You do not have posix semaphores.  Disabling thread pools)
-    fi
-    WITH_THREAD_POOL=no
-  fi
+gethostbynamerstyle=""
+AC_MSG_CHECKING([gethostbyname_r() syntax])
+AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [
+       AC_DEFINE(GETHOSTBYNAMERSTYLE, GNUSTYLE)
+       gethostbynamerstyle=GNU
+])
+if test "x$gethostbynamerstyle" = "x"; then
+       AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [
+               AC_DEFINE(GETHOSTBYNAMERSTYLE, SYSVSTYLE)
+               gethostbynamerstyle=SYSV
+       ])
+fi
+if test "x$gethostbynamerstyle" = "x"; then
+       AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname(NULL)  ], [
+               AC_DEFINE(GETHOSTBYNAMERSTYLE, BSDSTYLE)
+               gethostbynamerstyle=BSD
+               AC_MSG_WARN([ ****** BSD Style gethostbyname might NOT be thread-safe! ****** ])
+       ])
+fi
+
+if test "x$gethostbynamerstyle" = "x"; then
+       AC_MSG_RESULT([none!  It must not exist, here.])
+else
+       AC_MSG_RESULT([${gethostbynamerstyle}-style])
 fi
 
-POSTGRESQL_CHECKS
-ODBC_CHECKS
+dnl If configuring with large file support, determine the right flags to
+dnl use based on the platform.  This is the wrong approach; autoconf 2.50
+dnl comes with a macro that takes the right approach.  But this works well
+dnl enough until we switch to autoconf 2.50 or later.
+if test x"$rad_enable_largefiles" = xyes ; then
+    AC_MSG_CHECKING(for largefile linkage)
+    case "$host" in
+    *-aix4.[01]*)
+        AC_MSG_RESULT(no)
+        AC_MSG_ERROR([AIX before 4.2 does not support large files])
+        ;;
+    *-aix4*)
+        AC_MSG_RESULT(ok)
+        LFS_CFLAGS="-D_LARGE_FILES"
+        LFS_LDFLAGS=""
+        LFS_LIBS=""
+        ;;
+    *-hpux*)
+        AC_MSG_RESULT(ok)
+        LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+        LFS_LDFLAGS=""
+        LFS_LIBS=""
+        ;;
+    *-irix*)
+        AC_MSG_RESULT(no)
+        AC_MSG_ERROR([Large files not supported on this platform])
+        ;;
+    *-linux*)
+        AC_MSG_RESULT(maybe)
+        LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+        LFS_LDFLAGS=""
+        LFS_LIBS=""
+        AC_DEFINE([_GNU_SOURCE], 1,
+                  [Some versions of glibc need this defined for pread/pwrite.])
+        ;;
+    *-solaris*)
+        AC_MSG_RESULT(ok)
+        AC_PATH_PROG(GETCONF, getconf)
+        if test -z "$GETCONF" ; then
+            AC_MSG_ERROR([getconf required to configure large file support])
+        fi
+        LFS_CFLAGS=`$GETCONF LFS_CFLAGS`
+        LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS`
+        LFS_LIBS=`$GETCONF LFS_LIBS`
+        ;;
+    *)
+        AC_MSG_RESULT(maybe)
+        LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
+        LFS_LDFLAGS=""
+        LFS_LIBS=""
+        ;;
+    esac
+    AC_SUBST(LFS_CFLAGS)
+    AC_SUBST(LFS_LDFLAGS)
+    AC_SUBST(LFS_LIBS)
+fi
 
 dnl #############################################################
 dnl #
@@ -579,40 +764,22 @@ dnl #############################################################
 dnl #
 dnl # Figure out where libtool is located,
 dnl #
-LIBTOOL="`pwd`/libtool"
-AC_SUBST(LIBTOOL)
-AC_SUBST(LIBLTDL)
-AC_SUBST(INCLTDL)
 top_builddir=`pwd`
+export top_builddir
+AC_MSG_RESULT([top_builddir=$top_builddir])
 AC_SUBST(top_builddir)
+AC_SUBST(LIBLTDL)
+AC_SUBST(INCLTDL)
 
 dnl #
-dnl #  Checks to ensure that the thread pool code can build.
-dnl #
-if test "$WITH_THREAD_POOL" = "yes"; then
-  dnl #
-  dnl # If using thread pools, check that threading is enabled
-  dnl #
-  if test "$WITH_THREADS" != "yes"; then
-    AC_MSG_ERROR(You must have threads enabled for thread pools to work.)
-  fi
-
-  dnl #
-  dnl # If using thread pools, check that we have thread libraries
-  dnl #
-  if test "X$PTHREADLIB" = "X"; then
-    AC_MSG_ERROR(You must have threading libraries for thread pools to work.)
-  fi
-
-dnl #
-dnl #  Finally, after all of the checks above, we see if
-dnl #  we can REALLY use the thread pools.
+dnl #  Work around stupid autoconf crap
 dnl #
-  if test "$WITH_THREAD_POOL" = "yes"; then
-    AC_DEFINE(WITH_THREAD_POOL,1)
-  fi
+if test "x$INCLTDL" != "x";then
+  INCLTDL='-I${top_builddir}/''libltdl'
 fi
 
+dnl import libtool stuff
+
 dnl #############################################################
 dnl #
 dnl #  Configure in any module directories.
@@ -620,16 +787,44 @@ dnl #
 dnl #############################################################
 
 mysubdirs=
-for foo in `find src/modules -name configure -print`; do
-  bar=`echo $foo | sed 's%/configure$%%g'`
-  mysubdirs="$mysubdirs $bar"
-done
+if test "x$EXPERIMENTAL" = "xyes"; then
+  bar=`ls -1 src/modules/rlm_*/configure | sed 's%/configure%%'`
+  dnl # get rid of LF's.
+  mysubdirs=`echo $bar`
+else
+  dnl # 
+  dnl # Find 'configure' in ONLY the stable modules
+  dnl # 
+  for bar in `cat src/modules/stable`; do
+    if test -f src/modules/$bar/configure; then
+      mysubdirs="$mysubdirs src/modules/$bar"
+    fi
+  done
+fi
+
+dnl ############################################################
+dnl # make modules by list
+dnl #############################################################
+MODULES=
+if test "x$EXPERIMENTAL" = "xyes"; then
+  for foo in `ls -1d src/modules | grep rlm_`; do
+    MODULES="$MODULES $foo"
+  done
+else
+   dnl #
+   dnl # make ONLY the stable modules
+   dnl #
+   for foo in `cat src/modules/stable`; do
+    MODULES="$MODULES $foo"
+   done
+fi
 
 dnl #
 dnl #  Don't change the variable name here.  Autoconf goes bonkers
 dnl #  if you do.
 dnl #
 AC_CONFIG_SUBDIRS($mysubdirs)
+AC_SUBST(MODULES)
 
 dnl #############################################################
 dnl #
@@ -648,12 +843,15 @@ AC_SUBST(USE_SHARED_LIBS)
 USE_STATIC_LIBS=$enable_static
 AC_SUBST(USE_STATIC_LIBS)
 AC_SUBST(STATIC_MODULES)
+AC_SUBST(RADIUSD_MAJOR_VERSION)
+AC_SUBST(RADIUSD_MINOR_VERSION)
 AC_SUBST(RADIUSD_VERSION)
 export CFLAGS LIBS
 
 AC_OUTPUT(\
        ./Make.inc \
        ./src/include/build-radpaths-h \
+       ./src/main/Makefile \
        ./src/main/checkrad.pl \
        ./src/main/radlast \
        ./src/main/radtest \
@@ -662,13 +860,15 @@ AC_OUTPUT(\
        ./scripts/check-radiusd-config \
        ./scripts/radiusd.cron.daily \
        ./scripts/radiusd.cron.monthly \
+       ./scripts/cryptpasswd \
+       ./raddb/dictionary \
        ./raddb/radiusd.conf
 )
 
 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
 AC_OUTPUT_COMMANDS([(cd ./src/main   && chmod +x checkrad.pl radlast radtest)])
-AC_OUTPUT_COMMANDS([(cd ./scripts    && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly)])
+AC_OUTPUT_COMMANDS([(cd ./scripts    && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
 AC_OUTPUT_COMMANDS([
 cat >> src/include/autoconf.h <<EOF