1 dnl #############################################################
3 dnl # For information about autoconf, see:
5 dnl # http://www.gnu.org/software/autoconf/
7 dnl # The recommended order is:
10 dnl # 0. checks for compiler, libtool, and command line options
11 dnl # 1. checks for programs
12 dnl # 2. checks for libraries
13 dnl # 3. checks for header files
14 dnl # 4. checks for typedefs
15 dnl # 5. checks for structures and functions
16 dnl # 6. checks for compiler characteristics
17 dnl # 7. checks for library functions
18 dnl # 8. checks for system services
19 dnl # AC_OUTPUT([file...])
21 dnl #############################################################
23 AC_INIT(src/main/radiusd.c)
24 AC_CONFIG_HEADER(src/include/autoconf.h)
25 AC_REVISION($Revision$)dnl
27 dnl # The version of the software
28 RADIUSD_MAJOR_VERSION=0
29 RADIUSD_MINOR_VERSION=9-pre
30 RADIUSD_VERSION="${RADIUSD_MAJOR_VERSION}.${RADIUSD_MINOR_VERSION}"
32 dnl #############################################################
34 dnl # 0. Checks for compiler, libtool, and command line options.
36 dnl #############################################################
40 AC_PROG_GCC_TRADITIONAL
44 dnl # autoconf 2.50 and later
45 dnl # AC_SYS_LARGEFILE
50 dnl # check for AIX, to allow us to use some BSD functions
51 dnl # must be before macros that call the compiler.
56 AC_CHECK_PROG(GMAKE, gmake, yes, no)
57 if test $GMAKE = no; then
58 AC_PATH_PROG(MAKE, make, /usr/local/bin/make)
60 AC_PATH_PROG(MAKE, gmake, /usr/local/gnu/bin/make)
62 makever=`$ac_cv_path_MAKE --version 2>&1 | grep "GNU Make"`
63 if test -z "$makever"; then
64 AC_MSG_ERROR(GNU Make is not installed. Please download and install it
65 from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
68 dnl libltdl is installable
69 AC_LIBLTDL_INSTALLABLE
71 dnl use system-wide libtool, if it exists
72 AC_ARG_WITH(system-libtool,
73 [ --with-system-libtool try to use libtool installed in your system [default=use our own]],
74 [ AC_PATH_PROG(LIBTOOL, libtool,,$PATH:/usr/local/bin) ],
76 LIBTOOL="`pwd`/libtool"
78 dnl ensure that we're looking for dlopen
81 dnl Figure out how to build shared libraries
86 dnl Put this in later, when all distributed modules use autoconf.
87 dnl AC_ARG_WITH(disablemodulefoo,
88 dnl [ --without-rlm_foo Disables module compilation. Module list:]
89 dnl esyscmd([find src/modules -type d -name rlm_\* -print |\
90 dnl sed -e 's%src/modules/.*/% (sub)- %; s%.*/%- %' |\
91 dnl awk '{print " "$0}']))
93 AC_ARG_ENABLE(strict-dependencies,
94 [ --enable-strict-dependencies Fail configure on lack of module dependancy.])
96 dnl extra argument: --with-logdir
97 logdir='${localstatedir}/log/radius'
98 AC_MSG_CHECKING(logdir)
100 [ --with-logdir=DIR Directory for logfiles [LOCALSTATEDIR/log/radius] ],
103 AC_MSG_ERROR(Need logdir)
113 AC_MSG_RESULT($logdir)
115 dnl extra argument: --with-radacctdir
116 radacctdir='${logdir}/radacct'
117 AC_MSG_CHECKING(radacctdir)
118 AC_ARG_WITH(radacctdir,
119 [ --with-radacctdir=PATH Directory for detail files [LOGDIR/radacct] ],
122 AC_MSG_ERROR(Need radacctdir)
127 radacctdir="$withval"
132 AC_MSG_RESULT($radacctdir)
134 dnl extra argument: --with-raddbdir
135 raddbdir='${sysconfdir}/raddb'
136 AC_MSG_CHECKING(raddbdir)
137 AC_ARG_WITH(raddbdir,
138 [ --with-raddbdir=DIR Directory for config files [SYSCONFDIR/raddb] ],
141 AC_MSG_ERROR(Need raddbdir)
151 AC_MSG_RESULT($raddbdir)
153 dnl extra argument: --with-ascend-binary
155 AC_ARG_WITH(ascend-binary,
156 [ --with-ascend-binary Include support for Ascend binary filter attributes (default=yes)],
164 if test "X$ASCEND_BINARY" = "Xyes"; then
165 AC_DEFINE(ASCEND_BINARY)
168 dnl extra argument: --with-threads
171 [ --with-threads Use threads, if available. (default=yes) ],
180 dnl extra argument: --with-snmp
183 [ --with-snmp Compile in SNMP support. (default=yes)],
192 dnl extra argument: --with-large-files
193 rad_enable_largefiles=no
194 AC_ARG_WITH(large-files,
195 [ --with-large-files Compile in large (2G+) file support. (default=no)],
198 rad_enable_largefiles=yes
206 dnl AC_ARG_ENABLE(ltdl-install,
207 dnl [ --disable-ltdl-install do not install libltdl])
208 dnl if test x"${enable_ltdl_install+set}" != xset; then
209 dnl enable_ltdl_install=yes
210 dnl ac_configure_args="$ac_configure_args --enable-ltdl-install"
212 dnl AC_CONFIG_SUBDIRS(libltdl)
215 dnl # Allow the user to specify a list of modules to be linked
216 dnl # statically to the server.
219 AC_ARG_WITH(static_modules,
220 [ --with-static-modules=QUOTED-MODULE-LIST],[
221 for i in $withval; do
222 STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
227 dnl # Enable developer C compiler warnings
229 AC_ARG_ENABLE(developer,
230 [ --enable-developer Enables features of interest to developers.],
231 [ case "$enableval" in
240 if test "x$developer" != "xno" -a -d $srcdir/CVS; then
241 dnl turn on the developer flag when taken from a CVS checkout (not a release)
245 dnl extra argument: --with-experimental-modules
247 AC_ARG_WITH(experimental-modules,
248 [ --with-experimental-modules Use experimental and unstable modules. (default=no) ],
258 dnl # These next two arguments don't actually do anything. They're
259 dnl # place holders so that the top-level configure script can tell
260 dnl # the user how to configure lower-level modules
264 dnl # extra argument: --with-rlm-FOO-lib-dir
266 AC_ARG_WITH(rlm-FOO-lib-dir,
267 [ --with-rlm-FOO-lib-dir=DIR Directory to look for library files used by module FOO],
275 dnl # extra argument: --with-rlm-FOO-include-dir
277 AC_ARG_WITH(rlm-FOO-include-dir,
278 [ --with-rlm-FOO-include-dir=DIR Directory to look for include files used by module FOO],
285 dnl See what include-style is used by the make program.
286 dnl AC_MSG_CHECKING(include style for make)
287 dnl echo "include /dev/null" > testmake.$$
288 dnl echo "all:" >> testmake.$$
289 dnl make -f testmake.$$ >/dev/null 2>&1
298 dnl rm -f testmake.$$
299 dnl AC_MSG_RESULT(" $INCLUDE")
300 dnl AC_SUBST(INCLUDE)
303 dnl #############################################################
305 dnl # 1. Checks for programs
307 dnl #############################################################
310 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
311 if test "x$ac_cv_path_PERL" = "x"; then
312 AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
314 AC_PATH_PROG(SNMPGET, snmpget)
315 if test "x$ac_cv_path_SNMPGET" = "x"; then
316 AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
319 AC_PATH_PROG(SNMPWALK, snmpwalk)
320 if test "x$ac_cv_path_SNMPWALK" = "x"; then
321 AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
324 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
326 dnl FIXME This is truly gross.
327 missing_dir=`cd $ac_aux_dir && pwd`
328 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
329 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
330 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
332 AC_PATH_PROG(LOCATE,locate)
333 AC_PATH_PROG(DIRNAME,dirname)
334 AC_PATH_PROG(GREP,grep)
336 dnl #############################################################
338 dnl # 2. Checks for libraries
340 dnl #############################################################
342 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
344 if test "x$WITH_THREADS" = "xyes"; then
345 if test $ac_cv_prog_suncc = "yes"; then
349 AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
352 dnl # pthread stuff is usually in -lpthread
353 dnl # or in -lc_r, on *BSD
355 dnl # On Some systems, we need extra pre-processor flags, to get them to
356 dnl # to do the threading properly.
358 AC_CHECK_LIB(pthread, pthread_create,
359 [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
360 LIBS="$LIBS -lpthread" ],
361 AC_CHECK_LIB(c_r, pthread_create,
362 [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
363 [ WITH_THREADS="no" ]
369 dnl # If we have NO pthread libraries, remove any knowledge of threads.
371 if test "x$WITH_THREADS" != "xyes"; then
373 ac_cv_header_pthread_h="no"
377 dnl # We need sem_init() and friends, as they're the friendliest
378 dnl # semaphore functions for threading.
380 dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
381 dnl # Some systems have them in -lsem
382 dnl # Solaris has them in -lposix4
384 AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt,
386 [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)]
390 dnl Check if we need -lsocket
391 AC_CHECK_LIB(socket, getsockname)
393 dnl Check for -lresolv
394 dnl This library may be needed later.
395 AC_CHECK_LIB(resolv, inet_aton)
397 dnl Check if we need -lnsl. Usually if we want to
398 dnl link against -lsocket we need to include -lnsl as well.
399 AC_CHECK_LIB(nsl, inet_ntoa)
401 dnl #############################################################
403 dnl # 3. Checks for header files
405 dnl #############################################################
444 AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H))
445 if test "x$ac_cv_header_regex_h" = "xyes"; then
453 ], [AC_DEFINE(HAVE_REG_EXTENDED) REGEX_EXTENDED=yes])
456 AC_SUBST(REGEX_EXTENDED)
459 dnl # other checks which require headers
461 if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
466 if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
472 dnl #############################################################
474 dnl # 4. Checks for typedefs
476 dnl #############################################################
479 dnl # Ensure that these are defined
486 dnl check for socklen_t
487 AC_CHECK_TYPE_INCLUDE([
488 #ifdef HAVE_SYS_TYPES_H
489 #include <sys/types.h>
491 #ifdef HAVE_SYS_SOCKET_H
492 #include <sys/socket.h>
496 dnl check for uint8_t
497 AC_CHECK_TYPE_INCLUDE([
498 #ifdef HAVE_INTTYPES_H
499 #include <inttypes.h>
504 ],uint8_t, unsigned char)
506 dnl check for uint16_t
507 AC_CHECK_TYPE_INCLUDE([
508 #ifdef HAVE_INTTYPES_H
509 #include <inttypes.h>
514 ],uint16_t, unsigned short)
516 dnl check for uint32_t
517 AC_CHECK_TYPE_INCLUDE([
518 #ifdef HAVE_INTTYPES_H
519 #include <inttypes.h>
524 ],uint32_t, unsigned int)
526 dnl #############################################################
528 dnl # 5. Checks for structures and functions
530 dnl #############################################################
553 RADIUSD_NEED_DECLARATIONS( \
566 dnl # check if we have utmpx.h
567 dnl # if so, check if struct utmpx has entry ut_xtime
568 dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
569 if test "x$ac_cv_header_utmpx_h" = "xyes"
571 AC_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
572 if test "x$ac_cv_type_struct_utmpx_ut_xtime" = "x"
574 AC_DEFINE(ut_xtime,ut_tv.tv_sec)
578 dnl #############################################################
580 dnl # 6. Checks for compiler characteristics
582 dnl #############################################################
585 dnl # Ensure that these are defined
590 dnl # See if this is OS/2
592 AC_MSG_CHECKING(type of OS)
595 if test "$OS" = "OS/2"; then
603 dnl # Set Default CFLAGS
605 if test "x$GCC" = "xyes"; then
606 CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
609 AC_MSG_CHECKING(for developer gcc flags)
610 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
611 devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
612 CFLAGS="$CFLAGS $devflags"
614 AC_MSG_RESULT(yes. Using $devflags)
617 CFLAGS="$CFLAGS -DNDEBUG"
622 dnl #############################################################
624 dnl # 7. Checks for library functions
626 dnl #############################################################
628 dnl Check for libcrypt
629 dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
630 AC_CHECK_LIB(crypt, crypt,
633 if test "$CRYPTLIB" != ""; then
634 AC_DEFINE(HAVE_CRYPT)
636 AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
639 dnl Check for libcipher
640 AC_CHECK_LIB(cipher, setkey,
641 CRYPTLIB="${CRYPTLIB} -lcipher"
645 if test "x$WITH_SNMP" = "xyes"; then
649 gethostbyaddrrstyle=""
650 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
651 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
652 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
653 gethostbyaddrrstyle=SYSV
655 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
656 AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
657 gethostbyaddrrstyle=GNU
660 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr(NULL, 0, 0) ], [
661 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
662 gethostbyaddrrstyle=BSD
665 if test "x$gethostbyaddrrstyle" = "x"; then
666 AC_MSG_RESULT([none! It must not exist, here.])
668 AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
672 dnl If configuring with large file support, determine the right flags to
673 dnl use based on the platform. This is the wrong approach; autoconf 2.50
674 dnl comes with a macro that takes the right approach. But this works well
675 dnl enough until we switch to autoconf 2.50 or later.
676 if test x"$rad_enable_largefiles" = xyes ; then
677 AC_MSG_CHECKING(for largefile linkage)
681 AC_MSG_ERROR([AIX before 4.2 does not support large files])
685 LFS_CFLAGS="-D_LARGE_FILES"
691 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
697 AC_MSG_ERROR([Large files not supported on this platform])
701 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
704 AC_DEFINE([_GNU_SOURCE], 1,
705 [Some versions of glibc need this defined for pread/pwrite.])
709 AC_PATH_PROG(GETCONF, getconf)
710 if test -z "$GETCONF" ; then
711 AC_MSG_ERROR([getconf required to configure large file support])
713 LFS_CFLAGS=`$GETCONF LFS_CFLAGS`
714 LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS`
715 LFS_LIBS=`$GETCONF LFS_LIBS`
719 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
725 AC_SUBST(LFS_LDFLAGS)
729 dnl #############################################################
731 dnl # 8. Checks for system services
733 dnl #############################################################
736 dnl # Figure out where libtool is located,
739 AC_MSG_RESULT([top_builddir=$top_builddir])
740 AC_SUBST(top_builddir)
745 dnl # Work around stupid autoconf crap
747 if test "x$INCLTDL" != "x";then
748 INCLTDL='-I${top_builddir}/''libltdl'
751 dnl import libtool stuff
753 dnl #############################################################
755 dnl # Configure in any module directories.
757 dnl #############################################################
760 if test "x$EXPERIMENTAL" = "xyes"; then
761 for foo in `find src/modules -maxdepth 1 -name configure -print`; do
762 bar=`echo $foo | sed 's%/configure$%%g'`
763 mysubdirs="$mysubdirs $bar"
767 dnl # Find 'configure' in ONLY the stable modules
769 for foo in `find \`cat src/modules/stable | sed 's%rlm%src/modules/rlm%g'\` -maxdepth 1 -name configure -print`; do
770 bar=`echo $foo | sed 's%/configure$%%g'`
771 mysubdirs="$mysubdirs $bar"
775 dnl ############################################################
776 dnl # make modules by list
777 dnl #############################################################
779 if test "x$EXPERIMENTAL" = "xyes"; then
780 for foo in `ls src/modules | grep rlm_`; do
781 MODULES="$MODULES $foo"
785 dnl # make ONLY the stable modules
787 for foo in `cat src/modules/stable`; do
788 MODULES="$MODULES $foo"
793 dnl # Don't change the variable name here. Autoconf goes bonkers
796 AC_CONFIG_SUBDIRS($mysubdirs)
799 dnl #############################################################
801 dnl # And finally, output the results.
803 dnl #############################################################
806 dnl # Substitute whatever libraries we found to be necessary
809 AC_SUBST(INSTALLSTRIP)
811 USE_SHARED_LIBS=$enable_shared
812 AC_SUBST(USE_SHARED_LIBS)
813 USE_STATIC_LIBS=$enable_static
814 AC_SUBST(USE_STATIC_LIBS)
815 AC_SUBST(STATIC_MODULES)
816 AC_SUBST(RADIUSD_MAJOR_VERSION)
817 AC_SUBST(RADIUSD_MINOR_VERSION)
818 AC_SUBST(RADIUSD_VERSION)
823 ./src/include/build-radpaths-h \
824 ./src/main/Makefile \
825 ./src/main/checkrad.pl \
828 ./scripts/rc.radiusd \
830 ./scripts/check-radiusd-config \
831 ./scripts/radiusd.cron.daily \
832 ./scripts/radiusd.cron.monthly \
833 ./scripts/cryptpasswd \
838 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
839 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
840 AC_OUTPUT_COMMANDS([(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
841 AC_OUTPUT_COMMANDS([(cd ./scripts && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
843 cat >> src/include/autoconf.h <<EOF
845 #define HOSTINFO "$host"
846 #define RADIUSD_VERSION "$RADIUSD_VERSION"