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