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, NULL) ], [
652 AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
653 gethostbyaddrrstyle=GNU
655 if test "x$gethostbyaddrrstyle" = "x"; then
656 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
657 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
658 gethostbyaddrrstyle=SYSV
661 if test "x$gethostbyaddrrstyle" = "x"; then
662 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr(NULL, 0, 0) ], [
663 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
664 gethostbyaddrrstyle=BSD
665 AC_MSG_WARN([ ****** BSD Style gethostbyaddr might NOT be thread-safe! ****** ])
669 if test "x$gethostbyaddrrstyle" = "x"; then
670 AC_MSG_RESULT([none! It must not exist, here.])
672 AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
675 gethostbynamerstyle=""
676 AC_MSG_CHECKING([gethostbyname_r() syntax])
677 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [
678 AC_DEFINE(GETHOSTBYNAMERSTYLE, GNUSTYLE)
679 gethostbynamerstyle=GNU
681 if test "x$gethostbynamerstyle" = "x"; then
682 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [
683 AC_DEFINE(GETHOSTBYNAMERSTYLE, SYSVSTYLE)
684 gethostbynamerstyle=SYSV
687 if test "x$gethostbynamerstyle" = "x"; then
688 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyname(NULL) ], [
689 AC_DEFINE(GETHOSTBYNAMERSTYLE, BSDSTYLE)
690 gethostbynamerstyle=BSD
691 AC_MSG_WARN([ ****** BSD Style gethostbyname might NOT be thread-safe! ****** ])
695 if test "x$gethostbynamerstyle" = "x"; then
696 AC_MSG_RESULT([none! It must not exist, here.])
698 AC_MSG_RESULT([${gethostbynamerstyle}-style])
701 dnl If configuring with large file support, determine the right flags to
702 dnl use based on the platform. This is the wrong approach; autoconf 2.50
703 dnl comes with a macro that takes the right approach. But this works well
704 dnl enough until we switch to autoconf 2.50 or later.
705 if test x"$rad_enable_largefiles" = xyes ; then
706 AC_MSG_CHECKING(for largefile linkage)
710 AC_MSG_ERROR([AIX before 4.2 does not support large files])
714 LFS_CFLAGS="-D_LARGE_FILES"
720 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
726 AC_MSG_ERROR([Large files not supported on this platform])
730 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
733 AC_DEFINE([_GNU_SOURCE], 1,
734 [Some versions of glibc need this defined for pread/pwrite.])
738 AC_PATH_PROG(GETCONF, getconf)
739 if test -z "$GETCONF" ; then
740 AC_MSG_ERROR([getconf required to configure large file support])
742 LFS_CFLAGS=`$GETCONF LFS_CFLAGS`
743 LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS`
744 LFS_LIBS=`$GETCONF LFS_LIBS`
748 LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
754 AC_SUBST(LFS_LDFLAGS)
758 dnl #############################################################
760 dnl # 8. Checks for system services
762 dnl #############################################################
765 dnl # Figure out where libtool is located,
768 AC_MSG_RESULT([top_builddir=$top_builddir])
769 AC_SUBST(top_builddir)
774 dnl # Work around stupid autoconf crap
776 if test "x$INCLTDL" != "x";then
777 INCLTDL='-I${top_builddir}/''libltdl'
780 dnl import libtool stuff
782 dnl #############################################################
784 dnl # Configure in any module directories.
786 dnl #############################################################
789 if test "x$EXPERIMENTAL" = "xyes"; then
790 bar=`ls -1 src/modules/rlm_*/configure | sed 's%/configure%%'`
791 dnl # get rid of LF's.
792 mysubdirs=`echo $bar`
795 dnl # Find 'configure' in ONLY the stable modules
797 for bar in `cat src/modules/stable`; do
798 if test -f src/modules/$bar/configure; then
799 mysubdirs="$mysubdirs src/modules/$bar"
804 dnl ############################################################
805 dnl # make modules by list
806 dnl #############################################################
808 if test "x$EXPERIMENTAL" = "xyes"; then
809 for foo in `ls src/modules | grep rlm_`; do
810 MODULES="$MODULES $foo"
814 dnl # make ONLY the stable modules
816 for foo in `cat src/modules/stable`; do
817 MODULES="$MODULES $foo"
822 dnl # Don't change the variable name here. Autoconf goes bonkers
825 AC_CONFIG_SUBDIRS($mysubdirs)
828 dnl #############################################################
830 dnl # And finally, output the results.
832 dnl #############################################################
835 dnl # Substitute whatever libraries we found to be necessary
838 AC_SUBST(INSTALLSTRIP)
840 USE_SHARED_LIBS=$enable_shared
841 AC_SUBST(USE_SHARED_LIBS)
842 USE_STATIC_LIBS=$enable_static
843 AC_SUBST(USE_STATIC_LIBS)
844 AC_SUBST(STATIC_MODULES)
845 AC_SUBST(RADIUSD_MAJOR_VERSION)
846 AC_SUBST(RADIUSD_MINOR_VERSION)
847 AC_SUBST(RADIUSD_VERSION)
852 ./src/include/build-radpaths-h \
853 ./src/main/Makefile \
854 ./src/main/checkrad.pl \
857 ./scripts/rc.radiusd \
859 ./scripts/check-radiusd-config \
860 ./scripts/radiusd.cron.daily \
861 ./scripts/radiusd.cron.monthly \
862 ./scripts/cryptpasswd \
867 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
868 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
869 AC_OUTPUT_COMMANDS([(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
870 AC_OUTPUT_COMMANDS([(cd ./scripts && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
872 cat >> src/include/autoconf.h <<EOF
874 #define HOSTINFO "$host"
875 #define RADIUSD_VERSION "$RADIUSD_VERSION"