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