]> git.sommitrealweird.co.uk Git - quagga-debian.git/blob - configure.ac
ae292f1189d2ef3b02502a9efc664ef86e9b27b7
[quagga-debian.git] / configure.ac
1 ##
2 ## Configure template file for Quagga.
3 ## autoconf will generate configure script.
4 ##
5 ##  Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
6 ##  Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7 ##
8 AC_PREREQ(2.60)
9
10 AC_INIT(Quagga, 1.2.2, [https://bugzilla.quagga.net])
11 CONFIG_ARGS="$*"
12 AC_SUBST(CONFIG_ARGS)
13 AC_CONFIG_SRCDIR(lib/zebra.h)
14 AC_CONFIG_MACRO_DIR([m4])
15
16 dnl -----------------------------------
17 dnl Get hostname and other information.
18 dnl -----------------------------------
19 AC_CANONICAL_BUILD()
20 AC_CANONICAL_HOST()
21 AC_CANONICAL_TARGET()
22
23 # Disable portability warnings -- our automake code (in particular
24 # common.am) uses some constructs specific to gmake.
25 AM_INIT_AUTOMAKE([1.6 -Wno-portability])
26
27 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
28 AM_SILENT_RULES([yes])
29 AC_CONFIG_HEADERS(config.h)
30
31 AC_PATH_PROG(PERL, perl)
32 AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
33 if test "x$GAWK" = "xnot-in-PATH" ; then
34         AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
35 BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
36 fi
37 AC_ARG_VAR([GAWK],[GNU AWK])
38
39 dnl default is to match previous behavior
40 exampledir=${sysconfdir}
41 AC_ARG_ENABLE([exampledir],
42           AS_HELP_STRING([--enable-exampledir],
43                          [specify alternate directory for examples]),
44                          exampledir="$enableval",)
45 dnl XXX add --exampledir to autoconf standard directory list somehow
46 AC_SUBST(exampledir)
47
48 dnl default is to match previous behavior
49 pkgsrcrcdir=""
50 pkgsrcdir=""
51 AC_ARG_ENABLE([pkgsrcrcdir],
52           AS_HELP_STRING([--enable-pkgsrcrcdir],
53                          [specify directory for rc.d scripts]),
54                          pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
55 dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
56 AC_SUBST(pkgsrcdir)
57 AC_SUBST(pkgsrcrcdir)
58
59 dnl ------------
60 dnl Check CFLAGS
61 dnl ------------
62 AC_ARG_WITH(cflags,
63 [  --with-cflags           Set CFLAGS for use in compilation.])
64 if test "x$with_cflags" != "x" ; then
65   CFLAGS="$with_cflags" ; cflags_specified=yes ;
66 elif test -n "$CFLAGS" ; then
67   cflags_specified=yes ;
68 fi
69
70 dnl --------------------
71 dnl Check CC and friends
72 dnl --------------------
73 AC_LANG([C])
74 AC_PROG_CC
75 AC_PROG_CPP
76 AM_PROG_CC_C_O
77 AC_PROG_RANLIB
78 AC_PROG_EGREP
79 PKG_PROG_PKG_CONFIG
80 AC_PROG_CC_C99
81
82 dnl libtool prereq.
83 AC_USE_SYSTEM_EXTENSIONS
84
85 dnl -------
86 dnl libtool
87 dnl -------
88 LT_INIT
89
90 dnl create libtool now, so we can test version below for
91 dnl fstack-protector-strong
92 LT_OUTPUT
93
94 dnl autoconf 2.59 appears not to support AC_PROG_SED
95 dnl AC_PROG_SED
96 AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
97
98 dnl Check for pdflatex and latexmk, in case someone wants to build
99 dnl PDFs from TeX (as used to be case for HACKING)
100 AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
101 AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
102 if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
103         AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
104 else
105         HAVE_LATEX=true
106 fi
107 AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
108 dnl for making HACKING.pdf from HACKING.md using pandoc
109 AC_CHECK_PROG([PANDOC],[pandoc],[pandoc],[/bin/false])
110 if test "x$PDFLATEX" = "x/bin/false" -o "x$PANDOC" = "x/bin/false"; then
111         AC_MSG_WARN([Will not be able to make PDF versions of MD documents])
112 else
113         HAVE_PANDOC=true
114 fi
115 AM_CONDITIONAL([HAVE_PANDOC], [test "x$HAVE_PANDOC" = "xtrue"])
116
117 if test "x${GCC}" != "xyes" ; then
118   AC_MSG_CHECKING([whether we are using SunPro compiler])
119   AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
120       [AC_MSG_RESULT([no])],
121       [COMPILER="SUNPRO"
122        AC_MSG_RESULT([yes])]
123   )
124 fi
125
126 dnl ---------------------------------------------
127 dnl If CLFAGS doesn\'t exist set default value
128 dnl AC_PROG_CC will have set minimal default
129 dnl already, eg "-O2 -g" for gcc, "-g" for others
130 dnl (Wall is gcc specific... have to make sure
131 dnl  gcc is being used before setting it)
132 dnl
133 dnl Sun Studio 10 / SunPro 5.7 is also supported,
134 dnl so lets set some sane CFLAGS for it.
135 dnl ---------------------------------------------
136
137 AC_DEFUN([AC_C_FLAG], [{
138         AC_LANG_PUSH(C)
139         ac_c_flag_save="$CFLAGS"
140         CFLAGS="$CFLAGS $1"
141         AC_MSG_CHECKING([[whether $CC supports $1]])
142         AC_COMPILE_IFELSE(
143                 [AC_LANG_PROGRAM([[]])],
144                 [
145                         AC_MSG_RESULT([yes])
146                         m4_if([$3], [], [], [
147                                 CFLAGS="$ac_c_flag_save"
148                                 $3
149                         ])
150                 ], [
151                         CFLAGS="$ac_c_flag_save"
152                         AC_MSG_RESULT([no])
153                         $2
154                 ])
155         AC_LANG_POP(C)
156         }])
157
158 AC_MSG_CHECKING([which default CFLAGS to set])
159 if test "x${cflags_specified}" = "x" ; then
160   case ${COMPILER} in
161     "SUNPRO")
162         AC_MSG_RESULT([Sun Studio])
163         AC_C_FLAG([-g])
164         AC_C_FLAG([-xO4])
165         AC_C_FLAG([-xspace])
166         AC_C_FLAG([-xstrconst])
167         AC_C_FLAG([-xc99])
168         AC_C_FLAG([-errfmt])
169         AC_C_FLAG([-xipo])
170         dnl AC_C_FLAG([-xlinkopt=2]) SPARC only dnl
171         dnl AC_C_FLAG([-xcode=pic32])dnl        
172         ;;
173     *)
174         AC_MSG_RESULT([autodetecting])
175
176         AC_C_FLAG([-diag-error 10006])
177         AC_C_FLAG([-g])
178         AC_C_FLAG([-Os], [
179           AC_C_FLAG([-O2])
180         ])
181         dnl fstack-protector-strong gives __stack_chk_fail_local
182         dnl being an 'Undefined symbol' on OpenIndiana hipster, with gcc 6.
183         dnl gcc -shared is being used to do the link, however the error is
184         dnl from ld. Disable. An issue with libtool < 2.4.6 dropping the
185         dnl -fstack-protector-strong argument from the shared link.
186         AC_MSG_CHECKING([whether libtool can support fstack-protector])
187         if test x"$(./libtool --version \
188                     | awk -F '[[ \t.]]' \
189                         'NR == 1 { \
190                                 if ($(NF-2) <= 2 && $(NF-1) <= 4 && $NF < 6) \
191                                         print 0; \
192                                 else print 1 \
193                         }')" = "x1" ; then
194                 AC_MSG_RESULT([yes])
195                 AC_C_FLAG([-fstack-protector-strong])
196                 AC_C_FLAG([--param=ssp-buffer-size=4])
197         else
198                 AC_MSG_RESULT([no])
199                 AC_MSG_WARN([upgrade to libtool >= 2.4.6!])
200         fi
201         AC_C_FLAG([-D_FORTIFY_SOURCE=2])
202         AC_C_FLAG([-Wformat])
203         AC_C_FLAG([-Wformat-security])
204         AC_C_FLAG([-fpie])
205         AC_C_FLAG([-fno-omit-frame-pointer])
206         AC_C_FLAG([-Wall])
207         AC_C_FLAG([-Wextra])
208         AC_C_FLAG([-Wmissing-prototypes])
209         AC_C_FLAG([-Wmissing-declarations])
210         AC_C_FLAG([-Wpointer-arith])
211         AC_C_FLAG([-Wbad-function-cast])
212         AC_C_FLAG([-Wwrite-strings])
213         if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
214           AC_C_FLAG([-Wcast-qual])
215           AC_C_FLAG([-Wstrict-prototypes])
216           AC_C_FLAG([-Wmissing-noreturn])
217           AC_C_FLAG([-Wmissing-format-attribute])
218           AC_C_FLAG([-Wunreachable-code])
219           AC_C_FLAG([-Wpacked])
220           AC_C_FLAG([-Wpadded])
221         else
222           AC_C_FLAG([-Wno-unused-result])
223         fi
224         AC_C_FLAG([-Wno-unused-parameter])
225         AC_C_FLAG([-Wno-missing-field-initializers])
226         # ICC emits a broken warning for const char *x = a ? "b" : "c";
227         # for some reason the string consts get 'promoted' to char *,
228         # triggering a const to non-const conversion warning.
229         AC_C_FLAG([-diag-disable 3179])
230         ;;
231   esac
232 else
233   AC_MSG_RESULT([CFLAGS supplied by user])
234 fi
235
236 if test x"${enable_werror}" = x"yes" ; then
237   WERROR="-Werror"
238 fi
239 AC_SUBST(WERROR)
240
241 dnl --------------
242 dnl Check programs
243 dnl --------------
244 AC_PROG_INSTALL
245 AC_PROG_LN_S
246 AC_PROG_MAKE_SET
247 AC_CHECK_TOOL(AR, ar)
248
249 dnl ---------------------------
250 dnl We, perhaps unfortunately,
251 dnl depend on GNU Make specific
252 dnl constructs.
253 dnl Give the user a warning if
254 dnl not GNU Make.
255 dnl ---------------------------
256 AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
257         [quagga_cv_gnu_make=no
258          if ${MAKE-make} --version 2>/dev/null | \
259                 grep '^GNU Make ' >/dev/null ; then
260                 quagga_cv_gnu_make=yes;
261          fi
262         ]
263 )
264
265 dnl -----------------
266 dnl System extensions
267 dnl -----------------
268 AC_GNU_SOURCE
269
270
271 dnl ----------------------
272 dnl Packages configuration
273 dnl ----------------------
274 AC_ARG_WITH(pkg-extra-version,
275         AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
276         [EXTRAVERSION=$withval],)
277 AC_ARG_WITH(pkg-git-version,
278         AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
279         [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
280 AC_ARG_ENABLE(vtysh,
281   AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
282 AC_ARG_ENABLE(doc,
283   AS_HELP_STRING([--disable-doc], [do not build docs]))
284 AC_ARG_ENABLE(zebra,
285   AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
286 AC_ARG_ENABLE(bgpd,
287   AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
288 AC_ARG_ENABLE(ripd,
289   AS_HELP_STRING([--disable-ripd], [do not build ripd]))
290 AC_ARG_ENABLE(ripngd,
291   AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
292 AC_ARG_ENABLE(ospfd,
293   AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
294 AC_ARG_ENABLE(ospf6d,
295   AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
296 AC_ARG_ENABLE(nhrpd,
297   AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
298 AC_ARG_ENABLE(watchquagga,
299   AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
300 AC_ARG_ENABLE(isisd,
301   AS_HELP_STRING([--disable-isisd], [do not build isisd]))
302 AC_ARG_ENABLE(pimd,
303   AS_HELP_STRING([--disable-pimd], [do not build pimd]))
304 AC_ARG_ENABLE(bgp-announce,
305   AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
306 AC_ARG_ENABLE(snmp,
307   AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
308 AC_ARG_WITH(libpam,
309   AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
310 AC_ARG_ENABLE(tcp-zebra,
311   AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
312 AC_ARG_ENABLE(ospfapi,
313   AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
314 AC_ARG_ENABLE(ospfclient,
315   AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
316                           (this is the default if --disable-ospfapi is set)]))
317 AC_ARG_ENABLE(multipath,
318   AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
319 AC_ARG_ENABLE(user,
320   AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
321 AC_ARG_ENABLE(group,
322   AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
323 AC_ARG_ENABLE(vty_group,
324   AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
325 AC_ARG_ENABLE(configfile_mask,
326   AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
327 AC_ARG_ENABLE(logfile_mask,
328   AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
329
330 AC_ARG_ENABLE(rtadv,
331   AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
332 AC_ARG_ENABLE(irdp,
333   AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
334 AC_ARG_ENABLE(isis_topology,
335   AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
336 AC_ARG_ENABLE(capabilities,
337   AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
338 AC_ARG_ENABLE(rusage,
339   AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
340 AC_ARG_ENABLE(gcc_ultra_verbose,
341   AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
342 AC_ARG_ENABLE(linux24_tcp_md5,
343   AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
344 AC_ARG_ENABLE(gcc-rdynamic,
345   AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
346 AC_ARG_ENABLE(backtrace,
347   AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
348 AC_ARG_ENABLE(time-check,
349   AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
350 AC_ARG_ENABLE(pcreposix,
351   AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
352 AC_ARG_ENABLE(fpm,
353   AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
354 AC_ARG_ENABLE(werror,
355   AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
356 AC_ARG_ENABLE([protobuf],
357   AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
358
359 AC_ARG_ENABLE([dev_build],
360     AS_HELP_STRING([--enable-dev-build], [build for development]))
361
362 if test x"${enable_gcc_rdynamic}" != x"no" ; then
363   if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
364     LDFLAGS="${LDFLAGS} -rdynamic"
365   fi
366 fi
367
368 if test x"${enable_time_check}" != x"no" ; then
369   if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
370     AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
371   else
372     AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
373   fi
374 fi
375
376 if test "${enable_fpm}" = "yes"; then
377    AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
378 fi
379
380 if test "x${enable_dev_build}" = "xyes"; then
381    AC_DEFINE(DEV_BUILD,,Build for development)
382 fi
383 AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
384
385 #
386 # Logic for protobuf support.
387 #
388 if test "$enable_protobuf" = "yes"; then
389    have_protobuf=yes
390
391    # Check for protoc-c
392    AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
393    if test "x$PROTOC_C" = "x/bin/false"; then
394       have_protobuf=no
395    else
396       found_protobuf_c=no
397       PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
398                      [found_protobuf_c=yes],
399                      [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
400
401       if test "x$found_protobuf_c" = "xyes"; then
402          LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
403          CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
404       else
405         AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
406                         [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
407       fi
408    fi
409 fi
410
411 # Fail if the user explicity enabled protobuf support and we couldn't
412 # find the compiler or libraries.
413 if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
414    AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
415 fi
416
417 if test "x$have_protobuf" = "xyes"; then
418    AC_DEFINE(HAVE_PROTOBUF,, protobuf)
419 fi
420
421 AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
422
423 #
424 # End of logic for protobuf support.
425 #
426
427 if test "${enable_tcp_zebra}" = "yes"; then
428   AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
429 fi
430
431 if test "${enable_linux24_tcp_md5}" = "yes"; then
432   AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
433 fi
434
435 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
436 if test "${enable_rtadv}" != "no"; then
437   AC_MSG_RESULT(yes)
438   AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
439 else
440   AC_MSG_RESULT(no)
441 fi
442
443 if test "${enable_irdp}" = "yes"; then
444   AC_DEFINE(HAVE_IRDP,, IRDP )
445 fi
446
447 if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
448   AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
449   ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
450   ISIS_TOPOLOGY_DIR="topology"
451   ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
452 fi
453
454 AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
455 AC_SUBST(ISIS_TOPOLOGY_DIR)
456 AC_SUBST(ISIS_TOPOLOGY_LIB)
457
458 if test x"${enable_user}" = x"no"; then
459   enable_user=""
460 else
461   if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
462     enable_user="quagga"
463   fi
464   AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
465 fi
466
467 if test x"${enable_group}" = x"no"; then
468   enable_group=""
469 else
470   if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
471     enable_group="quagga"
472   fi
473   AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
474 fi
475
476 if test x"${enable_vty_group}" = x"yes" ; then
477   AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
478 elif test x"${enable_vty_group}" != x""; then
479   if test x"${enable_vty_group}" != x"no"; then
480     AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
481   fi
482 fi
483 AC_SUBST([enable_user])
484 AC_SUBST([enable_group])
485 AC_SUBST([enable_vty_group])
486
487 enable_configfile_mask=${enable_configfile_mask:-0600}
488 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
489
490 enable_logfile_mask=${enable_logfile_mask:-0600}
491 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
492
493 MPATH_NUM=1
494
495 case "${enable_multipath}" in
496   0)
497     MPATH_NUM=64
498     ;;
499   [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
500     MPATH_NUM="${enable_multipath}"
501     ;;
502   "")
503     ;;
504   *)           
505     AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
506     ;;
507 esac
508
509 AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
510
511 dnl -----------------------------------
512 dnl Add extra version string to package
513 dnl name, string and version fields.
514 dnl -----------------------------------
515 if test "x${EXTRAVERSION}" != "x" ; then
516   VERSION="${VERSION}${EXTRAVERSION}"
517   PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
518   PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
519 fi
520
521 if test "x$with_pkg_git_version" = "xyes"; then
522         if test -d "${srcdir}/.git"; then
523                 AC_DEFINE(GIT_VERSION, [1], [include git version info])
524         else    with_pkg_git_version="no"
525                 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
526         fi
527 fi
528 AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
529
530 dnl ------------------------------------
531 dnl Check C keywords and standard  types
532 dnl ------------------------------------
533 AC_C_CONST
534 AC_C_INLINE
535 AC_C_RESTRICT
536 AC_C_VOLATILE
537 AC_HEADER_STDC
538 AC_HEADER_TIME
539 AC_HEADER_SYS_WAIT
540 AC_HEADER_STDBOOL
541 dnl AC_TYPE_PID_T
542 AC_TYPE_UID_T
543 AC_TYPE_MODE_T
544 AC_TYPE_SIZE_T
545 AC_STRUCT_TM
546
547 dnl -------------------------
548 dnl Check other header files.
549 dnl -------------------------
550 AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
551         sys/types.h linux/version.h netdb.h asm/types.h \
552         sys/cdefs.h sys/param.h limits.h signal.h \
553         sys/socket.h netinet/in.h time.h sys/time.h features.h])
554
555 dnl Utility macro to avoid retyping includes all the time
556 m4_define([QUAGGA_INCLUDES],
557 [#ifdef SUNOS_5
558 #define _XPG4_2
559 #define __EXTENSIONS__
560 #endif
561 #include <stdio.h>
562 #if STDC_HEADERS
563 # include <stdlib.h>
564 # include <stddef.h>
565 #else
566 # if HAVE_STDLIB_H
567 #  include <stdlib.h>
568 # endif
569 #endif
570 #if HAVE_SYS_TYPES_H
571 # include <sys/types.h>
572 #endif
573 /* sys/conf.h depends on param.h on FBSD at least */
574 #if HAVE_SYS_PARAM_H
575 # include <sys/param.h>
576 #endif
577 /* Required for MAXSIG */
578 #if HAVE_SIGNAL_H
579 # include <signal.h>
580 #endif
581 #if HAVE_SYS_SOCKET_H
582 # include <sys/socket.h>
583 #endif
584 #ifdef __APPLE__
585 # define __APPLE_USE_RFC_3542
586 #endif
587 #if HAVE_NETINET_IN_H
588 # include <netinet/in.h>
589 #endif
590 #ifdef TIME_WITH_SYS_TIME
591 # include <sys/time.h>
592 # include <time.h>
593 #else
594 # ifdef HAVE_SYS_TIME_H
595 #  include <sys/time.h>
596 # else
597 #  include <time.h>
598 # endif
599 #endif /* TIME_WITH_SYS_TIME */
600 ])dnl
601
602 dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
603 dnl round below execution begins, otherwise it doesn't properly detect
604 dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
605 dnl on FreeBSD (BZ#408).
606
607 AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
608
609 m4_define([QUAGGA_INCLUDES],
610 QUAGGA_INCLUDES
611 [#if HAVE_NET_IF_H
612 # include <net/if.h>
613 #endif
614 ])dnl
615
616 dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
617 dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
618 dnl an additional round for it.
619
620 AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
621
622 m4_define([QUAGGA_INCLUDES],
623 QUAGGA_INCLUDES
624 [#if HAVE_NET_IF_VAR_H
625 # include <net/if_var.h>
626 #endif
627 ])dnl
628
629 AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
630         net/if_dl.h net/netopt.h net/route.h \
631         inet/nd.h arpa/inet.h netinet/ip_icmp.h \
632         fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
633         sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
634         [], [], QUAGGA_INCLUDES)
635
636 AC_CHECK_HEADERS([ucontext.h], [], [],
637 [#ifndef __USE_GNU
638 #define __USE_GNU
639 #endif /* __USE_GNU */
640 QUAGGA_INCLUDES
641 ])
642
643 m4_define([UCONTEXT_INCLUDES],
644 [#include <ucontext.h>])dnl
645
646 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
647   [], [], [UCONTEXT_INCLUDES])
648 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
649   [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
650    [], [], [UCONTEXT_INCLUDES])],
651   [], [UCONTEXT_INCLUDES])
652 AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
653   [], [], [UCONTEXT_INCLUDES])
654
655 m4_define([QUAGGA_INCLUDES],
656 QUAGGA_INCLUDES
657 [#if HAVE_SYS_UN_H
658 # include <sys/un.h>
659 #endif
660 #if HAVE_NETINET_IN_SYSTM_H
661 # include <netinet/in_systm.h>
662 #endif
663 #if HAVE_NETINET_IN_VAR_H
664 # include <netinet/in_var.h>
665 #endif
666 #if HAVE_NET_IF_DL_H
667 # include <net/if_dl.h>
668 #endif
669 #if HAVE_NET_NETOPT_H
670 # include <net/netopt.h>
671 #endif
672 #if HAVE_NET_ROUTE_H
673 # include <net/route.h>
674 #endif
675 #if HAVE_INET_ND_H
676 # include <inet/nd.h>
677 #endif
678 #if HAVE_ARPA_INET_H
679 # include <arpa/inet.h>
680 #endif
681 /* Required for IDRP */
682 #if HAVE_NETINET_IP_ICMP_H
683 # include <netinet/ip_icmp.h>
684 #endif
685 ])dnl
686
687 dnl V6 headers are checked below, after we check for v6
688
689 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
690 case "$host" in
691   [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
692       opsys=sol2-6
693       AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
694       AC_DEFINE(SUNOS_5, 1, SunOS 5)
695       AC_CHECK_LIB(xnet, main)
696       CURSES=-lcurses
697       SOLARIS="solaris"
698   ;;
699   [*-sunos5.[8-9]] \
700   | [*-sunos5.1[0-9]] \
701   | [*-sunos5.1[0-9].[0-9]] \
702   | [*-solaris2.[8-9]] \
703   | [*-solaris2.1[0-9]] \
704   | [*-solaris2.1[0-9].[0-9]])
705       opsys=sol8
706       AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
707       AC_DEFINE(SUNOS_5, 1, [SunOS 5])
708       AC_CHECK_LIB(socket, main)
709       AC_CHECK_LIB(nsl, main)
710       AC_CHECK_LIB(umem, main)
711       AC_CHECK_FUNCS([printstack],
712         [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
713          AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
714         ])
715       CURSES=-lcurses
716       SOLARIS="solaris"
717   ;;
718   *-sunos5* | *-solaris2*)
719       AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
720       AC_CHECK_LIB(socket, main)
721       AC_CHECK_LIB(nsl, main)
722       CURSES=-lcurses
723       SOLARIS="solaris"
724   ;;
725   *-linux*)
726       opsys=gnu-linux
727       AC_DEFINE(GNU_LINUX,,GNU Linux)
728   ;;
729   *-openbsd*)
730       opsys=openbsd
731       AC_DEFINE(OPEN_BSD,,OpenBSD)
732   ;;
733 esac
734
735 AC_SYS_LARGEFILE
736
737 dnl ---------------------
738 dnl Integrated VTY option
739 dnl ---------------------
740 case "${enable_vtysh}" in
741   "no") VTYSH="";;
742   *)    VTYSH="vtysh";
743          AC_DEFINE(VTYSH,,VTY shell)
744 dnl      Vtysh uses libreadline, which looks for termcap functions at
745 dnl      configure time.  We follow readlines search order.
746 dnl      The required procedures are in libtermcap on NetBSD, in
747 dnl      [TODO] on Linux, and in [TODO] on Solaris.
748          AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
749            [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
750              [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
751                [AC_CHECK_LIB(ncurses, tputs, 
752                              LIBREADLINE="$LIBREADLINE -lncurses")]
753               )]
754             )]
755           )
756          AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
757                       "$LIBREADLINE")
758          if test $ac_cv_lib_readline_main = no; then
759            AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
760          fi
761          AC_CHECK_HEADER(readline/history.h)
762          if test $ac_cv_header_readline_history_h = no;then
763            AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
764          fi
765          AC_CHECK_LIB(readline, rl_completion_matches, 
766                       LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
767          if test $ac_cv_lib_readline_rl_completion_matches = no; then
768            AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
769          fi
770          ;;
771   "no" ) VTYSH="";;
772 esac
773 AC_SUBST(LIBREADLINE)
774 AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
775
776 dnl ----------
777 dnl PAM module
778 dnl
779 dnl Quagga detects the PAM library it is built against by checking for a
780 dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
781 dnl is known to #include pam_appl.h, the standard header of a PAM library, and
782 dnl openpam.h doesn't do that, although depends on the header too. Hence a
783 dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
784 dnl of OpenPAM.
785 dnl ----------
786 if test "$with_libpam" = "yes"; then
787   AC_CHECK_HEADER([security/pam_misc.h],
788     [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
789      AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
790      pam_conv_func="misc_conv"
791     ],
792     [], QUAGGA_INCLUDES)
793   AC_CHECK_HEADER([security/openpam.h],
794     [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
795      AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
796      pam_conv_func="openpam_ttyconv"
797     ],
798     [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
799   if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
800     AC_MSG_WARN([*** pam support will not be built ***])
801     with_libpam="no"
802   fi
803 fi
804
805 if test "$with_libpam" = "yes"; then
806 dnl took this test from proftpds configure.in and suited to our needs
807 dnl -------------------------------------------------------------------------
808 dnl
809 dnl This next check looks funky due to a linker problem with some versions
810 dnl of the PAM library.  Prior to 0.72 release, the Linux PAM shared library
811 dnl omitted requiring libdl linking information. PAM-0.72 or better ships
812 dnl with RedHat 6.2 and Debian 2.2 or better.
813 AC_CHECK_LIB(pam, pam_start,
814   [AC_CHECK_LIB(pam, $pam_conv_func,
815     [AC_DEFINE(USE_PAM,,Use PAM for authentication)
816      LIBPAM="-lpam"],
817     [AC_DEFINE(USE_PAM,,Use PAM for authentication)
818      LIBPAM="-lpam -lpam_misc"]
819     )
820   ],
821
822   [AC_CHECK_LIB(pam, pam_end,
823     [AC_CHECK_LIB(pam, $pam_conv_func,
824       [AC_DEFINE(USE_PAM,,Use PAM for authentication)
825        LIBPAM="-lpam -ldl"],
826       [AC_DEFINE(USE_PAM,,Use PAM for authentication)
827        LIBPAM="-lpam -ldl -lpam_misc"]
828      )
829   ],AC_MSG_WARN([*** pam support will not be built ***]),
830   [-ldl])
831   ]
832 )
833 fi
834 AC_SUBST(LIBPAM)
835
836 dnl -------------------------------
837 dnl Endian-ness check
838 dnl -------------------------------
839 AC_WORDS_BIGENDIAN
840
841 dnl -------------------------------
842 dnl check the size in byte of the C
843 dnl -------------------------------
844 dnl AC_CHECK_SIZEOF(char)
845 dnl AC_CHECK_SIZEOF(int)
846 dnl AC_CHECK_SIZEOF(short)
847 dnl AC_CHECK_SIZEOF(long)
848
849 dnl ----------------------------
850 dnl check existance of functions
851 dnl ----------------------------
852 AC_FUNC_CHOWN
853 AC_FUNC_FNMATCH
854 AC_FUNC_FORK
855 AC_FUNC_MEMCMP
856 AC_FUNC_MKTIME
857 AC_FUNC_STRFTIME
858 AC_FUNC_STAT
859 AC_FUNC_SELECT_ARGTYPES
860 AC_FUNC_STRFTIME
861 dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
862 dnl can lead to strange side effects.  So we just check for strnlen
863 dnl directly, see below.
864 dnl AC_FUNC_STRNLENdnl
865 AC_FUNC_VPRINTF
866
867 dnl -------------------------------
868 dnl bgpd needs pow() and hence libm
869 dnl -------------------------------
870 TMPLIBS="$LIBS"
871 AC_CHECK_HEADER([math.h],
872   [AC_CHECK_LIB([m], [pow],
873     [LIBM="-lm"
874      LIBS="$LIBS $LIBM"
875      AC_DEFINE(HAVE_LIBM,, Have libm)
876      AC_CHECK_FUNCS(pow,[],[LIBM=""])
877     ])
878 ])
879 if test x"$LIBM" = x ; then
880   AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
881 fi
882 LIBS="$TMPLIBS"
883 AC_SUBST(LIBM)
884
885 dnl ---------------
886 dnl other functions
887 dnl ---------------
888 AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
889         inet_ntoa inet_aton strnlen \
890         memchr memmove memset select socket \
891         strcasecmp strchr strcspn strdup strerror \
892         strncasecmp strndup strrchr strspn strstr \
893         strtol strtoul strlcat strlcpy \
894         daemon snprintf vsnprintf \
895         if_nametoindex if_indextoname getifaddrs \
896         uname fcntl getgrouplist])
897
898
899 AC_CHECK_HEADER([asm-generic/unistd.h],
900                 [AC_CHECK_DECL(__NR_setns,
901                                AC_DEFINE(HAVE_NETNS,, Have netns),,
902                                QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
903                                ])
904                  AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
905                )
906
907 dnl ------------------------------------
908 dnl Determine routing get and set method
909 dnl ------------------------------------
910 AC_MSG_CHECKING(zebra between kernel interface method)
911 if test x"$opsys" = x"gnu-linux"; then
912   AC_MSG_RESULT(netlink)
913   RT_METHOD=rt_netlink.o
914   AC_DEFINE(HAVE_NETLINK,,netlink)
915   netlink=yes
916 else
917   AC_MSG_RESULT(Route socket)
918   KERNEL_METHOD="kernel_socket.o"
919   RT_METHOD="rt_socket.o"
920 fi
921 AC_SUBST(RT_METHOD)
922 AC_SUBST(KERNEL_METHOD)
923 AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
924
925 dnl --------------------------
926 dnl Determine IS-IS I/O method
927 dnl --------------------------
928 AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
929 AC_DEFINE(ISIS_METHOD_DLPI,     2, [ constant value for isis method dlpi ])
930 AC_DEFINE(ISIS_METHOD_BPF,      3, [ constant value for isis method bpf ])
931 AC_CHECK_HEADER(net/bpf.h)
932 AC_CHECK_HEADER(sys/dlpi.h)
933 AC_MSG_CHECKING(zebra IS-IS I/O method)
934 if test x"$opsys" = x"gnu-linux"; then
935   AC_MSG_RESULT(pfpacket)
936   ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
937 elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
938   AC_MSG_RESULT(DLPI)
939   ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
940 else
941   if test $ac_cv_header_net_bpf_h = no; then
942     if test $ac_cv_header_sys_dlpi_h = no; then
943       AC_MSG_RESULT(none)
944       AC_MSG_WARN([*** IS-IS support will not be built ***])
945       ISISD=""
946     else
947       AC_MSG_RESULT(DLPI)
948     fi
949     ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
950   else
951     AC_MSG_RESULT(BPF)
952     ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
953   fi
954 fi
955 AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
956
957 dnl ------------------------------------
958 dnl check for broken CMSG_FIRSTHDR macro
959 dnl ------------------------------------
960 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
961 AC_RUN_IFELSE([AC_LANG_SOURCE([[
962 #ifdef SUNOS_5
963 #define _XPG4_2
964 #define __EXTENSIONS__
965 #endif
966 #ifdef HAVE_STDLIB_H
967 # include <stdlib.h>
968 #endif
969 #ifdef HAVE_SYS_TYPES_H
970 #include <sys/types.h>
971 #endif
972 #ifdef HAVE_SYS_SOCKET_H
973 #include <sys/socket.h>
974 #endif
975
976 main()
977 {
978   struct msghdr msg;
979   char buf[4];
980
981   msg.msg_control = buf;
982   msg.msg_controllen = 0;
983
984   if (CMSG_FIRSTHDR(&msg) != NULL)
985     exit(0);
986   exit (1);
987 }]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
988 [AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
989
990 dnl ------------------------------
991 dnl check kernel route read method
992 dnl ------------------------------
993 AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
994 [if test "x$netlink" = xyes; then
995   quagga_cv_rtread_method="netlink"
996 else
997 for quagga_cv_rtread_method in /dev/ip /dev/null;
998 do
999   test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
1000 done
1001 case $quagga_cv_rtread_method in
1002   "/dev/ip")
1003                      case "$host" in
1004                        *-freebsd*)    quagga_cv_rtread_method="sysctl";;
1005                        *)             quagga_cv_rtread_method="getmsg";;
1006                      esac;;
1007         *)
1008                      quagga_cv_rtread_method="sysctl";;
1009 esac
1010 fi])
1011 RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
1012 AC_SUBST(RTREAD_METHOD)
1013
1014 dnl -----------------------------
1015 dnl check interface lookup method
1016 dnl -----------------------------
1017 IOCTL_METHOD=ioctl.o
1018 AC_MSG_CHECKING(interface looking up method)
1019 if test "$netlink" = yes; then
1020   AC_MSG_RESULT(netlink)
1021   IF_METHOD=if_netlink.o
1022 elif test "$opsys" = "sol2-6";then
1023   AC_MSG_RESULT(Solaris GIF)
1024   IF_METHOD=if_ioctl.o
1025 elif test "$opsys" = "sol8";then
1026   AC_MSG_RESULT(Solaris GLIF)
1027   IF_METHOD=if_ioctl_solaris.o
1028   IOCTL_METHOD=ioctl_solaris.o
1029 elif test "$opsys" = "openbsd";then
1030   AC_MSG_RESULT(openbsd)
1031   IF_METHOD=if_ioctl.o
1032 elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
1033   AC_MSG_RESULT(sysctl)
1034     IF_METHOD=if_sysctl.o
1035     AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
1036 else
1037     AC_MSG_RESULT(ioctl)
1038     IF_METHOD=if_ioctl.o
1039 fi
1040 AC_SUBST(IF_METHOD)
1041 AC_SUBST(IOCTL_METHOD)
1042
1043 dnl ---------------------------------------------------------------
1044 dnl figure out how to specify an interface in multicast sockets API
1045 dnl ---------------------------------------------------------------
1046 AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
1047
1048 AC_CHECK_HEADERS([linux/mroute.h], [], [],
1049 [
1050 #if HAVE_NETINET_IN_H
1051 #include<netinet/in.h>
1052 #endif])
1053 AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1054 AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1055 #include <sys/param.h>
1056 #endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
1057   return (0);
1058 #else
1059   #error No support for BSD struct ip_mreq hack detected
1060 #endif],[AC_MSG_RESULT(yes)
1061 AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1062 AC_MSG_RESULT(no))
1063
1064 AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1065 AC_TRY_COMPILE([
1066 #include <sys/types.h>
1067 #include <netinet/in.h>
1068 ], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1069 ], [AC_MSG_RESULT(yes)
1070 AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1071 AC_MSG_RESULT(no))
1072
1073 dnl ---------------------------------------------------------------
1074 dnl figure out how to check link-state
1075 dnl ---------------------------------------------------------------
1076 AC_CHECK_HEADER([net/if.h],
1077   [AC_CHECK_HEADER( [net/if_media.h],
1078     [m4_define([LINK_DETECT_INCLUDES],
1079       QUAGGA_INCLUDES
1080       [#include <net/if_media.h>
1081     ])
1082     AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1083       AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1084       [], LINK_DETECT_INCLUDES)], 
1085     [],
1086     QUAGGA_INCLUDES)], 
1087   [], QUAGGA_INCLUDES )
1088
1089 dnl ---------------------------------------------------------------
1090 dnl Additional, newer way to check link-state using ifi_link_state.
1091 dnl Not available in all BSD's when ifmediareq available
1092 dnl ---------------------------------------------------------------
1093 AC_CHECK_HEADER([net/if.h],
1094     AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1095       AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1096       [], QUAGGA_INCLUDES),
1097     ,)
1098
1099 dnl ------------------------
1100 dnl TCP_MD5SIG socket option
1101 dnl ------------------------
1102
1103 AC_CHECK_HEADER([netinet/tcp.h], 
1104    [m4_define([MD5_INCLUDES],
1105       QUAGGA_INCLUDES
1106       [#include <netinet/tcp.h>
1107     ])
1108     AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1109    [],
1110    QUAGGA_INCLUDES)
1111 if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1112   AC_CHECK_HEADER([linux/tcp.h],
1113        [m4_define([MD5_INCLUDES],
1114           QUAGGA_INCLUDES
1115           [#include <linux/tcp.h>
1116         ])
1117        AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1118 fi
1119
1120 dnl -----------------------------
1121 dnl check ipforward detect method
1122 dnl -----------------------------
1123 AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
1124 [if test x$cross_compiling = xyes; then
1125   if test x"$opsys" = x"gnu-linux"; then
1126     quagga_cv_ipforward_method=/proc/net/snmp
1127   else
1128     quagga_cv_ipforward_method=/dev/ip
1129   fi
1130 else
1131   for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1132   do
1133     test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1134   done
1135 fi
1136 case $quagga_cv_ipforward_method in
1137   "/proc/net/snmp")  quagga_cv_ipforward_method="proc";;
1138   "/dev/ip")         
1139                      case "$host" in
1140                        *-freebsd*)    quagga_cv_ipforward_method="sysctl";;
1141                        *)             quagga_cv_ipforward_method="solaris";;
1142                      esac;;
1143   *)                 quagga_cv_ipforward_method="sysctl";;
1144 esac])
1145 IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
1146 AC_SUBST(IPFORWARD)
1147
1148 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1149
1150 dnl ----------
1151 dnl IPv6 check
1152 dnl ----------
1153 AC_MSG_CHECKING(whether does this OS have IPv6 stack)
1154 dnl ---------
1155 dnl KAME IPv6
1156 dnl ---------
1157   if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
1158     AC_DEFINE(KAME,1,KAME IPv6)
1159     AC_MSG_RESULT(KAME)
1160 dnl ------------------------------------
1161 dnl Solaris 9, 10 and potentially higher
1162 dnl ------------------------------------
1163   elif test x"$opsys" = x"sol8"; then
1164     AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
1165     AC_MSG_RESULT(Solaris IPv6)
1166 dnl ----------
1167 dnl Linux IPv6
1168 dnl ----------
1169   elif test x"$opsys" = x"gnu-linux"; then
1170     AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
1171     AC_MSG_RESULT(Linux IPv6)
1172   else
1173     AC_MSG_ERROR([Failed to detect IPv6 stack])
1174   fi
1175
1176 dnl this is unconditial, for compatibility
1177 AC_DEFINE(HAVE_IPV6,1,IPv6)
1178
1179 dnl ------------------
1180 dnl IPv6 header checks
1181 dnl ------------------
1182 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
1183         netinet6/in6_var.h netinet6/nd6.h], [], [],
1184         QUAGGA_INCLUDES)
1185
1186 m4_define([QUAGGA_INCLUDES],dnl
1187 QUAGGA_INCLUDES
1188 [#if HAVE_NETINET6_IN6_H
1189 #include <netinet6/in6.h>
1190 #endif
1191 #if HAVE_NETINET_IN6_VAR_H
1192 #include <netinet/in6_var.h>
1193 #endif
1194 #if HAVE_NETINET_ICMP6_H
1195 # include <netinet/icmp6.h>
1196 #endif
1197 #if HAVE_NETINET6_IN6_VAR_H
1198 # include <netinet6/in6_var.h>
1199 #endif
1200 #if HAVE_NETINET6_ND6_H
1201 # include <netinet6/nd6.h>
1202 #endif
1203 ])dnl
1204
1205 dnl disable doc check
1206 if test "${enable_doc}" = "no";then
1207   DOC=""
1208 else
1209   DOC="doc"
1210 fi
1211
1212 dnl --------------------
1213 dnl Daemon disable check
1214 dnl --------------------
1215 if test "${enable_zebra}" = "no";then
1216   ZEBRA=""
1217 else
1218   ZEBRA="zebra"
1219 fi
1220 AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
1221
1222 if test "${enable_bgpd}" = "no";then
1223   BGPD=""
1224 else
1225   BGPD="bgpd"
1226 fi
1227 AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
1228
1229 if test "${enable_ripd}" = "no";then
1230   RIPD=""
1231 else
1232   RIPD="ripd"
1233 fi
1234 AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
1235
1236 if test "${enable_ospfd}" = "no";then
1237   OSPFD=""
1238 else
1239   OSPFD="ospfd"
1240 fi
1241 AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
1242
1243 if test x"$opsys" != x"gnu-linux"; then
1244         dnl NHRPd works currently with Linux only.
1245         enable_nhrpd="no"
1246 fi
1247 if test "${enable_nhrpd}" = "no";then
1248   NHRPD=""
1249 else
1250   NHRPD="nhrpd"
1251 fi
1252 AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1253
1254 if test "${enable_watchquagga}" = "no";then
1255   WATCHQUAGGA=""
1256 else
1257   WATCHQUAGGA="watchquagga"
1258 fi
1259 AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
1260
1261 OSPFCLIENT=""
1262 if test "${enable_ospfapi}" != "no";then
1263     AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1264
1265   if test "${enable_ospfclient}" != "no";then
1266       OSPFCLIENT="ospfclient"
1267   fi
1268 fi
1269
1270 AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
1271
1272 case "${enable_ripngd}" in
1273   "no" ) RIPNGD="";;
1274   *    ) RIPNGD="ripngd";;
1275 esac
1276 AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
1277
1278 case "${enable_ospf6d}" in
1279   "no" ) OSPF6D="";;
1280   *    ) OSPF6D="ospf6d";;
1281 esac
1282 AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
1283
1284 case "${enable_isisd}" in
1285   "no" ) ISISD="";;
1286   *    ) ISISD="isisd";;
1287 esac
1288 AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
1289
1290 case "${enable_pimd}" in
1291   "no" ) PIMD="";;
1292   *    ) PIMD="pimd";;
1293 esac
1294 AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
1295
1296 if test "${enable_bgp_announce}" = "no";then
1297   AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1298 else
1299   AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
1300 fi
1301
1302 AC_SUBST(DOC)
1303 AC_SUBST(ZEBRA)
1304 AC_SUBST(BGPD)
1305 AC_SUBST(RIPD)
1306 AC_SUBST(RIPNGD)
1307 AC_SUBST(OSPFD)
1308 AC_SUBST(OSPF6D)
1309 AC_SUBST(NHRPD)
1310 AC_SUBST(WATCHQUAGGA)
1311 AC_SUBST(ISISD)
1312 AC_SUBST(PIMD)
1313 AC_SUBST(SOLARIS)
1314 AC_SUBST(VTYSH)
1315 AC_SUBST(CURSES)
1316 AC_SUBST(OSPFCLIENT)
1317 AC_SUBST(OSPFAPI)
1318 AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1319 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1320 AC_CHECK_LIB(crypt, crypt)
1321 AC_CHECK_LIB(resolv, res_init)
1322
1323 dnl ---------------------------
1324 dnl check system has PCRE regexp
1325 dnl ---------------------------
1326 if test "x$enable_pcreposix" = "xyes"; then
1327   AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1328   AC_MSG_WARN([*** falling back to other regex library ***]) ])
1329 fi
1330
1331 if test "x$enable_pcreposix" != "xyes"; then
1332 dnl ---------------------------
1333 dnl check system has GNU regexp
1334 dnl ---------------------------
1335 AC_MSG_CHECKING(whether system has GNU regex)
1336 AC_CHECK_LIB(c, regexec,
1337 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1338  LIB_REGEX=""],
1339 [LIB_REGEX="regex.o"])
1340 fi
1341 AC_SUBST(HAVE_LIBPCREPOSIX)
1342 AC_SUBST(LIB_REGEX)
1343
1344 dnl ------------------
1345 dnl check C-Ares library
1346 dnl ------------------
1347 if test "${enable_nhrpd}" != "no";then
1348    PKG_CHECK_MODULES([CARES], [libcares])
1349 fi
1350
1351
1352 dnl ------------------
1353 dnl check Net-SNMP library
1354 dnl ------------------
1355 if test "${enable_snmp}" != ""; then
1356    AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1357    if test x"$NETSNMP_CONFIG" = x"no"; then
1358       AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1359    fi
1360    LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1361    CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1362    AC_MSG_CHECKING([whether we can link to Net-SNMP])
1363    AC_LINK_IFELSE([AC_LANG_PROGRAM([
1364 int main(void);
1365 ],
1366 [
1367 {
1368   return 0;
1369 }
1370 ])],[AC_MSG_RESULT(yes)],[
1371      AC_MSG_RESULT(no)
1372      AC_MSG_ERROR([--enable-snmp given but not usable])])
1373    AC_DEFINE(HAVE_SNMP,,SNMP)
1374    case "${enable_snmp}" in
1375      yes)
1376       SNMP_METHOD=agentx
1377       ;;
1378      smux|agentx)
1379       SNMP_METHOD="${enable_snmp}"
1380       ;;
1381      *)
1382       AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1383       ;;
1384    esac
1385    AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1386    AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1387    AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
1388 fi
1389
1390 dnl ---------------------------
1391 dnl sockaddr and netinet checks
1392 dnl ---------------------------
1393 AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1394         struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1395         socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1396         vifi_t, struct sioc_vif_req, struct igmpmsg,
1397         struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1398         struct nd_opt_adv_interval, struct rt_addrinfo,
1399         struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1400         [], [], QUAGGA_INCLUDES)
1401
1402 AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1403         struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1404         struct sockaddr_in6.sin6_scope_id,
1405         struct sockaddr_dl.sdl_len,
1406         struct if6_aliasreq.ifra_lifetime,
1407         struct nd_opt_adv_interval.nd_opt_ai_type],
1408         [], [], QUAGGA_INCLUDES)
1409
1410 dnl ---------------------------
1411 dnl IRDP/pktinfo/icmphdr checks
1412 dnl ---------------------------
1413 AC_CHECK_TYPES([struct in_pktinfo], 
1414  [AC_CHECK_TYPES([struct icmphdr],
1415    [if test "${enable_irdp}" != "no"; then
1416       AC_DEFINE(HAVE_IRDP,, IRDP)
1417     fi],
1418    [if test "${enable_irdp}" = "yes"; then
1419       AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1420     fi], [QUAGGA_INCLUDES])],
1421  [if test "${enable_irdp}" = "yes"; then
1422     AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1423   fi], [QUAGGA_INCLUDES])
1424
1425 dnl -----------------------
1426 dnl checking for IP_PKTINFO
1427 dnl -----------------------
1428 AC_MSG_CHECKING(for IP_PKTINFO)
1429 AC_TRY_COMPILE([#include <netdb.h>], [
1430   int opt = IP_PKTINFO;
1431 ], [
1432   AC_MSG_RESULT(yes)
1433   AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1434 ], [
1435   AC_MSG_RESULT(no)
1436 ])
1437
1438 dnl ---------------------------
1439 dnl checking for IP_RECVDSTADDR
1440 dnl ---------------------------
1441 AC_MSG_CHECKING(for IP_RECVDSTADDR)
1442 AC_TRY_COMPILE([#include <netinet/in.h>], [
1443   int opt = IP_RECVDSTADDR;
1444 ], [
1445   AC_MSG_RESULT(yes)
1446   AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1447 ], [
1448   AC_MSG_RESULT(no)
1449 ])
1450
1451 dnl ----------------------
1452 dnl checking for IP_RECVIF
1453 dnl ----------------------
1454 AC_MSG_CHECKING(for IP_RECVIF)
1455 AC_TRY_COMPILE([#include <netinet/in.h>], [
1456   int opt = IP_RECVIF;
1457 ], [
1458   AC_MSG_RESULT(yes)
1459   AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1460 ], [
1461   AC_MSG_RESULT(no)
1462 ])
1463
1464 dnl --------------------------------------
1465 dnl checking for getrusage struct and call
1466 dnl --------------------------------------
1467 if test "${enable_rusage}" != "no"; then
1468   AC_MSG_CHECKING(whether getrusage is available)
1469   AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1470     [AC_MSG_RESULT(yes)
1471      AC_DEFINE(HAVE_RUSAGE,,rusage)],
1472       AC_MSG_RESULT(no))
1473 fi
1474
1475 dnl --------------------------------------
1476 dnl checking for clock_time monotonic struct and call
1477 dnl --------------------------------------
1478 AC_CHECK_DECL(CLOCK_MONOTONIC,
1479         [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
1480          AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
1481 ], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
1482
1483 dnl -------------------
1484 dnl capabilities checks
1485 dnl -------------------
1486 if test "${enable_capabilities}" != "no"; then
1487   AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1488   AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1489     [AC_MSG_RESULT(yes)
1490      AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1491      quagga_ac_keepcaps="yes"],
1492      AC_MSG_RESULT(no)
1493   )
1494   if test x"${quagga_ac_keepcaps}" = x"yes"; then
1495     AC_CHECK_HEADERS(sys/capability.h)
1496   fi
1497   if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1498     AC_CHECK_LIB(cap, cap_init, 
1499       [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1500        LIBCAP="-lcap"
1501        quagga_ac_lcaps="yes"]
1502     )
1503   else
1504     AC_CHECK_HEADERS(priv.h,
1505      [AC_MSG_CHECKING(Solaris style privileges are available)
1506       AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1507           [AC_MSG_RESULT(yes)
1508            AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1509            quagga_ac_scaps="yes"],
1510            AC_MSG_RESULT(no)
1511       )
1512      ]
1513    )
1514   fi
1515   if test x"${quagga_ac_scaps}" = x"yes" \
1516        -o x"${quagga_ac_lcaps}" = x"yes"; then
1517     AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
1518   fi
1519 fi
1520 AC_SUBST(LIBCAP)
1521
1522 dnl ---------------------------------------------------------------------------
1523 dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1524 dnl Check for and set one of the following = 1
1525 dnl   HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1526 dnl   HAVE_SYS_WEAK_ALIAS_PRAGMA
1527 dnl   HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1528 dnl   HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1529 dnl If any scheme is found, set
1530 dnl   HAVE_SYS_WEAK_ALIAS=1
1531 dnl The following variable is set to text value
1532 dnl   WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1533 dnl If weak alias can cross object file boundaries
1534 dnl   WEAK_ALIAS_CROSSFILE = "yes" || "no"
1535 dnl ---------------------------------------------------------------------------
1536 AX_SYS_WEAK_ALIAS
1537
1538 dnl ---------------------------
1539 dnl check for glibc 'backtrace'
1540 dnl --------------------------- 
1541 if test x"${enable_backtrace}" != x"no" ; then
1542   backtrace_ok=no
1543   AC_CHECK_HEADER([execinfo.h], [
1544     AC_SEARCH_LIBS([backtrace], [execinfo], [
1545       AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1546       AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1547       backtrace_ok=yes
1548     ],, [-lm])
1549   ])
1550
1551   if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1552     dnl user explicitly requested backtrace but we failed to find support
1553     AC_MSG_FAILURE([failed to find backtrace support])
1554   fi
1555 fi
1556
1557 dnl -----------------------------------------
1558 dnl check for malloc mallinfo struct and call
1559 dnl this must try and link using LIBS, in
1560 dnl order to check no alternative allocator
1561 dnl has been specified, which might not provide
1562 dnl mallinfo, e.g. such as Umem on Solaris.
1563 dnl -----------------------------------------
1564 AC_CHECK_HEADER([malloc.h],
1565  [AC_MSG_CHECKING(whether mallinfo is available)
1566   AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1567                         [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1568       [AC_MSG_RESULT(yes)
1569        AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1570        AC_MSG_RESULT(no)
1571   )
1572  ], [], QUAGGA_INCLUDES)
1573
1574 dnl ----------
1575 dnl configure date
1576 dnl ----------
1577 CONFDATE=`date '+%Y%m%d'`
1578 AC_SUBST(CONFDATE)
1579
1580 dnl -------
1581 dnl DejaGNU
1582 dnl -------
1583 if test x"$DEJAGNU" = x
1584 then
1585   DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1586 fi
1587 RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1588
1589 AC_SUBST(DEJAGNU)
1590 AC_SUBST(RUNTESTDEFAULTFLAGS)
1591
1592 dnl ------------------------------
1593 dnl set paths for state directory
1594 dnl ------------------------------
1595 AC_MSG_CHECKING(directory to use for state file)
1596 if test "${prefix}" = "NONE"; then
1597   quagga_statedir_prefix="";
1598 else
1599   quagga_statedir_prefix=${prefix}
1600 fi
1601 if test "${localstatedir}" = '${prefix}/var'; then
1602   for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
1603                         ${quagga_statedir_prefix}/var/adm dnl
1604                         ${quagga_statedir_prefix}/etc dnl
1605                         /var/run        dnl
1606                         /var/adm        dnl
1607                         /etc            dnl
1608                         /dev/null;
1609   do
1610     test -d $QUAGGA_STATE_DIR && break
1611   done
1612   quagga_statedir=$QUAGGA_STATE_DIR
1613 else
1614   quagga_statedir=${localstatedir}
1615 fi
1616 if test $quagga_statedir = "/dev/null"; then
1617     AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1618 fi
1619 AC_MSG_RESULT(${quagga_statedir})
1620 AC_SUBST(quagga_statedir)
1621
1622 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1623 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1624 AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1625 AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1626 AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1627 AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
1628 AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
1629 AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
1630 AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
1631 AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
1632 AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1633 AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1634 AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1635 AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1636 AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1637 AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1638 AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
1639 AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
1640 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
1641 AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
1642 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
1643
1644 dnl -------------------------------
1645 dnl Quagga sources should always be 
1646 dnl current wrt interfaces. Dont
1647 dnl allow deprecated interfaces to
1648 dnl be exposed.
1649 dnl -------------------------------
1650 AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1651
1652 dnl ---------------------------
1653 dnl Check htonl works correctly
1654 dnl ---------------------------
1655 AC_MSG_CHECKING(for working htonl)
1656 AC_CACHE_VAL(ac_cv_htonl_works,
1657  [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1658                 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1659  ]
1660 )
1661 AC_MSG_RESULT($ac_cv_htonl_works)
1662
1663 AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile 
1664           ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
1665           ospf6d/Makefile isisd/Makefile vtysh/Makefile
1666           doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
1667           pimd/Makefile nhrpd/Makefile
1668           tests/bgpd.tests/Makefile
1669           tests/libzebra.tests/Makefile
1670           redhat/Makefile
1671           pkgsrc/Makefile
1672           fpm/Makefile
1673           redhat/quagga.spec 
1674           lib/version.h
1675           isisd/topology/Makefile
1676           pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
1677           pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
1678 AC_CONFIG_FILES([solaris/Makefile])
1679
1680 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
1681 ## Hack, but working solution to avoid rebuilding of quagga.info.
1682 ## It's already in CVS until texinfo 4.7 is more common.
1683 AC_OUTPUT
1684
1685 echo "
1686 Quagga configuration
1687 --------------------
1688 quagga version          : ${PACKAGE_VERSION}
1689 host operating system   : ${host_os}
1690 source code location    : ${srcdir}
1691 compiler                : ${CC}
1692 compiler flags          : ${CFLAGS}
1693 make                    : ${MAKE-make}
1694 linker flags            : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
1695 state file directory    : ${quagga_statedir}
1696 config file directory   : `eval echo \`echo ${sysconfdir}\``
1697 example directory       : `eval echo \`echo ${exampledir}\``
1698 user to run as          : ${enable_user}
1699 group to run as         : ${enable_group}
1700 group for vty sockets   : ${enable_vty_group}
1701 config file mask        : ${enable_configfile_mask}
1702 log file mask           : ${enable_logfile_mask}
1703 zebra protobuf enabled  : ${have_protobuf:-no}
1704
1705 The above user and group must have read/write access to the state file
1706 directory and to the config files in the config file directory."
1707
1708 if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1709 Warning: The ${MAKE-make} programme detected, either in your path or
1710 via the MAKE variable, is not GNU Make. GNU make may be installed as
1711 gmake on some systems. and is required to complete a build of Quagga
1712 " > /dev/stderr 
1713 fi