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