-pre3 (sigh)
[freeradius.git] / configure.in
index b16596e..0596cd0 100644 (file)
@@ -24,9 +24,9 @@ AC_INIT(src/main/radiusd.c)
 AC_CONFIG_HEADER(src/include/autoconf.h)
 AC_REVISION($Revision$)dnl
 
-dnl # The version of the software, 0.5
+dnl # The version of the software
 RADIUSD_MAJOR_VERSION=0
-RADIUSD_MINOR_VERSION=6
+RADIUSD_MINOR_VERSION=9.0-pre3
 RADIUSD_VERSION="${RADIUSD_MAJOR_VERSION}.${RADIUSD_MINOR_VERSION}"
 
 dnl #############################################################
@@ -41,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
@@ -59,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,
@@ -132,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,
@@ -164,7 +167,6 @@ fi
 
 dnl extra argument: --with-threads
 WITH_THREADS=yes
-WITH_THREAD_POOL=yes
 AC_ARG_WITH(threads,
 [  --with-threads          Use threads, if available.  (default=yes) ],
 [ case "$withval" in
@@ -172,7 +174,6 @@ AC_ARG_WITH(threads,
        ;;
     *)
        WITH_THREADS=""
-        WITH_THREAD_POOL=""
   esac ]
 )
 
@@ -188,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
@@ -213,11 +228,11 @@ dnl #  Enable developer C compiler warnings
 dnl #
 AC_ARG_ENABLE(developer,
 [  --enable-developer               Enables features of interest to developers.],
-[ case "$withval" in
-    *)
+[ case "$enableval" in
+    no)
        developer=no
        ;;
-    yes)
+    *)
        developer=yes
   esac ]
 )
@@ -291,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.
@@ -309,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
@@ -322,64 +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 # HP/UX requires linking with librt, too, to get the sem_* symbols.  :\
-
-  AC_SEARCH_LIBS(sem_init, pthread rt,
-       [ 
-       dnl    Er, this usage of $ac_cv_search_sem_init may be unfounded 
-       dnl    chumminess with the autoconf internals.  -chad
-       dnl PTHREADLIB="$PTHREADLIB $ac_cv_search_sem_init"
-       ],
-       [],
-       "-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
-
-dnl # Set libs, etc, if we have them.
-  if test "x$PTHREADLIB" != "x"; then
-    LIBS="$LIBS $PTHREADLIB"
-    CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
-  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
+if test "x$WITH_THREADS" != "xyes"; then
+  CFLAGS=$old_CFLAGS
   ac_cv_header_pthread_h="no"
   WITH_THREADS=no
-  WITH_THREAD_POOL=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
@@ -426,7 +431,10 @@ AC_CHECK_HEADERS( \
        sys/types.h \
        sys/socket.h \
        sys/time.h \
+       sys/wait.h \
        sys/security.h \
+       fcntl.h \
+       sys/fcntl.h \
        prot.h \
        sia.h \
        siad.h
@@ -495,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
@@ -530,7 +548,6 @@ AC_CHECK_FUNCS( \
        gethostname \
        setlinebuf \
        setvbuf \
-       sem_init \
        getusershell
 )
 RADIUSD_NEED_DECLARATIONS( \
@@ -629,43 +646,114 @@ 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
-
-dnl #
-dnl #  If not found, sem_init is in -lposix4 on Solaris
-dnl #
- AC_CHECK_LIB(posix4, sem_init)
-
-  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
-fi
-
-
 gethostbyaddrrstyle=""
 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
-AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
-       AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
-       gethostbyaddrrstyle=SYSV
-])
 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
+
+if test "x$gethostbyaddrrstyle" = "x"; then
        AC_MSG_RESULT([none!  It must not exist, here.])
 else
        AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
 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
 
-ODBC_CHECKS
+if test "x$gethostbynamerstyle" = "x"; then
+       AC_MSG_RESULT([none!  It must not exist, here.])
+else
+       AC_MSG_RESULT([${gethostbynamerstyle}-style])
+fi
+
+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 #
@@ -676,35 +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)
-
-dnl import libtool stuff
+AC_SUBST(LIBLTDL)
+AC_SUBST(INCLTDL)
 
 dnl #
-dnl #  Checks to ensure that the thread pool code can build.
+dnl #  Work around stupid autoconf crap
 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
-
+if test "x$INCLTDL" != "x";then
+  INCLTDL='-I${top_builddir}/''libltdl'
 fi
 
+dnl import libtool stuff
+
 dnl #############################################################
 dnl #
 dnl #  Configure in any module directories.
@@ -713,25 +788,43 @@ dnl #############################################################
 
 mysubdirs=
 if test "x$EXPERIMENTAL" = "xyes"; then
-  for foo in `find src/modules -name configure -print`; do
-    bar=`echo $foo | sed 's%/configure$%%g'`
-    mysubdirs="$mysubdirs $bar"
-  done
+  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 foo in `find \`cat src/modules/stable | sed 's%rlm%src/modules/rlm%g'\` -name configure -print`; do
-    bar=`echo $foo | sed 's%/configure$%%g'`
-    mysubdirs="$mysubdirs $bar"
+  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 #
@@ -758,6 +851,7 @@ 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 \
@@ -767,6 +861,7 @@ AC_OUTPUT(\
        ./scripts/radiusd.cron.daily \
        ./scripts/radiusd.cron.monthly \
        ./scripts/cryptpasswd \
+       ./raddb/dictionary \
        ./raddb/radiusd.conf
 )