File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / configure.ac
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 11:53:40 2012 UTC (12 years, 1 month ago) by misho
Branches: quagga, MAIN
CVS tags: v0_99_20_1, HEAD
quagga 0.99.20.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>