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=8-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-dict-nocase
152 AC_ARG_WITH(dict-nocase,
153 [ --with-dict-nocase Make dictionary case-independant (default=yes)],
161 if test "X$WITH_DICT_NOCASE" = "Xyes"; then
162 AC_DEFINE(WITH_DICT_NOCASE)
165 dnl extra argument: --with-ascend-binary
167 AC_ARG_WITH(ascend-binary,
168 [ --with-ascend-binary Include support for Ascend binary filter attributes (default=yes)],
176 if test "X$ASCEND_BINARY" = "Xyes"; then
177 AC_DEFINE(ASCEND_BINARY)
180 dnl extra argument: --with-threads
183 [ --with-threads Use threads, if available. (default=yes) ],
192 dnl extra argument: --with-snmp
195 [ --with-snmp Compile in SNMP support. (default=yes)],
204 dnl AC_ARG_ENABLE(ltdl-install,
205 dnl [ --disable-ltdl-install do not install libltdl])
206 dnl if test x"${enable_ltdl_install+set}" != xset; then
207 dnl enable_ltdl_install=yes
208 dnl ac_configure_args="$ac_configure_args --enable-ltdl-install"
210 dnl AC_CONFIG_SUBDIRS(libltdl)
213 dnl # Allow the user to specify a list of modules to be linked
214 dnl # statically to the server.
217 AC_ARG_WITH(static_modules,
218 [ --with-static-modules=QUOTED-MODULE-LIST],[
219 for i in $withval; do
220 STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
225 dnl # Enable developer C compiler warnings
227 AC_ARG_ENABLE(developer,
228 [ --enable-developer Enables features of interest to developers.],
238 if test "x$developer" != "xno" -a -d $srcdir/CVS; then
239 dnl turn on the developer flag when taken from a CVS checkout (not a release)
243 dnl extra argument: --with-experimental-modules
245 AC_ARG_WITH(experimental-modules,
246 [ --with-experimental-modules Use experimental and unstable modules. (default=no) ],
256 dnl # These next two arguments don't actually do anything. They're
257 dnl # place holders so that the top-level configure script can tell
258 dnl # the user how to configure lower-level modules
262 dnl # extra argument: --with-rlm-FOO-lib-dir
264 AC_ARG_WITH(rlm-FOO-lib-dir,
265 [ --with-rlm-FOO-lib-dir=DIR Directory to look for library files used by module FOO],
273 dnl # extra argument: --with-rlm-FOO-include-dir
275 AC_ARG_WITH(rlm-FOO-include-dir,
276 [ --with-rlm-FOO-include-dir=DIR Directory to look for include files used by module FOO],
283 dnl See what include-style is used by the make program.
284 dnl AC_MSG_CHECKING(include style for make)
285 dnl echo "include /dev/null" > testmake.$$
286 dnl echo "all:" >> testmake.$$
287 dnl make -f testmake.$$ >/dev/null 2>&1
296 dnl rm -f testmake.$$
297 dnl AC_MSG_RESULT(" $INCLUDE")
298 dnl AC_SUBST(INCLUDE)
301 dnl #############################################################
303 dnl # 1. Checks for programs
305 dnl #############################################################
308 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
309 if test "x$ac_cv_path_PERL" = "x"; then
310 AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
312 AC_PATH_PROG(SNMPGET, snmpget)
313 if test "x$ac_cv_path_SNMPGET" = "x"; then
314 AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
317 AC_PATH_PROG(SNMPWALK, snmpwalk)
318 if test "x$ac_cv_path_SNMPWALK" = "x"; then
319 AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
322 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
324 dnl FIXME This is truly gross.
325 missing_dir=`cd $ac_aux_dir && pwd`
326 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
327 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
328 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
330 AC_PATH_PROG(LOCATE,locate)
331 AC_PATH_PROG(DIRNAME,dirname)
332 AC_PATH_PROG(GREP,grep)
334 dnl #############################################################
336 dnl # 2. Checks for libraries
338 dnl #############################################################
340 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
342 if test "x$WITH_THREADS" = "xyes"; then
343 if test $ac_cv_prog_suncc = "yes"; then
347 AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
350 dnl # pthread stuff is usually in -lpthread
351 dnl # or in -lc_r, on *BSD
353 dnl # On Some systems, we need extra pre-processor flags, to get them to
354 dnl # to do the threading properly.
356 AC_CHECK_LIB(pthread, pthread_create,
357 [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS" ],
358 AC_CHECK_LIB(c_r, pthread_create,
359 [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
360 [ WITH_THREADS="no" ]
366 dnl # If we have NO pthread libraries, remove any knowledge of threads.
368 if test "x$WITH_THREADS" != "xyes"; then
370 ac_cv_header_pthread_h="no"
374 dnl # We need sem_init() and friends, as they're the friendliest
375 dnl # semaphore functions for threading.
377 dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
378 dnl # Some systems have them in -lsem
379 dnl # Solaris has them in -lposix4
381 AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt,
383 [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)]
387 dnl Check if we need -lsocket
388 AC_CHECK_LIB(socket, getsockname)
390 dnl Check for -lresolv
391 dnl This library may be needed later.
392 AC_CHECK_LIB(resolv, inet_aton)
394 dnl Check if we need -lnsl. Usually if we want to
395 dnl link against -lsocket we need to include -lnsl as well.
396 AC_CHECK_LIB(nsl, inet_ntoa)
398 dnl #############################################################
400 dnl # 3. Checks for header files
402 dnl #############################################################
441 AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H))
442 if test "x$ac_cv_header_regex_h" = "xyes"; then
450 ], [AC_DEFINE(HAVE_REG_EXTENDED) REGEX_EXTENDED=yes])
453 AC_SUBST(REGEX_EXTENDED)
456 dnl # other checks which require headers
458 if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
463 if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
469 dnl #############################################################
471 dnl # 4. Checks for typedefs
473 dnl #############################################################
476 dnl # Ensure that these are defined
483 dnl check for socklen_t
484 AC_CHECK_TYPE_INCLUDE([
485 #ifdef HAVE_SYS_TYPES_H
486 #include <sys/types.h>
488 #ifdef HAVE_SYS_SOCKET_H
489 #include <sys/socket.h>
493 dnl check for uint8_t
494 AC_CHECK_TYPE_INCLUDE([
495 #ifdef HAVE_INTTYPES_H
496 #include <inttypes.h>
501 ],uint8_t, unsigned char)
503 dnl check for uint16_t
504 AC_CHECK_TYPE_INCLUDE([
505 #ifdef HAVE_INTTYPES_H
506 #include <inttypes.h>
511 ],uint16_t, unsigned short)
513 dnl check for uint32_t
514 AC_CHECK_TYPE_INCLUDE([
515 #ifdef HAVE_INTTYPES_H
516 #include <inttypes.h>
521 ],uint32_t, unsigned int)
523 dnl #############################################################
525 dnl # 5. Checks for structures and functions
527 dnl #############################################################
550 RADIUSD_NEED_DECLARATIONS( \
563 dnl # check if we have utmpx.h
564 dnl # if so, check if struct utmpx has entry ut_xtime
565 dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
566 if test "x$ac_cv_header_utmpx_h" = "xyes"
568 AC_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
569 if test "x$ac_cv_type_struct_utmpx_ut_xtime" = "x"
571 AC_DEFINE(ut_xtime,ut_tv.tv_sec)
575 dnl #############################################################
577 dnl # 6. Checks for compiler characteristics
579 dnl #############################################################
582 dnl # Ensure that these are defined
587 dnl # See if this is OS/2
589 AC_MSG_CHECKING(type of OS)
592 if test "$OS" = "OS/2"; then
600 dnl # Set Default CFLAGS
602 if test "x$GCC" = "xyes"; then
603 CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
606 AC_MSG_CHECKING(for developer gcc flags)
607 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
608 devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
609 CFLAGS="$CFLAGS $devflags"
611 AC_MSG_RESULT(yes. Using $devflags)
614 CFLAGS="$CFLAGS -DNDEBUG"
619 dnl #############################################################
621 dnl # 7. Checks for library functions
623 dnl #############################################################
625 dnl Check for libcrypt
626 dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
627 AC_CHECK_LIB(crypt, crypt,
630 if test "$CRYPTLIB" != ""; then
631 AC_DEFINE(HAVE_CRYPT)
633 AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
636 dnl Check for libcipher
637 AC_CHECK_LIB(cipher, setkey,
638 CRYPTLIB="${CRYPTLIB} -lcipher"
642 if test "x$WITH_SNMP" = "xyes"; then
646 gethostbyaddrrstyle=""
647 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
648 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
649 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
650 gethostbyaddrrstyle=SYSV
652 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
653 AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
654 gethostbyaddrrstyle=GNU
657 AC_TRY_COMPILE([#include <netdb.h>], [ gethostbyaddr(NULL, 0, 0) ], [
658 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
659 gethostbyaddrrstyle=BSD
662 if test "x$gethostbyaddrrstyle" = "x"; then
663 AC_MSG_RESULT([none! It must not exist, here.])
665 AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
669 dnl #############################################################
671 dnl # 8. Checks for system services
673 dnl #############################################################
676 dnl # Figure out where libtool is located,
679 AC_MSG_RESULT([top_builddir=$top_builddir])
680 AC_SUBST(top_builddir)
685 dnl # Work around stupid autoconf crap
687 if test "x$INCLTDL" != "x";then
688 INCLTDL='-I${top_builddir}/''libltdl'
691 dnl import libtool stuff
693 dnl #############################################################
695 dnl # Configure in any module directories.
697 dnl #############################################################
700 if test "x$EXPERIMENTAL" = "xyes"; then
701 for foo in `find src/modules -name configure -print`; do
702 bar=`echo $foo | sed 's%/configure$%%g'`
703 mysubdirs="$mysubdirs $bar"
707 dnl # Find 'configure' in ONLY the stable modules
709 for foo in `find \`cat src/modules/stable | sed 's%rlm%src/modules/rlm%g'\` -name configure -print`; do
710 bar=`echo $foo | sed 's%/configure$%%g'`
711 mysubdirs="$mysubdirs $bar"
715 dnl ############################################################
716 dnl # make modules by list
717 dnl #############################################################
719 if test "x$EXPERIMENTAL" = "xyes"; then
720 for foo in `ls src/modules | grep rlm_`; do
721 MODULES="$MODULES $foo"
725 dnl # make ONLY the stable modules
727 for foo in `cat src/modules/stable`; do
728 MODULES="$MODULES $foo"
733 dnl # Don't change the variable name here. Autoconf goes bonkers
736 AC_CONFIG_SUBDIRS($mysubdirs)
739 dnl #############################################################
741 dnl # And finally, output the results.
743 dnl #############################################################
746 dnl # Substitute whatever libraries we found to be necessary
749 AC_SUBST(INSTALLSTRIP)
751 USE_SHARED_LIBS=$enable_shared
752 AC_SUBST(USE_SHARED_LIBS)
753 USE_STATIC_LIBS=$enable_static
754 AC_SUBST(USE_STATIC_LIBS)
755 AC_SUBST(STATIC_MODULES)
756 AC_SUBST(RADIUSD_MAJOR_VERSION)
757 AC_SUBST(RADIUSD_MINOR_VERSION)
758 AC_SUBST(RADIUSD_VERSION)
763 ./src/include/build-radpaths-h \
764 ./src/main/Makefile \
765 ./src/main/checkrad.pl \
768 ./scripts/rc.radiusd \
770 ./scripts/check-radiusd-config \
771 ./scripts/radiusd.cron.daily \
772 ./scripts/radiusd.cron.monthly \
773 ./scripts/cryptpasswd \
777 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
778 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
779 AC_OUTPUT_COMMANDS([(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
780 AC_OUTPUT_COMMANDS([(cd ./scripts && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
782 cat >> src/include/autoconf.h <<EOF
784 #define HOSTINFO "$host"
785 #define RADIUSD_VERSION "$RADIUSD_VERSION"