Bump version to 1.1.3
[freeradius.git] / configure.in
1 dnl #############################################################
2 dnl #
3 dnl #  For information about autoconf, see:
4 dnl #
5 dnl #  http://www.gnu.org/software/autoconf/
6 dnl #  
7 dnl #  The recommended order is:
8 dnl #
9 dnl #  AC_INIT(file)
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...])
20 dnl #
21 dnl #############################################################
22
23 AC_INIT(src/main/radiusd.c)
24 AC_CONFIG_HEADER(src/include/autoconf.h)
25 AC_REVISION($Revision$)dnl
26 AC_PREREQ([2.50])
27
28 dnl # The version of the software
29 RADIUSD_MAJOR_VERSION=1
30 RADIUSD_MINOR_VERSION=1.3
31 RADIUSD_VERSION="${RADIUSD_MAJOR_VERSION}.${RADIUSD_MINOR_VERSION}"
32
33 dnl #############################################################
34 dnl #
35 dnl #  0. Checks for compiler, libtool, and command line options.
36 dnl #
37 dnl #############################################################
38
39 dnl Check for GNU cc
40 AC_PROG_CC
41
42 dnl #
43 dnl # check for AIX, to allow us to use some BSD functions
44 dnl # must be before macros that call the compiler.
45 dnl #
46 AC_AIX
47
48 AC_PROG_GCC_TRADITIONAL
49 AC_PROG_CC_SUNPRO
50 AC_PROG_RANLIB
51
52 abs_top_builddir=`pwd`
53 AC_SUBST(abs_top_builddir)
54
55 dnl # autoconf 2.50 and later
56 dnl # AC_SYS_LARGEFILE
57
58 PACKAGE=freeradius
59
60 dnl # check for system bytesex
61 dnl # AC_DEFINES WORDS_BIGENDIAN
62 AC_C_BIGENDIAN
63
64 dnl Find GNU Make.
65 AC_CHECK_PROG(GMAKE, gmake, yes, no)
66 if test $GMAKE = no; then
67   AC_PATH_PROG(MAKE, make, /usr/local/bin/make)
68 else
69   AC_PATH_PROG(MAKE, gmake, /usr/local/gnu/bin/make)
70 fi
71 makever=`$ac_cv_path_MAKE --version 2>&1 | grep "GNU Make"`
72 if test -z "$makever"; then
73   AC_MSG_ERROR(GNU Make is not installed.  Please download and install it
74                 from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
75 fi
76
77 dnl libltdl is installable
78 AC_LIBLTDL_INSTALLABLE
79
80 dnl tell Makefile to build ltdl if needed
81 if test x"$enable_ltdl_install" = x"yes"; then
82   LTDL_SUBDIRS=libltdl
83 fi
84 AC_SUBST(LTDL_SUBDIRS)
85
86 dnl use system-wide libtool, if it exists
87 AC_ARG_WITH(system-libtool, 
88 [  --with-system-libtool              try to use libtool installed in your system [default=use our own]],
89 [ AC_PATH_PROG(LIBTOOL, libtool,,$PATH:/usr/local/bin) ],
90 [
91   LIBTOOL="`pwd`/libtool"
92   AC_SUBST(LIBTOOL)
93   dnl ensure that we're looking for dlopen
94   AC_LIBTOOL_DLOPEN
95
96   dnl Figure out how to build shared libraries
97   AC_PROG_LIBTOOL
98 ])
99
100
101 dnl Put this in later, when all distributed modules use autoconf.
102 dnl AC_ARG_WITH(disablemodulefoo,
103 dnl [  --without-rlm_foo       Disables module compilation.  Module list:]
104 dnl esyscmd([find src/modules -type d -name rlm_\* -print |\
105 dnl     sed -e 's%src/modules/.*/% (sub)- %; s%.*/%- %' |\
106 dnl     awk '{print "                            "$0}']))
107
108 AC_ARG_ENABLE(strict-dependencies,
109 [  --enable-strict-dependencies  Fail configure on lack of module dependancy.])
110
111 dnl extra argument: --with-logdir
112 logdir='${localstatedir}/log/radius'
113 AC_MSG_CHECKING(logdir)
114 AC_ARG_WITH(logdir,
115 [  --with-logdir=DIR       Directory for logfiles [LOCALSTATEDIR/log/radius] ],
116 [ case "$withval" in
117     no)
118         AC_MSG_ERROR(Need logdir)
119         ;;
120     yes)
121         ;;
122     *)
123         logdir="$withval"
124         ;;
125   esac ]
126 )
127 AC_SUBST(logdir)
128 AC_MSG_RESULT($logdir)
129
130 dnl extra argument: --with-radacctdir
131 radacctdir='${logdir}/radacct'
132 AC_MSG_CHECKING(radacctdir)
133 AC_ARG_WITH(radacctdir,
134 [  --with-radacctdir=PATH  Directory for detail files [LOGDIR/radacct] ],
135 [ case "$withval" in
136     no)
137         AC_MSG_ERROR(Need radacctdir)
138         ;;
139     yes)
140         ;;
141     *)
142         radacctdir="$withval"
143         ;;
144   esac ]
145 )
146 AC_SUBST(radacctdir)
147 AC_MSG_RESULT($radacctdir)
148
149 dnl extra argument: --with-raddbdir
150 raddbdir='${sysconfdir}/raddb'
151 AC_MSG_CHECKING(raddbdir)
152 AC_ARG_WITH(raddbdir,
153 [  --with-raddbdir=DIR     Directory for config files [SYSCONFDIR/raddb] ],
154 [ case "$withval" in
155     no)
156         AC_MSG_ERROR(Need raddbdir)
157         ;;
158     yes)
159         ;;
160     *)
161         raddbdir="$withval"
162         ;;
163   esac ]
164 )
165 AC_SUBST(raddbdir)
166 AC_MSG_RESULT($raddbdir)
167
168 dnl extra argument: --with-ascend-binary
169 ASCEND_BINARY=yes
170 AC_ARG_WITH(ascend-binary,
171 [  --with-ascend-binary    Include support for Ascend binary filter attributes (default=yes)],
172 [ case "$withval" in
173     yes)
174         ;;
175     *)
176         ASCEND_BINARY=""
177   esac ]
178 )
179 if test "X$ASCEND_BINARY" = "Xyes"; then
180   AC_DEFINE(ASCEND_BINARY)
181 fi
182
183 dnl extra argument: --with-threads
184 WITH_THREADS=yes
185 AC_ARG_WITH(threads,
186 [  --with-threads          Use threads, if available.  (default=yes) ],
187 [ case "$withval" in
188     yes)
189         ;;
190     *)
191         WITH_THREADS=""
192   esac ]
193 )
194
195 dnl extra argument: --with-snmp
196 WITH_SNMP=yes
197 AC_ARG_WITH(snmp,
198 [  --with-snmp             Compile in SNMP support. (default=yes)],
199 [ case "$withval" in
200     yes)
201         ;;
202     *)
203         WITH_SNMP=no
204   esac ]
205 )
206
207 dnl extra argument: --with-large-files
208 rad_enable_largefiles=no
209 AC_ARG_WITH(large-files,
210 [  --with-large-files      Compile in large (2G+) file support. (default=no)],
211 [ case "$withval" in
212     yes)
213         rad_enable_largefiles=yes
214         ;;
215     *)
216         ;;
217   esac ]
218 )
219
220
221 dnl #
222 dnl #  Allow the user to specify a list of modules to be linked
223 dnl #  statically to the server.
224 dnl #
225 STATIC_MODULES=
226 AC_ARG_WITH(static_modules,
227 [  --with-static-modules=QUOTED-MODULE-LIST],[
228   for i in $withval; do
229     STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
230   done
231 ])
232
233 MODULES=
234 AC_ARG_WITH(modules,
235 [ --with-modules=QUOTED-MODULE-LIST],[
236  for i in $withval; do
237    MODULES="$MODULES $i"
238  done
239 ])
240
241 dnl #
242 dnl #  Enable developer C compiler warnings
243 dnl #
244 AC_ARG_ENABLE(developer,
245 [  --enable-developer               Enables features of interest to developers.],
246 [ case "$enableval" in
247     no)
248         developer=no
249         ;;
250     *)
251         developer=yes
252   esac ]
253 )
254
255 if test "x$developer" != "xno" -a -d $srcdir/CVS; then
256   dnl turn on the developer flag when taken from a CVS checkout (not a release)
257   developer="yes"
258 fi
259
260 dnl extra argument: --with-experimental-modules
261 EXPERIMENTAL=
262 AC_ARG_WITH(experimental-modules,
263 [  --with-experimental-modules      Use experimental and unstable modules. (default=no) ],
264 [ case "$withval" in
265     yes)
266         EXPERIMENTAL=yes
267         ;;
268     *)
269   esac ]
270 )
271
272 dnl #
273 dnl # extra argument: --with-openssl-includes=dir
274 dnl #
275 OPENSSL_INCLUDE_DIR=
276 AC_ARG_WITH(openssl-includes,
277 [  --with-openssl-includes=DIR      Directory to look for OpenSSL include files],
278 [ case "$withval" in
279     *) OPENSSL_INCLUDE_DIR="$withval"
280         ;;
281   esac ]
282 )
283
284 dnl #
285 dnl # extra argument: --with-openssl-libraries=dir
286 dnl #
287 OPENSSL_LIB_DIR=
288 AC_ARG_WITH(openssl-libraries,
289 [  --with-openssl-libraries=DIR     Directory to look for OpenSSL library files],
290 [ case "$withval" in
291     *) OPENSSL_LIB_DIR="$withval"
292         ;;
293   esac ]
294 )
295
296 dnl #
297 dnl #  These next two arguments don't actually do anything.  They're
298 dnl #  place holders so that the top-level configure script can tell
299 dnl #  the user how to configure lower-level modules
300 dnl #
301
302 dnl #
303 dnl # extra argument: --with-rlm-FOO-lib-dir
304 dnl #
305 AC_ARG_WITH(rlm-FOO-lib-dir,
306 [  --with-rlm-FOO-lib-dir=DIR       Directory to look for library files used by module FOO],
307 [ case "$withval" in
308     *)
309         ;;
310   esac ]
311 )
312
313 dnl #
314 dnl # extra argument: --with-rlm-FOO-include-dir
315 dnl #
316 AC_ARG_WITH(rlm-FOO-include-dir,
317 [  --with-rlm-FOO-include-dir=DIR   Directory to look for include files used by module FOO],
318 [ case "$withval" in
319     *)
320         ;;
321   esac ]
322 )
323
324 dnl See what include-style is used by the make program.
325 dnl AC_MSG_CHECKING(include style for make)
326 dnl echo "include /dev/null" > testmake.$$
327 dnl echo "all:" >> testmake.$$
328 dnl make -f testmake.$$ >/dev/null 2>&1
329 dnl if test $? = 0
330 dnl then
331 dnl     INCLUDE=include
332 dnl     IQUOTE=
333 dnl else
334 dnl     INCLUDE=.include
335 dnl     IQUOTE='"'
336 dnl fi
337 dnl rm -f testmake.$$
338 dnl AC_MSG_RESULT(" $INCLUDE")
339 dnl AC_SUBST(INCLUDE)
340 dnl AC_SUBST(IQUOTE)
341
342 dnl extra argument: --with-udpfromto
343 WITH_UDPFROMTO=no
344 AC_ARG_WITH(udpfromto,
345 [  --with-udpfromto        Compile in UDPFROMTO support. (default=no)],
346 [ case "$withval" in
347     yes)
348         WITH_UDPFROMTO=yes
349         ;;
350     *)
351         WITH_UDPFROMTO=no
352   esac ]
353 )
354
355 if test "x$WITH_UDPFROMTO" = "xyes"; then
356         AC_DEFINE(WITH_UDPFROMTO)
357 fi
358
359 dnl extra argument: --with-edir
360 dnl If using Novell eDirectory, enable UP and Novell specific code
361 AC_ARG_WITH(edir,
362 [  --with-edir             Enable Novell eDirectory integration.  (default=no) ] , [] )
363
364 dnl #############################################################
365 dnl #
366 dnl #  1. Checks for programs
367 dnl #
368 dnl #############################################################
369
370 CHECKRAD=checkrad.pl
371 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
372 if test "x$ac_cv_path_PERL" = "x"; then
373   AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
374 fi
375 AC_PATH_PROG(SNMPGET, snmpget)
376 if test "x$ac_cv_path_SNMPGET" = "x"; then
377   AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
378 fi
379
380 AC_PATH_PROG(SNMPWALK, snmpwalk)
381 if test "x$ac_cv_path_SNMPWALK" = "x"; then
382   AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
383 fi
384
385 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
386
387 dnl FIXME This is truly gross.
388 missing_dir=`cd $ac_aux_dir && pwd`
389 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
390 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
391 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
392
393 AC_PATH_PROG(LOCATE,locate)
394 AC_PATH_PROG(DIRNAME,dirname)
395 AC_PATH_PROG(GREP,grep)
396
397 dnl #############################################################
398 dnl #
399 dnl #  2. Checks for libraries
400 dnl #
401 dnl #############################################################
402
403 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
404 old_CFLAGS=$CFLAGS
405 if test "x$WITH_THREADS" = "xyes"; then 
406   if test $ac_cv_prog_suncc = "yes"; then
407     CFLAGS="$CFLAGS -mt"
408   fi
409
410   AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
411
412 dnl # 
413 dnl # pthread stuff is usually in -lpthread
414 dnl # or in -lc_r, on *BSD
415 dnl # 
416 dnl # On Some systems, we need extra pre-processor flags, to get them to
417 dnl # to do the threading properly.
418 dnl # 
419   AC_CHECK_LIB(pthread, pthread_create,
420                 [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
421                   LIBS="$LIBS -lpthread" ],
422                 AC_CHECK_LIB(c_r, pthread_create,
423                             [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
424                             [ WITH_THREADS="no" ]
425                             )
426                 )
427 fi
428
429 dnl # 
430 dnl # If we have NO pthread libraries, remove any knowledge of threads.
431 dnl # 
432 if test "x$WITH_THREADS" != "xyes"; then
433   CFLAGS=$old_CFLAGS
434   ac_cv_header_pthread_h="no"
435   WITH_THREADS=no
436 else
437   dnl #
438   dnl #  We need sem_init() and friends, as they're the friendliest
439   dnl #  semaphore functions for threading.
440   dnl #
441   dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
442   dnl # Some systems have them in -lsem
443   dnl # Solaris has them in -lposix4
444
445   AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt,
446         [],
447         [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)]
448    )
449 fi
450
451 dnl Check if we need -lsocket
452 AC_CHECK_LIB(socket, getsockname)
453
454 dnl Check for -lresolv
455 dnl This library may be needed later.
456 AC_CHECK_LIB(resolv, inet_aton)
457
458 dnl Check if we need -lnsl. Usually if we want to
459 dnl link against -lsocket we need to include -lnsl as well.
460 AC_CHECK_LIB(nsl, inet_ntoa)
461
462 dnl Check for OpenSSL libraries.
463 OPENSSL_LIBS=
464 old_LIBS=$LIBS
465 if test "x$OPENSSL_LIB_DIR" != "x"; then
466     LIBS="-L$OPENSSL_LIB_DIR $LIBS"
467 fi
468 AC_CHECK_LIB(crypto, DH_new,
469     [
470         AC_DEFINE(HAVE_LIBCRYPTO, 1,
471             [Define to 1 if you have the `crypto' library (-lcrypto).])
472         AC_CHECK_LIB(ssl, SSL_new,
473             [
474                 AC_DEFINE(HAVE_LIBSSL, 1,
475                     [Define to 1 if you have the `ssl' library (-lssl).])
476                 if test "x$OPENSSL_LIB_DIR" != "x"; then
477                     OPENSSL_LIBS="-L$OPENSSL_LIB_DIR"
478                 fi
479                 OPENSSL_LIBS="$OPENSSL_LIBS -lcrypto -lssl -lcrypto"
480             ], [])
481     ], [])
482 LIBS=$old_LIBS
483
484 dnl #############################################################
485 dnl #
486 dnl #  3. Checks for header files
487 dnl #
488 dnl #############################################################
489
490 dnl #
491 dnl # Interix requires us to set -D_ALL_SOURCE, otherwise
492 dnl # getopt will be #included, but won't link.  <sigh>
493 dnl # 
494 dnl # 
495 case "$host" in
496 *-interix*)
497         CFLAGS="$CFLAGS -D_ALL_SOURCE"
498         ;;
499 *-darwin*)
500         CFLAGS="$CFLAGS -DDARWIN"
501         ;;
502 esac
503
504 AC_HEADER_DIRENT
505 AC_HEADER_STDC
506 AC_HEADER_TIME
507 AC_HEADER_SYS_WAIT
508
509 AC_CHECK_HEADERS( \
510         unistd.h \
511         crypt.h \
512         errno.h \
513         resource.h \
514         getopt.h \
515         malloc.h \
516         utmp.h \
517         utmpx.h \
518         signal.h \
519         sys/select.h \
520         syslog.h \
521         inttypes.h \
522         stdint.h \
523         stdio.h \
524         netdb.h \
525         semaphore.h \
526         arpa/inet.h \
527         netinet/in.h \
528         sys/types.h \
529         sys/socket.h \
530         sys/time.h \
531         sys/wait.h \
532         sys/security.h \
533         fcntl.h \
534         sys/fcntl.h \
535         sys/stat.h \
536         sys/prctl.h \
537         prot.h \
538         sia.h \
539         siad.h
540 )
541
542 REGEX=no
543 AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H))
544 if test "x$ac_cv_header_regex_h" = "xyes"; then
545   REGEX_EXTENDED=no
546   REGEX=yes
547   AC_EGREP_CPP(yes,
548     [#include <regex.h>
549      #ifdef REG_EXTENDED
550        yes
551      #endif
552      ], [AC_DEFINE(HAVE_REG_EXTENDED) REGEX_EXTENDED=yes])
553 fi
554 AC_SUBST(REGEX)
555 AC_SUBST(REGEX_EXTENDED)
556
557 dnl #
558 dnl #  other checks which require headers
559 dnl #
560 if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
561 then
562   AC_DEFINE(OSFC2)
563 fi
564
565 if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
566 then
567   AC_DEFINE(OSFSIA)
568 fi
569
570 dnl Check for OpenSSL includes.
571 OPENSSL_INCLUDE="-DNO_OPENSSL"
572 if test "x$OPENSSL_LIBS" = "x"; then
573     AC_MSG_WARN([skipping test for openssl/ssl.h])
574 else
575     old_CPPFLAGS=$CPPFLAGS
576     if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
577         CPPFLAGS="$CPPFLAGS -I$OPENSSL_INCLUDE_DIR"
578     fi
579     dnl # stupid RedHat shit
580     CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
581     AC_CHECK_HEADERS( \
582         openssl/ssl.h \
583         openssl/crypto.h \
584         openssl/err.h \
585         openssl/engine.h,
586         [],
587         OPENSSL_LIBS=
588     )
589     if test "x$OPENSSL_LIBS" != "x"; then
590         AC_MSG_CHECKING([for OpenSSL version >= 0.9.7])
591         AC_EGREP_CPP(yes,
592             [#include <openssl/crypto.h>
593              #if (OPENSSL_VERSION_NUMBER >= 0x00907000L)
594              yes
595              #endif
596             ], goodssl="yes")
597         if test "x$goodssl" != "xyes"; then
598             AC_MSG_RESULT(no)
599             OPENSSL_LIBS=
600         else
601             AC_MSG_RESULT(yes)
602             if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
603                 OPENSSL_INCLUDE="-I$OPENSSL_INCLUDE_DIR -DOPENSSL_NO_KRB5"
604             else
605                 OPENSSL_INCLUDE="-DOPENSSL_NO_KRB5"
606             fi
607         fi
608     fi
609     CPPFLAGS=$old_CPPFLAGS
610 fi
611 AC_SUBST(OPENSSL_INCLUDE)
612 AC_SUBST(OPENSSL_LIBS)
613 export OPENSSL_LIBS
614
615 dnl #############################################################
616 dnl #
617 dnl #  4. Checks for typedefs
618 dnl #
619 dnl #############################################################
620
621 dnl #
622 dnl # Ensure that these are defined
623 dnl #
624 AC_TYPE_OFF_T 
625 AC_TYPE_PID_T
626 AC_TYPE_SIZE_T
627 AC_TYPE_UID_T
628
629 dnl check for socklen_t
630 AC_CHECK_TYPE_INCLUDE([
631 #ifdef HAVE_SYS_TYPES_H
632 #include <sys/types.h>
633 #endif
634 #ifdef HAVE_SYS_SOCKET_H
635 #include <sys/socket.h>
636 #endif
637 ],socklen_t, int)
638
639 dnl check for uint8_t
640 AC_CHECK_TYPE_INCLUDE([
641 #ifdef HAVE_INTTYPES_H
642 #include <inttypes.h>
643 #endif
644 #ifdef HAVE_STDINT_H
645 #include <stdint.h>
646 #endif
647 ],uint8_t, unsigned char)
648
649 dnl check for uint16_t
650 AC_CHECK_TYPE_INCLUDE([
651 #ifdef HAVE_INTTYPES_H
652 #include <inttypes.h>
653 #endif
654 #ifdef HAVE_STDINT_H
655 #include <stdint.h>
656 #endif
657 ],uint16_t, unsigned short)
658
659 dnl check for uint32_t
660 AC_CHECK_TYPE_INCLUDE([
661 #ifdef HAVE_INTTYPES_H
662 #include <inttypes.h>
663 #endif
664 #ifdef HAVE_STDINT_H
665 #include <stdint.h>
666 #endif
667 ],uint32_t, unsigned int)
668
669 dnl #############################################################
670 dnl #
671 dnl #  5. Checks for structures and functions
672 dnl #
673 dnl #############################################################
674 AC_CHECK_FUNCS( \
675         getopt_long \
676         lockf \
677         strsignal \
678         sigaction \
679         sigprocmask \
680         pthread_sigmask \
681         snprintf \
682         vsnprintf \
683         setsid \
684         strncasecmp \
685         strcasecmp \
686         localtime_r \
687         ctime_r \
688         gmtime_r \
689         strsep \
690         inet_aton \
691         inet_pton \
692         inet_ntop \
693         gethostname \
694         setlinebuf \
695         setvbuf \
696         getusershell \
697         initgroups \
698         closefrom
699 )
700 RADIUSD_NEED_DECLARATIONS( \
701         crypt \
702         strncasecmp \
703         strcasecmp \
704         inet_aton \
705         gethostname \
706         setlinebuf \
707         getusershell \
708         endusershell
709 )
710
711 AC_TYPE_SIGNAL
712
713 dnl # check if we have utmpx.h
714 dnl # if so, check if struct utmpx has entry ut_xtime
715 dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
716 if test "x$ac_cv_header_utmpx_h" = "xyes"
717 then
718  AC_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
719  if test "x$ac_cv_type_struct_utmpx_has_ut_xtime" = "x"
720  then
721    AC_DEFINE(ut_xtime,ut_tv.tv_sec)
722  fi
723 fi
724
725 dnl # struct ip_pktinfo
726 AC_CHECK_STRUCT_HAS_MEMBER([#include <netinet/in.h>], [struct in_pktinfo], ipi_addr)
727 if test "x$ac_cv_type_struct_in_pktinfo_has_ipi_addr" = "xyes"
728 then
729         AC_DEFINE(HAVE_IP_PKTINFO)
730 fi
731
732 dnl #############################################################
733 dnl #
734 dnl #  6. Checks for compiler characteristics
735 dnl #
736 dnl #############################################################
737
738 dnl #
739 dnl # Ensure that these are defined
740 dnl #
741 AC_C_CONST 
742
743 dnl #
744 dnl # See if this is OS/2
745 dnl #
746 AC_MSG_CHECKING(type of OS)
747 OS=`uname -s`
748 AC_MSG_RESULT($OS)
749 if test "$OS" = "OS/2"; then
750         LIBPREFIX=
751 else
752         LIBPREFIX=lib
753 fi
754 AC_SUBST(LIBPREFIX)
755
756 dnl #
757 dnl # Set Default CFLAGS
758 dnl #
759 if test "x$GCC" = "xyes"; then
760     CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
761 fi
762
763 AC_MSG_CHECKING(for developer gcc flags)
764 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
765   devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -W -Wredundant-decls -Wundef"
766   CFLAGS="$CFLAGS $devflags"
767   INSTALLSTRIP=""
768   AC_MSG_RESULT(yes.  Using $devflags)
769 else
770   devflags=""
771   CFLAGS="$CFLAGS -DNDEBUG"
772   INSTALLSTRIP="-s"
773   AC_MSG_RESULT(no.)
774 fi
775
776 dnl #############################################################
777 dnl #
778 dnl #  7. Checks for library functions
779 dnl #
780 dnl #############################################################
781
782 dnl Check for libcrypt
783 dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
784 AC_CHECK_LIB(crypt, crypt,
785   CRYPTLIB="-lcrypt"
786 )
787 if test "$CRYPTLIB" != ""; then
788   AC_DEFINE(HAVE_CRYPT)
789 else
790   AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
791 fi
792
793 dnl Check for libcipher
794 AC_CHECK_LIB(cipher, setkey,
795    CRYPTLIB="${CRYPTLIB} -lcipher"
796 )
797 AC_SUBST(CRYPTLIB)
798
799 if test "x$WITH_SNMP" = "xyes"; then
800   SNMP_CHECKS
801 fi
802
803 dnl Check the style of gethostbyaddr, in order of preference
804 dnl GNU (_r eight args)
805 dnl SYSV (_r six args)
806 dnl BSD (three args, may not be thread safe)
807 dnl Tru64 has BSD version, but it is thread safe
808 dnl     http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1739____.HTM
809 dnl We need #stdio.h to define NULL on FreeBSD (at least)
810 gethostbyaddrrstyle=""
811 AC_MSG_CHECKING([gethostbyaddr_r() syntax])
812 case "$host" in
813 *-freebsd*)
814         AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
815         gethostbyaddrrstyle=BSD
816         AC_MSG_WARN([FreeBSD overridden to BSD-style])
817         ;;
818 esac
819 if test "x$gethostbyaddrrstyle" = "x"; then
820         AC_TRY_LINK([
821 #include <stdio.h>
822 #include <netdb.h>
823 ], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
824         AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE)
825         gethostbyaddrrstyle=GNU
826 ])
827 fi
828 if test "x$gethostbyaddrrstyle" = "x"; then
829         AC_TRY_LINK([
830 #include <stdio.h>
831 #include <netdb.h>
832 ], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
833                 AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE)
834                 gethostbyaddrrstyle=SYSV
835         ])
836 fi
837 if test "x$gethostbyaddrrstyle" = "x"; then
838         AC_TRY_LINK([
839 #include <stdio.h>
840 #include <netdb.h>
841 ], [ gethostbyaddr(NULL, 0, 0)  ], [
842                 AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE)
843                 gethostbyaddrrstyle=BSD
844         ])
845 fi
846
847 if test "x$gethostbyaddrrstyle" = "x"; then
848         AC_MSG_RESULT([none!  It must not exist, here.])
849 else
850         AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
851 fi
852
853 if test "x$gethostbyaddrrstyle" = "xBSD"; then
854         AC_MSG_WARN([ ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** ])
855 fi
856
857 dnl Check the style of gethostbyname, in order of preference
858 dnl GNU (_r seven args)
859 dnl SYSV (_r five args)
860 dnl BSD (two args, may not be thread safe)
861 dnl Tru64 has BSD version, but it _is_ thread safe
862 dnl     http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1946____.HTM
863 dnl We need #stdio.h to define NULL on FreeBSD (at least)
864 gethostbynamerstyle=""
865 AC_MSG_CHECKING([gethostbyname_r() syntax])
866 AC_TRY_LINK([
867 #include <stdio.h>
868 #include <netdb.h>
869 ], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [
870         AC_DEFINE(GETHOSTBYNAMERSTYLE, GNUSTYLE)
871         gethostbynamerstyle=GNU
872 ])
873 if test "x$gethostbynamerstyle" = "x"; then
874         AC_TRY_LINK([
875 #include <stdio.h>
876 #include <netdb.h>
877 ], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [
878                 AC_DEFINE(GETHOSTBYNAMERSTYLE, SYSVSTYLE)
879                 gethostbynamerstyle=SYSV
880         ])
881 fi
882 if test "x$gethostbynamerstyle" = "x"; then
883         AC_TRY_LINK([
884 #include <stdio.h>
885 #include <netdb.h>
886 ], [ gethostbyname(NULL)  ], [
887                 AC_DEFINE(GETHOSTBYNAMERSTYLE, BSDSTYLE)
888                 gethostbynamerstyle=BSD
889         ])
890 fi
891
892 if test "x$gethostbynamerstyle" = "x"; then
893         AC_MSG_RESULT([none!  It must not exist, here.])
894 else
895         AC_MSG_RESULT([${gethostbynamerstyle}-style])
896 fi
897
898 if test "x$gethostbynamerstyle" = "xBSD"; then
899         AC_MSG_WARN([ ****** BSD-style gethostbyname might NOT be thread-safe! ****** ])
900 fi
901
902 dnl check for non-posix solaris ctime_r (extra buflen int arg)
903 ctimerstyle=""
904 AC_MSG_CHECKING([ctime_r() syntax])
905 AC_TRY_LINK([
906 #include <time.h>
907 ], [ ctime_r(NULL, NULL, 0) ], [
908         AC_DEFINE(CTIMERSTYLE, SOLARISSTYLE)
909         ctimerstyle="SOLARIS"
910 ])
911 if test "x$ctimerstyle" = "x"; then
912         AC_TRY_LINK([
913 #include <time.h>
914 ], [ ctime_r(NULL, NULL) ], [
915                 AC_DEFINE(CTIMERSTYLE, POSIXSTYLE)
916                 ctimerstyle="POSIX"
917         ])
918 fi
919
920 if test "x$ctimerstyle" = "x"; then
921         AC_MSG_RESULT([none!  It must not exist, here.])
922 else
923         AC_MSG_RESULT([${ctimerstyle}-style])
924 fi
925
926
927 dnl If configuring with large file support, determine the right flags to
928 dnl use based on the platform.  This is the wrong approach; autoconf 2.50
929 dnl comes with a macro that takes the right approach.  But this works well
930 dnl enough until we switch to autoconf 2.50 or later.
931 if test x"$rad_enable_largefiles" = xyes ; then
932     AC_MSG_CHECKING(for largefile linkage)
933     case "$host" in
934     *-aix4.[01]*)
935         AC_MSG_RESULT(no)
936         AC_MSG_ERROR([AIX before 4.2 does not support large files])
937         ;;
938     *-aix4*)
939         AC_MSG_RESULT(ok)
940         LFS_CFLAGS="-D_LARGE_FILES"
941         LFS_LDFLAGS=""
942         LFS_LIBS=""
943         ;;
944     *-hpux*)
945         AC_MSG_RESULT(ok)
946         LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
947         LFS_LDFLAGS=""
948         LFS_LIBS=""
949         ;;
950     *-irix*)
951         AC_MSG_RESULT(no)
952         AC_MSG_ERROR([Large files not supported on this platform])
953         ;;
954     *-linux*)
955         AC_MSG_RESULT(maybe)
956         LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
957         LFS_LDFLAGS=""
958         LFS_LIBS=""
959         AC_DEFINE([_GNU_SOURCE], 1,
960                   [Some versions of glibc need this defined for pread/pwrite.])
961         ;;
962     *-solaris*)
963         AC_MSG_RESULT(ok)
964         AC_PATH_PROG(GETCONF, getconf)
965         if test -z "$GETCONF" ; then
966             AC_MSG_ERROR([getconf required to configure large file support])
967         fi
968         LFS_CFLAGS=`$GETCONF LFS_CFLAGS`
969         LFS_LDFLAGS=`$GETCONF LFS_LDFLAGS`
970         LFS_LIBS=`$GETCONF LFS_LIBS`
971         ;;
972     *)
973         AC_MSG_RESULT(maybe)
974         LFS_CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
975         LFS_LDFLAGS=""
976         LFS_LIBS=""
977         ;;
978     esac
979     AC_SUBST(LFS_CFLAGS)
980     AC_SUBST(LFS_LDFLAGS)
981     AC_SUBST(LFS_LIBS)
982 fi
983
984 AC_SUBST(HOSTINFO, $host)
985
986 dnl #############################################################
987 dnl #
988 dnl #  8. Checks for system services
989 dnl #
990 dnl #############################################################
991
992 dnl #
993 dnl # Figure out where libtool is located,
994 dnl #
995 top_builddir=`pwd`
996 export top_builddir
997 AC_MSG_RESULT([top_builddir=$top_builddir])
998 dnl # AC_SUBST(top_builddir)
999 AC_SUBST(LIBLTDL)
1000 AC_SUBST(INCLTDL)
1001
1002 dnl import libtool stuff
1003
1004 dnl #############################################################
1005 dnl #
1006 dnl #  Configure in any module directories.
1007 dnl #
1008 dnl #############################################################
1009
1010 mysubdirs=
1011 if test "x$EXPERIMENTAL" = "xyes"; then
1012   bar=`ls -1 src/modules/rlm_*/configure | sed 's%/configure%%'`
1013   dnl # get rid of LF's.
1014   mysubdirs=`echo $bar`
1015 else
1016   dnl # 
1017   dnl # Find 'configure' in ONLY the stable modules
1018   dnl # 
1019   for bar in `cat src/modules/stable`; do
1020     if test -f src/modules/$bar/configure; then
1021       mysubdirs="$mysubdirs src/modules/$bar"
1022     fi
1023   done
1024 fi
1025
1026 dnl ############################################################
1027 dnl # make modules by list
1028 dnl #############################################################
1029 if test "x$EXPERIMENTAL" = "xyes"; then
1030   for foo in `ls -1 src/modules | grep rlm_`; do
1031     MODULES="$MODULES $foo"
1032   done
1033 else
1034    dnl #
1035    dnl # make ONLY the stable modules
1036    dnl #
1037    for foo in `cat src/modules/stable`; do
1038     MODULES="$MODULES $foo"
1039    done
1040 fi
1041
1042 dnl #
1043 dnl #  Don't change the variable name here.  Autoconf goes bonkers
1044 dnl #  if you do.
1045 dnl #
1046 AC_CONFIG_SUBDIRS($LTDL_SUBDIRS $mysubdirs)
1047 AC_SUBST(MODULES)
1048
1049 dnl #############################################################
1050 dnl #
1051 dnl #  And finally, output the results.
1052 dnl #
1053 dnl #############################################################
1054
1055 dnl #
1056 dnl #  Substitute whatever libraries we found to be necessary
1057 dnl #
1058 AC_SUBST(LIBS)
1059 AC_SUBST(INSTALLSTRIP)
1060
1061 USE_SHARED_LIBS=$enable_shared
1062 AC_SUBST(USE_SHARED_LIBS)
1063 USE_STATIC_LIBS=$enable_static
1064 AC_SUBST(USE_STATIC_LIBS)
1065 AC_SUBST(STATIC_MODULES)
1066 AC_SUBST(RADIUSD_MAJOR_VERSION)
1067 AC_SUBST(RADIUSD_MINOR_VERSION)
1068 AC_SUBST(RADIUSD_VERSION)
1069 export CFLAGS LIBS
1070
1071 AC_OUTPUT(\
1072         ./Make.inc \
1073         ./src/include/build-radpaths-h \
1074         ./src/main/Makefile \
1075         ./src/main/checkrad.pl \
1076         ./src/main/radlast \
1077         ./src/main/radtest \
1078         ./scripts/rc.radiusd \
1079         ./scripts/radwatch \
1080         ./scripts/check-radiusd-config \
1081         ./scripts/radiusd.cron.daily \
1082         ./scripts/radiusd.cron.monthly \
1083         ./scripts/cryptpasswd \
1084         ./raddb/dictionary \
1085         ./raddb/radiusd.conf
1086 )
1087
1088 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
1089 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
1090 AC_OUTPUT_COMMANDS([(cd ./src/main   && chmod +x checkrad.pl radlast radtest)])
1091 AC_OUTPUT_COMMANDS([(cd ./scripts    && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])