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