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.3
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_has_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 dnl Check the style of gethostbyaddr, in order of preference
650 dnl GNU (_r eight args)
651 dnl SYSV (_r six args)
652 dnl BSD (three args, may not be thread safe)
653 dnl Tru64 has BSD version, but it is thread safe
654 dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1739____.HTM
655 dnl We need #stdio.h to define NULL on FreeBSD (at least)
656 gethostbyaddrrstyle=""
657 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
660 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
661 gethostbyaddrrstyle=BSD
662 AC_MSG_WARN([FreeBSD overridden to BSD-style])
665 if test "x$gethostbyaddrrstyle" = "x"; then
669 ], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
670 AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
671 gethostbyaddrrstyle=GNU
674 if test "x$gethostbyaddrrstyle" = "x"; then
678 ], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
679 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
680 gethostbyaddrrstyle=SYSV
683 if test "x$gethostbyaddrrstyle" = "x"; then
687 ], [ gethostbyaddr(NULL, 0, 0) ], [
688 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
689 gethostbyaddrrstyle=BSD
690 AC_MSG_WARN([ ****** BSD Style gethostbyaddr might NOT be thread-safe! ****** ])
694 if test "x$gethostbyaddrrstyle" = "x"; then
695 AC_MSG_RESULT([none! It must not exist, here.])
697 AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
700 dnl Check the style of gethostbyname, in order of preference
701 dnl GNU (_r seven args)
702 dnl SYSV (_r five args)
703 dnl BSD (two args, may not be thread safe)
704 dnl Tru64 has BSD version, but it _is_ thread safe
705 dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1946____.HTM
706 dnl We need #stdio.h to define NULL on FreeBSD (at least)
707 gethostbynamerstyle=""
708 AC_MSG_CHECKING([gethostbyname_r() syntax])
712 ], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [
713 AC_DEFINE(GETHOSTBYNAMERSTYLE, GNUSTYLE)
714 gethostbynamerstyle=GNU
716 if test "x$gethostbynamerstyle" = "x"; then
720 ], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [
721 AC_DEFINE(GETHOSTBYNAMERSTYLE, SYSVSTYLE)
722 gethostbynamerstyle=SYSV
725 if test "x$gethostbynamerstyle" = "x"; then
729 ], [ gethostbyname(NULL) ], [
730 AC_DEFINE(GETHOSTBYNAMERSTYLE, BSDSTYLE)
731 gethostbynamerstyle=BSD
732 AC_MSG_WARN([ ****** BSD Style gethostbyname might NOT be thread-safe! ****** ])
736 if test "x$gethostbynamerstyle" = "x"; then
737 AC_MSG_RESULT([none! It must not exist, here.])
739 AC_MSG_RESULT([${gethostbynamerstyle}-style])
742 dnl If configuring with large file support, determine the right flags to
743 dnl use based on the platform. This is the wrong approach; autoconf 2.50
744 dnl comes with a macro that takes the right approach. But this works well
745 dnl enough until we switch to autoconf 2.50 or later.
746 if test x"$rad_enable_largefiles" = xyes ; then
747 AC_MSG_CHECKING(for largefile linkage)
751 AC_MSG_ERROR([AIX before 4.2 does not support large files])
755 LFS_CFLAGS="-D_LARGE_FILES"
761 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
767 AC_MSG_ERROR([Large files not supported on this platform])
771 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
774 AC_DEFINE([_GNU_SOURCE], 1,
775 [Some versions of glibc need this defined for pread/pwrite.])
779 AC_PATH_PROG(GETCONF, getconf)
780 if test -z "$GETCONF" ; then
781 AC_MSG_ERROR([getconf required to configure large file support])
783 LFS_CFLAGS=`$GETCONF LFS_CFLAGS`
784 LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS`
785 LFS_LIBS=`$GETCONF LFS_LIBS`
789 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
795 AC_SUBST(LFS_LDFLAGS)
799 dnl #############################################################
801 dnl # 8. Checks for system services
803 dnl #############################################################
806 dnl # Figure out where libtool is located,
810 AC_MSG_RESULT([top_builddir=$top_builddir])
811 AC_SUBST(top_builddir)
816 dnl # Work around stupid autoconf crap
818 if test "x$INCLTDL" != "x";then
819 INCLTDL='-I${top_builddir}/''libltdl'
822 dnl import libtool stuff
824 dnl #############################################################
826 dnl # Configure in any module directories.
828 dnl #############################################################
831 if test "x$EXPERIMENTAL" = "xyes"; then
832 bar=`ls -1 src/modules/rlm_*/configure | sed 's%/configure%%'`
833 dnl # get rid of LF's.
834 mysubdirs=`echo $bar`
837 dnl # Find 'configure' in ONLY the stable modules
839 for bar in `cat src/modules/stable`; do
840 if test -f src/modules/$bar/configure; then
841 mysubdirs="$mysubdirs src/modules/$bar"
846 dnl ############################################################
847 dnl # make modules by list
848 dnl #############################################################
850 if test "x$EXPERIMENTAL" = "xyes"; then
851 for foo in `ls -1 src/modules | grep rlm_`; do
852 MODULES="$MODULES $foo"
856 dnl # make ONLY the stable modules
858 for foo in `cat src/modules/stable`; do
859 MODULES="$MODULES $foo"
864 dnl # Don't change the variable name here. Autoconf goes bonkers
867 AC_CONFIG_SUBDIRS($mysubdirs)
870 dnl #############################################################
872 dnl # And finally, output the results.
874 dnl #############################################################
877 dnl # Substitute whatever libraries we found to be necessary
880 AC_SUBST(INSTALLSTRIP)
882 USE_SHARED_LIBS=$enable_shared
883 AC_SUBST(USE_SHARED_LIBS)
884 USE_STATIC_LIBS=$enable_static
885 AC_SUBST(USE_STATIC_LIBS)
886 AC_SUBST(STATIC_MODULES)
887 AC_SUBST(RADIUSD_MAJOR_VERSION)
888 AC_SUBST(RADIUSD_MINOR_VERSION)
889 AC_SUBST(RADIUSD_VERSION)
894 ./src/include/build-radpaths-h \
895 ./src/main/Makefile \
896 ./src/main/checkrad.pl \
899 ./scripts/rc.radiusd \
901 ./scripts/check-radiusd-config \
902 ./scripts/radiusd.cron.daily \
903 ./scripts/radiusd.cron.monthly \
904 ./scripts/cryptpasswd \
909 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
910 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
911 AC_OUTPUT_COMMANDS([(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
912 AC_OUTPUT_COMMANDS([(cd ./scripts && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
914 cat >> src/include/autoconf.h <<EOF
916 #define HOSTINFO "$host"
917 #define RADIUSD_VERSION "$RADIUSD_VERSION"