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