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