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