Made 'WITH_THREAD_POOL=yes' the default, and removed the configure
[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
27 dnl # The version of the software, second beta, is 0.2
28 RADIUSD_VERSION=0.2
29
30 dnl #############################################################
31 dnl #
32 dnl #  0. Checks for compiler, libtool, and command line options.
33 dnl #
34 dnl #############################################################
35
36 dnl Check for GNU cc
37 AC_PROG_CC
38 AC_PROG_GCC_TRADITIONAL
39 AC_PROG_CC_SUNPRO
40 AC_PROG_RANLIB
41
42 PACKAGE=freeradius
43
44 dnl Find GNU Make.
45 AC_CHECK_PROG(GMAKE, gmake, yes, no)
46 if test $GMAKE = no; then
47   AC_PATH_PROG(MAKE, make, /usr/local/bin/make)
48 else
49   AC_PATH_PROG(MAKE, gmake, /usr/local/gnu/bin/make)
50 fi
51 makever=`$ac_cv_path_MAKE --version 2>&1 | grep "GNU Make"`
52 if test -z "$makever"; then
53   AC_MSG_ERROR(GNU Make is not installed.  Please download and install it
54                 from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
55 fi
56
57 dnl libltdl is installable
58 AC_LIBLTDL_INSTALLABLE
59
60 dnl ensure that we're looking for dlopen
61 AC_LIBTOOL_DLOPEN
62
63 dnl Figure out how to build shared libraries
64 AC_PROG_LIBTOOL
65
66 dnl Put this in later, when all distributed modules use autoconf.
67 dnl AC_ARG_WITH(disablemodulefoo,
68 dnl [  --without-rlm_foo       Disables module compilation.  Module list:]
69 dnl esyscmd([find src/modules -type d -name rlm_\* -print |\
70 dnl     sed -e 's%src/modules/.*/% (sub)- %; s%.*/%- %' |\
71 dnl     awk '{print "                            "$0}']))
72
73 AC_ARG_ENABLE(strict-dependencies,
74 [  --enable-strict-dependencies  Fail configure on lack of module dependancy.])
75
76 AC_ARG_WITH(fooincludedir,
77 [  --with-FOO-include-dir=DIR   Dir for includes for FOO, module dependancy.])
78
79 AC_ARG_WITH(foolibdir,
80 [  --with-FOO-lib-dir=DIR  Dir for libraries for FOO, module dependancy.])
81
82 dnl extra argument: --with-logdir
83 logdir='${localstatedir}/log/radius'
84 AC_MSG_CHECKING(logdir)
85 AC_ARG_WITH(logdir,
86 [  --with-logdir=DIR       Directory for logfiles [LOCALSTATEDIR/log/radius] ],
87 [ case "$withval" in
88     no)
89         AC_MSG_ERROR(Need logdir)
90         ;;
91     yes)
92         ;;
93     *)
94         logdir="$withval"
95         ;;
96   esac ]
97 )
98 AC_SUBST(logdir)
99 AC_MSG_RESULT($logdir)
100
101 dnl extra argument: --with-radacctdir
102 radacctdir='${logdir}/radacct'
103 AC_MSG_CHECKING(radacctdir)
104 AC_ARG_WITH(radacctdir,
105 [  --with-radacctdir=PATH  Directory for detail files [LOGDIR/radacct] ],
106 [ case "$withval" in
107     no)
108         AC_MSG_ERROR(Need radacctdir)
109         ;;
110     yes)
111         ;;
112     *)
113         radacctdir="$withval"
114         ;;
115   esac ]
116 )
117 AC_SUBST(radacctdir)
118 AC_MSG_RESULT($radacctdir)
119
120 dnl extra argument: --with-raddbdir
121 raddbdir='${sysconfdir}/raddb'
122 AC_MSG_CHECKING(raddbdir)
123 AC_ARG_WITH(raddbdir,
124 [  --with-raddbdir=DIR     Directory for config files [SYSCONFDIR/raddb] ],
125 [ case "$withval" in
126     no)
127         AC_MSG_ERROR(Need raddbdir)
128         ;;
129     yes)
130         ;;
131     *)
132         raddbdir="$withval"
133         ;;
134   esac ]
135 )
136 AC_SUBST(raddbdir)
137 AC_MSG_RESULT($raddbdir)
138
139 dnl extra argument: --with-dict-nocase
140 WITH_DICT_NOCASE=yes
141 AC_ARG_WITH(dict-nocase,
142 [  --with-dict-nocase      Make dictionary case-independant (default=yes)],
143 [  case "$withval" in
144     yes)
145         ;;
146     *)
147         WITH_DICT_NOCASE=""
148   esac ]
149 )
150 if test "X$WITH_DICT_NOCASE" = "Xyes"; then
151   AC_DEFINE(WITH_DICT_NOCASE)
152 fi
153
154 dnl extra argument: --with-ascend-binary
155 ASCEND_BINARY=yes
156 AC_ARG_WITH(ascend-binary,
157 [  --with-ascend-binary    Include support for Ascend binary filter attributes (default=yes)],
158 [ case "$withval" in
159     yes)
160         ;;
161     *)
162         ASCEND_BINARY=""
163   esac ]
164 )
165 if test "X$ASCEND_BINARY" = "Xyes"; then
166   AC_DEFINE(ASCEND_BINARY)
167 fi
168
169 dnl extra argument: --with-threads
170 WITH_THREADS=yes
171 WITH_THREAD_POOL=yes
172 AC_ARG_WITH(threads,
173 [  --with-threads          Use threads, if available.  (default=yes) ],
174 [ case "$withval" in
175     yes)
176         ;;
177     *)
178         WITH_THREADS=""
179         WITH_THREAD_POOL=""
180   esac ]
181 )
182
183 dnl extra argument: --with-snmp
184 WITH_SNMP=yes
185 AC_ARG_WITH(snmp,
186 [  --with-snmp             Compile in SNMP support. (default=yes)],
187 [ case "$withval" in
188     yes)
189         ;;
190     *)
191         WITH_SNMP=no
192   esac ]
193 )
194
195 AC_ARG_ENABLE(ltdl-install,
196 [  --disable-ltdl-install  do not install libltdl])
197 if test x"${enable_ltdl_install+set}" != xset; then
198   enable_ltdl_install=yes
199   ac_configure_args="$ac_configure_args --enable-ltdl-install"
200 fi
201 AC_CONFIG_SUBDIRS(libltdl)
202
203 dnl #
204 dnl #  Allow the user to specify a list of modules to be linked
205 dnl #  statically to the server.
206 dnl #
207 STATIC_MODULES=
208 AC_ARG_WITH(static_modules,
209 [  --with-static-modules=QUOTED-MODULE-LIST],[
210   for i in $withval; do
211     STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
212   done
213 ])
214
215 dnl #
216 dnl #  Enable developer C compiler warnings
217 dnl #
218 AC_ARG_ENABLE(developer,
219 [  --enable-developer      Turns on flags of interest to developers.],
220 [ case "$withval" in
221     *)
222         developer=no
223         ;;
224     yes)
225         developer=yes
226   esac ]
227 )
228
229 if test "x$developer" != "xno" -a -d $srcdir/CVS; then
230   dnl turn on the developer flag when taken from a CVS checkout (not a release)
231   developer="yes"
232 fi
233
234 dnl #
235 dnl #  These next two arguments don't actually do anything.  They're
236 dnl #  place holders so that the top-level configure script can tell
237 dnl #  the user how to configure lower-level modules
238 dnl #
239
240 dnl #
241 dnl # extra argument: --with-rlm-FOO-lib-dir
242 dnl #
243 AC_ARG_WITH(rlm-FOO-lib-dir,
244 [  --with-rlm-FOO-lib-dir=DIR       Directory to look for library files used by module FOO],
245 [ case "$withval" in
246     *)
247         ;;
248   esac ]
249 )
250
251 dnl #
252 dnl # extra argument: --with-rlm-FOO-include-dir
253 dnl #
254 AC_ARG_WITH(rlm-FOO-include-dir,
255 [  --with-rlm-FOO-include-dir=DIR   Directory to look for include files used by module FOO],
256 [ case "$withval" in
257     *)
258         ;;
259   esac ]
260 )
261
262 dnl See what include-style is used by the make program.
263 dnl AC_MSG_CHECKING(include style for make)
264 dnl echo "include /dev/null" > testmake.$$
265 dnl echo "all:" >> testmake.$$
266 dnl make -f testmake.$$ >/dev/null 2>&1
267 dnl if test $? = 0
268 dnl then
269 dnl     INCLUDE=include
270 dnl     IQUOTE=
271 dnl else
272 dnl     INCLUDE=.include
273 dnl     IQUOTE='"'
274 dnl fi
275 dnl rm -f testmake.$$
276 dnl AC_MSG_RESULT(" $INCLUDE")
277 dnl AC_SUBST(INCLUDE)
278 dnl AC_SUBST(IQUOTE)
279
280 dnl #############################################################
281 dnl #
282 dnl #  1. Checks for programs
283 dnl #
284 dnl #############################################################
285
286 AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
287 if test ! -x $ac_cv_path_PERL; then
288   AC_MSG_ERROR(perl not found - fatal)
289 fi
290 AC_PATH_PROG(SNMPGET, snmpget, /usr/local/bin/snmpget)
291 AC_PATH_PROG(SNMPWALK, snmpwalk, /usr/local/bin/snmpwalk)
292 AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
293
294 dnl FIXME This is truly gross.
295 missing_dir=`cd $ac_aux_dir && pwd`
296 AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
297 AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
298 AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
299
300 AC_PATH_PROG(LOCATE,locate)
301 AC_PATH_PROG(DIRNAME,dirname)
302 AC_PATH_PROG(GREP,grep)
303
304 dnl #
305 dnl # check for AIX, to allow us to use some BSD functions
306 dnl # must be before macros that call the compiler.
307 dnl #
308 AC_AIX
309
310 dnl #############################################################
311 dnl #
312 dnl #  2. Checks for libraries
313 dnl #
314 dnl #############################################################
315
316 dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
317 PTHREADLIB=
318 if test "$WITH_THREADS" = "yes"; then 
319   if test $ac_cv_prog_suncc = "yes"; then
320     CFLAGS="$CFLAGS -mt"
321   fi
322
323   AC_CHECK_HEADERS(pthread.h)
324
325   if test "X$ac_cv_header_pthread_h" = "X"; then
326     AC_MSG_ERROR("You are trying to use threads without a POSIX <pthread.h>")
327   fi
328
329 dnl # 
330 dnl # pthread stuff is usually in -lpthread
331 dnl # 
332   AC_CHECK_LIB(pthread, pthread_join,
333     PTHREADLIB="-lpthread"
334   )
335
336 dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.  :\
337
338   AC_SEARCH_LIBS(sem_init, pthread rt,
339         [ 
340         dnl    Er, this usage of $ac_cv_search_sem_init may be unfounded 
341         dnl    chumminess with the autoconf internals.  -chad
342         PTHREADLIB="$PTHREADLIB $ac_cv_search_sem_init"
343         ],
344         [],
345         "-lpthread"
346   )
347
348 dnl # 
349 dnl # Except for *BSD, where it's in -lc_r,
350 dnl # and where we've got to add extra CFLAGS.
351 dnl # 
352   if test "X$PTHREADLIB" = "X"; then
353     SAVED_CFLAGS=$CFLAGS
354     CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE"
355     AC_CHECK_LIB(c_r, pthread_create,
356       PTHREADLIB="-lc_r"
357     )
358   fi
359
360 dnl # Set libs, etc, if we have them.
361   if test "x$PTHREADLIB" != "x"; then
362     LIBS="$LIBS $PTHREADLIB"
363     CFLAGS="$CFLAGS -D_REENTRANT"
364   fi
365 fi
366
367 dnl # 
368 dnl # If we have NO pthread libraries, remove any knowledge of threads.
369 dnl # 
370 if test "x$PTHREADLIB" = "x"; then
371   CFLAGS=$SAVED_CFLAGS
372   ac_cv_header_pthread_h="no"
373   WITH_THREADS=no
374   WITH_THREAD_POOL=no
375 fi
376
377 dnl Check if we need -lsocket
378 AC_CHECK_LIB(socket, getsockname)
379
380 dnl Check for -lresolv
381 dnl This library may be needed later.
382 AC_CHECK_LIB(resolv, inet_aton)
383
384 dnl Check if we need -lnsl. Usually if we want to
385 dnl link against -lsocket we need to include -lnsl as well.
386 AC_CHECK_LIB(nsl, inet_ntoa)
387
388 dnl #############################################################
389 dnl #
390 dnl #  3. Checks for header files
391 dnl #
392 dnl #############################################################
393
394 AC_HEADER_DIRENT
395 AC_HEADER_STDC
396 AC_HEADER_TIME
397 AC_HEADER_SYS_WAIT
398
399 AC_CHECK_HEADERS( \
400         unistd.h \
401         crypt.h \
402         errno.h \
403         resource.h \
404         getopt.h \
405         malloc.h \
406         utmp.h \
407         utmpx.h \
408         signal.h \
409         sys/select.h \
410         syslog.h \
411         inttypes.h \
412         stdint.h \
413         stdio.h \
414         netdb.h \
415         semaphore.h \
416         arpa/inet.h \
417         netinet/in.h \
418         sys/types.h \
419         sys/socket.h \
420         sys/time.h
421 )
422
423 REGEX=no
424 AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H))
425 if test "x$ac_cv_header_regex_h" = "xyes"; then
426   REGEX_EXTENDED=no
427   REGEX=yes
428   AC_EGREP_CPP(yes,
429     [#include <regex.h>
430      #ifdef REG_EXTENDED
431        yes
432      #endif
433      ], [AC_DEFINE(HAVE_REG_EXTENDED) REGEX_EXTENDED=yes])
434 fi
435 AC_SUBST(REGEX)
436 AC_SUBST(REGEX_EXTENDED)
437
438
439 dnl #############################################################
440 dnl #
441 dnl #  4. Checks for typedefs
442 dnl #
443 dnl #############################################################
444
445 dnl #
446 dnl # Ensure that these are defined
447 dnl #
448 AC_TYPE_OFF_T 
449 AC_TYPE_PID_T
450 AC_TYPE_SIZE_T
451 AC_TYPE_UID_T
452
453 dnl check for socklen_t
454 AC_CHECK_TYPE_INCLUDE([
455 #ifdef HAVE_SYS_TYPES_H
456 #include <sys/types.h>
457 #endif
458 #ifdef HAVE_SYS_SOCKET_H
459 #include <sys/socket.h>
460 #endif
461 ],socklen_t, int)
462
463 dnl check for uint8_t
464 AC_CHECK_TYPE_INCLUDE([
465 #ifdef HAVE_INTTYPES_H
466 #include <inttypes.h>
467 #endif
468 #ifdef HAVE_STDINT_H
469 #include <stdint.h>
470 #endif
471 ],uint8_t, unsigned char)
472
473 dnl check for uint32_t
474 AC_CHECK_TYPE_INCLUDE([
475 #ifdef HAVE_INTTYPES_H
476 #include <inttypes.h>
477 #endif
478 #ifdef HAVE_STDINT_H
479 #include <stdint.h>
480 #endif
481 ],uint32_t, unsigned int)
482
483 dnl #############################################################
484 dnl #
485 dnl #  5. Checks for structures and functions
486 dnl #
487 dnl #############################################################
488 AC_CHECK_FUNCS( \
489         getopt_long \
490         lockf \
491         strsignal \
492         sigaction \
493         sigprocmask \
494         snprintf \
495         vsnprintf \
496         setsid \
497         strncasecmp \
498         strcasecmp \
499         strsep \
500         inet_aton \
501         gethostname \
502         setlinebuf \
503         setvbuf \
504         sem_init \
505         getusershell
506 )
507 RADIUSD_NEED_DECLARATIONS( \
508         crypt \
509         strncasecmp \
510         strcasecmp \
511         inet_aton \
512         gethostname \
513         setlinebuf \
514         getusershell \
515         endusershell
516 )
517
518 AC_TYPE_SIGNAL
519
520 dnl #############################################################
521 dnl #
522 dnl #  6. Checks for compiler characteristics
523 dnl #
524 dnl #############################################################
525
526 dnl #
527 dnl # Ensure that these are defined
528 dnl #
529 AC_C_CONST 
530
531 dnl #
532 dnl # See if this is OS/2
533 dnl #
534 AC_MSG_CHECKING(type of OS)
535 OS=`uname -s`
536 AC_MSG_RESULT($OS)
537 if test "$OS" = "OS/2"; then
538         LIBPREFIX=
539 else
540         LIBPREFIX=lib
541 fi
542 AC_SUBST(LIBPREFIX)
543
544 dnl #
545 dnl # Set Default CFLAGS
546 dnl #
547 if test "x$GCC" = "xyes"; then
548     CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
549 fi
550
551 AC_MSG_CHECKING(for developer gcc flags)
552 if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
553   devflags="-Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs"
554   CFLAGS="$CFLAGS $devflags"
555   INSTALLSTRIP=""
556   AC_MSG_RESULT(yes.  Using $devflags)
557 else
558   devflags="none"
559   CFLAGS="$CFLAGS -DNDEBUG"
560   INSTALLSTRIP="-s"
561   AC_MSG_RESULT(no.)
562 fi
563
564 dnl #############################################################
565 dnl #
566 dnl #  7. Checks for library functions
567 dnl #
568 dnl #############################################################
569
570 dnl Check for libcrypt
571 dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
572 AC_CHECK_LIB(crypt, crypt,
573   CRYPTLIB="-lcrypt"
574 )
575 AC_SUBST(CRYPTLIB)
576 if test "$CRYPTLIB" != ""; then
577   AC_DEFINE(HAVE_CRYPT)
578 else
579   AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
580 fi
581
582 if test "x$WITH_SNMP" = "xyes"; then
583   SNMP_CHECKS
584 fi
585
586 dnl #
587 dnl #  Check for sem_init all by itself
588 dnl #
589 if test "X$ac_cv_func_sem_init" = "Xno"; then
590
591 dnl #
592 dnl #  If not found, sem_init is in -lposix4 on Solaris
593 dnl #
594  AC_CHECK_LIB(posix4, sem_init)
595
596   if test "X$ac_cv_lib_posix4_sem_init" = "X"; then
597     if test "$WITH_THREAD_POOL" = "yes"; then
598       AC_MSG_WARN(You do not have posix semaphores.  Disabling thread pools)
599     fi
600     WITH_THREAD_POOL=no
601   fi
602 fi
603
604 POSTGRESQL_CHECKS
605 ODBC_CHECKS
606
607 dnl #############################################################
608 dnl #
609 dnl #  8. Checks for system services
610 dnl #
611 dnl #############################################################
612
613 dnl #
614 dnl # Figure out where libtool is located,
615 dnl #
616 LIBTOOL="`pwd`/libtool"
617 AC_SUBST(LIBTOOL)
618 AC_SUBST(LIBLTDL)
619 AC_SUBST(INCLTDL)
620 top_builddir=`pwd`
621 AC_SUBST(top_builddir)
622
623 dnl import libtool stuff
624
625 dnl #
626 dnl #  Checks to ensure that the thread pool code can build.
627 dnl #
628 if test "$WITH_THREAD_POOL" = "yes"; then
629   dnl #
630   dnl # If using thread pools, check that threading is enabled
631   dnl #
632   if test "$WITH_THREADS" != "yes"; then
633     AC_MSG_ERROR(You must have threads enabled for thread pools to work.)
634   fi
635
636   dnl #
637   dnl # If using thread pools, check that we have thread libraries
638   dnl #
639   if test "X$PTHREADLIB" = "X"; then
640     AC_MSG_ERROR(You must have threading libraries for thread pools to work.)
641   fi
642
643 dnl #
644 dnl #  Finally, after all of the checks above, we see if
645 dnl #  we can REALLY use the thread pools.
646 dnl #
647   if test "$WITH_THREAD_POOL" = "yes"; then
648     AC_DEFINE(WITH_THREAD_POOL,1)
649   fi
650 fi
651
652 dnl #############################################################
653 dnl #
654 dnl #  Configure in any module directories.
655 dnl #
656 dnl #############################################################
657
658 mysubdirs=
659 for foo in `find src/modules -name configure -print`; do
660   bar=`echo $foo | sed 's%/configure$%%g'`
661   mysubdirs="$mysubdirs $bar"
662 done
663
664 dnl #
665 dnl #  Don't change the variable name here.  Autoconf goes bonkers
666 dnl #  if you do.
667 dnl #
668 AC_CONFIG_SUBDIRS($mysubdirs)
669
670 dnl #############################################################
671 dnl #
672 dnl #  And finally, output the results.
673 dnl #
674 dnl #############################################################
675
676 dnl #
677 dnl #  Substitute whatever libraries we found to be necessary
678 dnl #
679 AC_SUBST(LIBS)
680 AC_SUBST(INSTALLSTRIP)
681
682 USE_SHARED_LIBS=$enable_shared
683 AC_SUBST(USE_SHARED_LIBS)
684 USE_STATIC_LIBS=$enable_static
685 AC_SUBST(USE_STATIC_LIBS)
686 AC_SUBST(STATIC_MODULES)
687 AC_SUBST(RADIUSD_VERSION)
688 export CFLAGS LIBS
689
690 AC_OUTPUT(\
691         ./Make.inc \
692         ./src/include/build-radpaths-h \
693         ./src/main/checkrad.pl \
694         ./src/main/radlast \
695         ./src/main/radtest \
696         ./scripts/rc.radiusd \
697         ./scripts/radwatch \
698         ./scripts/check-radiusd-config \
699         ./scripts/radiusd.cron.daily \
700         ./scripts/radiusd.cron.monthly \
701         ./raddb/radiusd.conf
702 )
703
704 AC_OUTPUT_COMMANDS([echo timestamp > src/include/stamp-h])
705 AC_OUTPUT_COMMANDS([(cd ./src/include && /bin/sh ./build-radpaths-h)])
706 AC_OUTPUT_COMMANDS([(cd ./src/main   && chmod +x checkrad.pl radlast radtest)])
707 AC_OUTPUT_COMMANDS([(cd ./scripts    && chmod +x rc.radiusd radwatch check-radiusd-config radiusd.cron.daily radiusd.cron.monthly)])
708 AC_OUTPUT_COMMANDS([
709 cat >> src/include/autoconf.h <<EOF
710
711 #define HOSTINFO        "$host"
712 #define RADIUSD_VERSION "$RADIUSD_VERSION"
713 EOF
714 ],host=$host)