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
47 dnl # check for AIX, to allow us to use some BSD functions
48 dnl # must be before macros that call the compiler.
53 AC_CHECK_PROG(GMAKE, gmake, yes, no)
54 if test $GMAKE = no; then
55 AC_PATH_PROG(MAKE, make, /usr/local/bin/make)
57 AC_PATH_PROG(MAKE, gmake, /usr/local/gnu/bin/make)
59 makever=`$ac_cv_path_MAKE --version 2>&1 | grep "GNU Make"`
60 if test -z "$makever"; then
61 AC_MSG_ERROR(GNU Make is not installed. Please download and install it
62 from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
65 dnl libltdl is installable
66 AC_LIBLTDL_INSTALLABLE
68 dnl use system-wide libtool, if it exists
69 AC_ARG_WITH(system-libtool,
70 [ --with-system-libtool try to use libtool installed in your system [default=use our own]],
71 [ AC_PATH_PROG(LIBTOOL, libtool,,$PATH:/usr/local/bin) ],
73 LIBTOOL="`pwd`/libtool"
75 dnl ensure that we're looking for dlopen
78 dnl Figure out how to build shared libraries
83 dnl Put this in later, when all distributed modules use autoconf.
84 dnl AC_ARG_WITH(disablemodulefoo,
85 dnl [ --without-rlm_foo Disables module compilation. Module list:]
86 dnl esyscmd([find src/modules -type d -name rlm_\* -print |\
87 dnl sed -e 's%src/modules/.*/% (sub)- %; s%.*/%- %' |\
88 dnl awk '{print " "$0}']))
90 AC_ARG_ENABLE(strict-dependencies,
91 [ --enable-strict-dependencies Fail configure on lack of module dependancy.])
93 dnl extra argument: --with-logdir
94 logdir='${localstatedir}/log/radius'
95 AC_MSG_CHECKING(logdir)
97 [ --with-logdir=DIR Directory for logfiles [LOCALSTATEDIR/log/radius] ],
100 AC_MSG_ERROR(Need logdir)
110 AC_MSG_RESULT($logdir)
112 dnl extra argument: --with-radacctdir
113 radacctdir='${logdir}/radacct'
114 AC_MSG_CHECKING(radacctdir)
115 AC_ARG_WITH(radacctdir,
116 [ --with-radacctdir=PATH Directory for detail files [LOGDIR/radacct] ],
119 AC_MSG_ERROR(Need radacctdir)
124 radacctdir="$withval"
129 AC_MSG_RESULT($radacctdir)
131 dnl extra argument: --with-raddbdir
132 raddbdir='${sysconfdir}/raddb'
133 AC_MSG_CHECKING(raddbdir)
134 AC_ARG_WITH(raddbdir,
135 [ --with-raddbdir=DIR Directory for config files [SYSCONFDIR/raddb] ],
138 AC_MSG_ERROR(Need raddbdir)
148 AC_MSG_RESULT($raddbdir)
150 dnl extra argument: --with-ascend-binary
152 AC_ARG_WITH(ascend-binary,
153 [ --with-ascend-binary Include support for Ascend binary filter attributes (default=yes)],
161 if test "X$ASCEND_BINARY" = "Xyes"; then
162 AC_DEFINE(ASCEND_BINARY)
165 dnl extra argument: --with-threads
168 [ --with-threads Use threads, if available. (default=yes) ],
177 dnl extra argument: --with-snmp
180 [ --with-snmp Compile in SNMP support. (default=yes)],
189 dnl AC_ARG_ENABLE(ltdl-install,
190 dnl [ --disable-ltdl-install do not install libltdl])
191 dnl if test x"${enable_ltdl_install+set}" != xset; then
192 dnl enable_ltdl_install=yes
193 dnl ac_configure_args="$ac_configure_args --enable-ltdl-install"
195 dnl AC_CONFIG_SUBDIRS(libltdl)
198 dnl # Allow the user to specify a list of modules to be linked
199 dnl # statically to the server.
202 AC_ARG_WITH(static_modules,
203 [ --with-static-modules=QUOTED-MODULE-LIST],[
204 for i in $withval; do
205 STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
210 dnl # Enable developer C compiler warnings
212 AC_ARG_ENABLE(developer,
213 [ --enable-developer Enables features of interest to developers.],
223 if test "x$developer" != "xno" -a -d $srcdir/CVS; then
224 dnl turn on the developer flag when taken from a CVS checkout (not a release)
228 dnl extra argument: --with-experimental-modules
230 AC_ARG_WITH(experimental-modules,
231 [ --with-experimental-modules Use experimental and unstable modules. (default=no) ],
241 dnl # These next two arguments don't actually do anything. They're
242 dnl # place holders so that the top-level configure script can tell
243 dnl # the user how to configure lower-level modules
247 dnl # extra argument: --with-rlm-FOO-lib-dir
249 AC_ARG_WITH(rlm-FOO-lib-dir,
250 [ --with-rlm-FOO-lib-dir=DIR Directory to look for library files used by module FOO],
258 dnl # extra argument: --with-rlm-FOO-include-dir
260 AC_ARG_WITH(rlm-FOO-include-dir,
261 [ --with-rlm-FOO-include-dir=DIR Directory to look for include files used by module FOO],
268 dnl See what include-style is used by the make program.
269 dnl AC_MSG_CHECKING(include style for make)
270 dnl echo "include /dev/null" > testmake.$$
271 dnl echo "all:" >> testmake.$$
272 dnl make -f testmake.$$ >/dev/null 2>&1
281 dnl rm -f testmake.$$
282 dnl AC_MSG_RESULT(" $INCLUDE")
283 dnl AC_SUBST(INCLUDE)
286 dnl #############################################################
288 dnl # 1. Checks for programs
290 dnl #############################################################
293 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
294 if test "x$ac_cv_path_PERL" = "x"; then
295 AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
297 AC_PATH_PROG(SNMPGET, snmpget)
298 if test "x$ac_cv_path_SNMPGET" = "x"; then
299 AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
302 AC_PATH_PROG(SNMPWALK, snmpwalk)
303 if test "x$ac_cv_path_SNMPWALK" = "x"; then
304 AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
307 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
309 dnl FIXME This is truly gross.
310 missing_dir=`cd $ac_aux_dir && pwd`
311 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
312 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
313 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
315 AC_PATH_PROG(LOCATE,locate)
316 AC_PATH_PROG(DIRNAME,dirname)
317 AC_PATH_PROG(GREP,grep)
319 dnl #############################################################
321 dnl # 2. Checks for libraries
323 dnl #############################################################
325 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
327 if test "x$WITH_THREADS" = "xyes"; then
328 if test $ac_cv_prog_suncc = "yes"; then
332 AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
335 dnl # pthread stuff is usually in -lpthread
336 dnl # or in -lc_r, on *BSD
338 dnl # On Some systems, we need extra pre-processor flags, to get them to
339 dnl # to do the threading properly.
341 AC_CHECK_LIB(pthread, pthread_create,
342 [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
343 LIBS="$LIBS -lpthread" ],
344 AC_CHECK_LIB(c_r, pthread_create,
345 [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
346 [ WITH_THREADS="no" ]
352 dnl # If we have NO pthread libraries, remove any knowledge of threads.
354 if test "x$WITH_THREADS" != "xyes"; then
356 ac_cv_header_pthread_h="no"
360 dnl # We need sem_init() and friends, as they're the friendliest
361 dnl # semaphore functions for threading.
363 dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
364 dnl # Some systems have them in -lsem
365 dnl # Solaris has them in -lposix4
367 AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt,
369 [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)]
373 dnl Check if we need -lsocket
374 AC_CHECK_LIB(socket, getsockname)
376 dnl Check for -lresolv
377 dnl This library may be needed later.
378 AC_CHECK_LIB(resolv, inet_aton)
380 dnl Check if we need -lnsl. Usually if we want to
381 dnl link against -lsocket we need to include -lnsl as well.
382 AC_CHECK_LIB(nsl, inet_ntoa)
384 dnl #############################################################
386 dnl # 3. Checks for header files
388 dnl #############################################################
427 AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H))
428 if test "x$ac_cv_header_regex_h" = "xyes"; then
436 ], [AC_DEFINE(HAVE_REG_EXTENDED) REGEX_EXTENDED=yes])
439 AC_SUBST(REGEX_EXTENDED)
442 dnl # other checks which require headers
444 if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
449 if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
455 dnl #############################################################
457 dnl # 4. Checks for typedefs
459 dnl #############################################################
462 dnl # Ensure that these are defined
469 dnl check for socklen_t
470 AC_CHECK_TYPE_INCLUDE([
471 #ifdef HAVE_SYS_TYPES_H
472 #include <sys/types.h>
474 #ifdef HAVE_SYS_SOCKET_H
475 #include <sys/socket.h>
479 dnl check for uint8_t
480 AC_CHECK_TYPE_INCLUDE([
481 #ifdef HAVE_INTTYPES_H
482 #include <inttypes.h>
487 ],uint8_t, unsigned char)
489 dnl check for uint16_t
490 AC_CHECK_TYPE_INCLUDE([
491 #ifdef HAVE_INTTYPES_H
492 #include <inttypes.h>
497 ],uint16_t, unsigned short)
499 dnl check for uint32_t
500 AC_CHECK_TYPE_INCLUDE([
501 #ifdef HAVE_INTTYPES_H
502 #include <inttypes.h>
507 ],uint32_t, unsigned int)
509 dnl #############################################################
511 dnl # 5. Checks for structures and functions
513 dnl #############################################################
536 RADIUSD_NEED_DECLARATIONS( \
549 dnl # check if we have utmpx.h
550 dnl # if so, check if struct utmpx has entry ut_xtime
551 dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
552 if test "x$ac_cv_header_utmpx_h" = "xyes"
554 AC_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
555 if test "x$ac_cv_type_struct_utmpx_ut_xtime" = "x"
557 AC_DEFINE(ut_xtime,ut_tv.tv_sec)
561 dnl #############################################################
563 dnl # 6. Checks for compiler characteristics
565 dnl #############################################################
568 dnl # Ensure that these are defined
573 dnl # See if this is OS/2
575 AC_MSG_CHECKING(type of OS)
578 if test "$OS" = "OS/2"; then
586 dnl # Set Default CFLAGS
588 if test "x$GCC" = "xyes"; then
589 CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
592 AC_MSG_CHECKING(for developer gcc flags)
593 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
594 devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
595 CFLAGS="$CFLAGS $devflags"
597 AC_MSG_RESULT(yes. Using $devflags)
600 CFLAGS="$CFLAGS -DNDEBUG"
605 dnl #############################################################
607 dnl # 7. Checks for library functions
609 dnl #############################################################
611 dnl Check for libcrypt
612 dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
613 AC_CHECK_LIB(crypt, crypt,
616 if test "$CRYPTLIB" != ""; then
617 AC_DEFINE(HAVE_CRYPT)
619 AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
622 dnl Check for libcipher
623 AC_CHECK_LIB(cipher, setkey,
624 CRYPTLIB="${CRYPTLIB} -lcipher"
628 if test "x$WITH_SNMP" = "xyes"; then
632 gethostbyaddrrstyle=""
633 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
634 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
635 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
636 gethostbyaddrrstyle=SYSV
638 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
639 AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
640 gethostbyaddrrstyle=GNU
643 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr(NULL, 0, 0) ], [
644 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
645 gethostbyaddrrstyle=BSD
648 if test "x$gethostbyaddrrstyle" = "x"; then
649 AC_MSG_RESULT([none! It must not exist, here.])
651 AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
655 dnl #############################################################
657 dnl # 8. Checks for system services
659 dnl #############################################################
662 dnl # Figure out where libtool is located,
665 AC_MSG_RESULT([top_builddir=$top_builddir])
666 AC_SUBST(top_builddir)
671 dnl # Work around stupid autoconf crap
673 if test "x$INCLTDL" != "x";then
674 INCLTDL='-I${top_builddir}/''libltdl'
677 dnl import libtool stuff
679 dnl #############################################################
681 dnl # Configure in any module directories.
683 dnl #############################################################
686 if test "x$EXPERIMENTAL" = "xyes"; then
687 for foo in `find src/modules -name configure -print`; do
688 bar=`echo $foo | sed 's%/configure$%%g'`
689 mysubdirs="$mysubdirs $bar"
693 dnl # Find 'configure' in ONLY the stable modules
695 for foo in `find \`cat src/modules/stable | sed 's%rlm%src/modules/rlm%g'\` -name configure -print`; do
696 bar=`echo $foo | sed 's%/configure$%%g'`
697 mysubdirs="$mysubdirs $bar"
701 dnl ############################################################
702 dnl # make modules by list
703 dnl #############################################################
705 if test "x$EXPERIMENTAL" = "xyes"; then
706 for foo in `ls src/modules | grep rlm_`; do
707 MODULES="$MODULES $foo"
711 dnl # make ONLY the stable modules
713 for foo in `cat src/modules/stable`; do
714 MODULES="$MODULES $foo"
719 dnl # Don't change the variable name here. Autoconf goes bonkers
722 AC_CONFIG_SUBDIRS($mysubdirs)
725 dnl #############################################################
727 dnl # And finally, output the results.
729 dnl #############################################################
732 dnl # Substitute whatever libraries we found to be necessary
735 AC_SUBST(INSTALLSTRIP)
737 USE_SHARED_LIBS=$enable_shared
738 AC_SUBST(USE_SHARED_LIBS)
739 USE_STATIC_LIBS=$enable_static
740 AC_SUBST(USE_STATIC_LIBS)
741 AC_SUBST(STATIC_MODULES)
742 AC_SUBST(RADIUSD_MAJOR_VERSION)
743 AC_SUBST(RADIUSD_MINOR_VERSION)
744 AC_SUBST(RADIUSD_VERSION)
749 ./src/include/build-radpaths-h \
750 ./src/main/Makefile \
751 ./src/main/checkrad.pl \
754 ./scripts/rc.radiusd \
756 ./scripts/check-radiusd-config \
757 ./scripts/radiusd.cron.daily \
758 ./scripts/radiusd.cron.monthly \
759 ./scripts/cryptpasswd \
763 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
764 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
765 AC_OUTPUT_COMMANDS([(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
766 AC_OUTPUT_COMMANDS([(cd ./scripts && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
768 cat >> src/include/autoconf.h <<EOF
770 #define HOSTINFO "$host"
771 #define RADIUSD_VERSION "$RADIUSD_VERSION"