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