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