]> git.proxmox.com Git - mirror_frr.git/blobdiff - configure.ac
delete CVS keywords
[mirror_frr.git] / configure.ac
index 7c6258a1b9e04513d9d4f72a845320c557b195f4..899108d9f4ecb97651a7d285816b3cecb4e373ac 100755 (executable)
@@ -5,14 +5,29 @@
 ##  Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
 ##  Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
 ##
-## $Id: configure.ac,v 1.96 2005/04/02 19:03:39 hasso Exp $
 AC_PREREQ(2.53)
 
-AC_INIT(Quagga, 0.99.0, [http://bugzilla.quagga.net])
+AC_INIT(Quagga, 0.99.19, [https://bugzilla.quagga.net])
 AC_CONFIG_SRCDIR(lib/zebra.h)
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl -----------------------------------
+dnl Get hostname and other information.
+dnl -----------------------------------
+AC_CANONICAL_BUILD()
+AC_CANONICAL_HOST()
+AC_CANONICAL_TARGET()
+
 AM_INIT_AUTOMAKE(1.6)
 AM_CONFIG_HEADER(config.h)
 
+AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
+if test "x$GAWK" = "xnot-in-PATH" ; then
+       AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
+BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
+fi
+AC_ARG_VAR([GAWK],[GNU AWK])
+
 dnl default is to match previous behavior
 exampledir=${sysconfdir}
 AC_ARG_ENABLE([exampledir],
@@ -33,11 +48,6 @@ dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
 AC_SUBST(pkgsrcdir)
 AC_SUBST(pkgsrcrcdir)
 
-dnl -----------------------------------
-dnl Get hostname and other information.
-dnl -----------------------------------
-AC_CANONICAL_HOST
-
 dnl ------------
 dnl Check CFLAGS
 dnl ------------
@@ -52,22 +62,37 @@ fi
 dnl --------------------
 dnl Check CC and friends
 dnl --------------------
+AC_LANG([C])
 AC_PROG_CC
 AC_PROG_CPP
+AM_PROG_CC_C_O
 AC_PROG_EGREP
 
+dnl autoconf 2.59 appears not to support AC_PROG_SED
+dnl AC_PROG_SED
+AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
+
 dnl ------------------------------------------------------------------
 dnl Intel compiler check. Although Intel tries really hard to make icc
 dnl look like gcc, there are some differences. It's very verbose with
 dnl -Wall and it doesn't support the individual -W options.
 dnl ------------------------------------------------------------------
-AC_MSG_CHECKING([whether we are using the Intel compiler])
-AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
-    ICC="no"
-    AC_MSG_RESULT([no]),
-    ICC="yes"
-    AC_MSG_RESULT([yes])
-)
+if test "x${GCC}" = "xyes" ; then
+  COMPILER="GCC"
+  AC_MSG_CHECKING([whether we are using the Intel compiler])
+  AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER],
+      [AC_MSG_RESULT([no])],
+      [COMPILER="ICC"
+       AC_MSG_RESULT([yes])]
+  )
+else
+  AC_MSG_CHECKING([whether we are using SunPro compiler])
+  AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
+      [AC_MSG_RESULT([no])],
+      [COMPILER="SUNPRO"
+       AC_MSG_RESULT([yes])]
+  )
+fi
 
 dnl ---------------------------------------------
 dnl If CLFAGS doesn\'t exist set default value
@@ -75,43 +100,76 @@ dnl AC_PROG_CC will have set minimal default
 dnl already, eg "-O2 -g" for gcc, "-g" for others
 dnl (Wall is gcc specific... have to make sure
 dnl  gcc is being used before setting it)
-dnl Intel icc 8.0 also sets __GNUC__, but
-dnl doesn't support all these fancy -W options.
-dnl ---------------------------------------------
 dnl
-if test "x$cflags_specified" = "x" ; then
-  if test "x${GCC}" = "xyes" && test "x${ICC}" = "xno"; then
-       CFLAGS="-Os -g  -Wall -Wsign-compare -Wpointer-arith"
-       CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
-  fi
-  # TODO: conditionally addd -Wpacked if handled
-fi
-
-dnl ---------------------------------------------------------------------
+dnl Intel icc 8.0 also sets __GNUC__, 
+dnl but doesn't support all these fancy -W options.
 dnl Intel compiler warnings we ignore:
 dnl 279: controlling expression is constant.
 dnl 869: parameter "xxx" was never referenced - to avoid massive warnings
 dnl      about "self", "vty", "argc" and "argv" never referenced in DEFUN
 dnl      macro.
 dnl 981: operands are evaluated in unspecified order.
-dnl ---------------------------------------------------------------------
+dnl
+dnl Sun Studio 10 / SunPro 5.7 is also supported,
+dnl so lets set some sane CFLAGS for it.
+dnl ---------------------------------------------
 
-if test "$ICC" = "yes"; then
-    CFLAGS="-Os -g -Wall -wd 279,869,981"
+AC_MSG_CHECKING([whether to set a default CFLAGS])
+if test "x${cflags_specified}" = "x" ; then
+  case ${COMPILER} in
+    "ICC")
+        CFLAGS="-Os -g -Wall -wd 279,869,981"
+        AC_MSG_RESULT([Intel default])
+        ;;
+    "GCC")
+       CFLAGS="-Os -fno-omit-frame-pointer -g -std=gnu99 -Wall"
+       CFLAGS="${CFLAGS} -Wsign-compare -Wpointer-arith"
+       CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"
+       CFLAGS="${CFLAGS} -Wmissing-prototypes -Wmissing-declarations"
+       CFLAGS="${CFLAGS} -Wchar-subscripts -Wcast-qual"
+       # TODO: conditionally addd -Wpacked if handled
+       AC_MSG_RESULT([gcc default])
+       ;;
+    "SUNPRO")
+       CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
+       AC_MSG_RESULT([SunPro default])
+       ;;
+    *)
+        AC_MSG_RESULT([unknown compiler])
+        ;;
+  esac
+else
+  AC_MSG_RESULT([CFLAGS supplied by user])
 fi
 
 dnl --------------
 dnl Check programs
 dnl --------------
 AC_PROG_INSTALL
+AC_PROG_LN_S
 AC_PROG_MAKE_SET
 AC_CHECK_TOOL(AR, ar)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
 
-dnl ---------
-dnl AIX check
-dnl ---------
-AC_AIX
+dnl ---------------------------
+dnl We, perhaps unfortunately,
+dnl depend on GNU Make specific
+dnl constructs.
+dnl Give the user a warning if
+dnl not GNU Make.
+dnl ---------------------------
+AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
+       [quagga_cv_gnu_make=no
+        if ${MAKE-make} --version 2>/dev/null | \
+               grep '^GNU Make ' >/dev/null ; then
+               quagga_cv_gnu_make=yes;
+        fi
+       ]
+)
+
+dnl -----------------
+dnl System extensions
+dnl -----------------
+AC_GNU_SOURCE
 
 dnl -------
 dnl libtool
@@ -125,6 +183,8 @@ AC_ARG_ENABLE(vtysh,
 [  --enable-vtysh          include integrated vty shell for Quagga])
 AC_ARG_ENABLE(ipv6,
 [  --disable-ipv6          turn off IPv6 related features and daemons])
+AC_ARG_ENABLE(doc,
+[  --disable-doc           do not build docs])
 AC_ARG_ENABLE(zebra,
 [  --disable-zebra         do not build zebra daemon])
 AC_ARG_ENABLE(bgpd,
@@ -141,12 +201,16 @@ AC_ARG_ENABLE(watchquagga,
 [  --disable-watchquagga   do not build watchquagga])
 AC_ARG_ENABLE(isisd,
 [  --enable-isisd          build isisd])
+AC_ARG_ENABLE(solaris,
+[  --enable-solaris          build solaris])
 AC_ARG_ENABLE(bgp-announce,
 [  --disable-bgp-announce, turn off BGP route announcement])
 AC_ARG_ENABLE(netlink,
 [  --enable-netlink        force to use Linux netlink interface])
 AC_ARG_ENABLE(broken-aliases,
 [  --enable-broken-aliases enable aliases as distinct interfaces for Linux 2.2.X])
+AC_ARG_WITH(crypto,
+[  --without-crypto        do not use libcrypto in SNMP])
 AC_ARG_ENABLE(snmp,
 [  --enable-snmp           enable SNMP support])
 AC_ARG_WITH(libpam,
@@ -154,21 +218,20 @@ AC_ARG_WITH(libpam,
 AC_ARG_ENABLE(tcp-zebra,
 [  --enable-tcp-zebra      enable TCP/IP socket connection between zebra and protocol daemon])
 AC_ARG_ENABLE(opaque-lsa,
-[  --enable-opaque-lsa     enable OSPF Opaque-LSA with OSPFAPI support (RFC2370)])
+  AC_HELP_STRING([--disable-opaque-lsa],[do not build OSPF Opaque-LSA with OSPFAPI support (RFC2370)]))
 AC_ARG_ENABLE(ospfapi,
-[  --disable-ospfapi       do not build OSPFAPI to access the OSPF LSA Database, 
-                          (this is the default if --enable-opaque-lsa is not set)])
+[  --disable-ospfapi       do not build OSPFAPI to access the OSPF LSA Database])
 AC_ARG_ENABLE(ospfclient,
 [  --disable-ospfclient    do not build OSPFAPI client for OSPFAPI, 
                           (this is the default if --disable-ospfapi is set)])
 AC_ARG_ENABLE(ospf-te,
-[  --enable-ospf-te        enable Traffic Engineering Extension to OSPF])
+  AC_HELP_STRING([--disable-ospf-te],[disable Traffic Engineering Extension to OSPF]))
 AC_ARG_ENABLE(multipath,
 [  --enable-multipath=ARG  enable multipath function, ARG must be digit])
-AC_ARG_ENABLE(quagga_user,
-[  --enable-user=ARG       user to run Quagga suite as (default quagga)])
-AC_ARG_ENABLE(quagga_group,
-[  --enable-group=ARG      group to run Quagga suite as (default quagga)])
+AC_ARG_ENABLE(user,
+  AC_HELP_STRING([--enable-user=user], [user to run Quagga suite as (default quagga)]))
+AC_ARG_ENABLE(group,
+  AC_HELP_STRING([--enable-group=group], [group to run Quagga suite as (default quagga)]))
 AC_ARG_ENABLE(vty_group,
 [  --enable-vty-group=ARG  set vty sockets to have specified group as owner])
 AC_ARG_ENABLE(configfile_mask,
@@ -186,8 +249,14 @@ AC_ARG_ENABLE(capabilities,
 [  --disable-capabilities        disable using POSIX capabilities])
 AC_ARG_ENABLE(gcc_ultra_verbose,
 [  --enable-gcc-ultra-verbose    enable ultra verbose GCC warnings])
+AC_ARG_ENABLE(linux24_tcp_md5,
+[  --enable-linux24-tcp-md5  enable support for old, Linux-2.4 RFC2385 patch])
 AC_ARG_ENABLE(gcc-rdynamic,
 [  --enable-gcc-rdynamic   enable gcc linking with -rdynamic for better backtraces])
+AC_ARG_ENABLE(time-check,
+[  --disable-time-check          disable slow thread warning messages])
+AC_ARG_ENABLE(pcreposix,
+[  --enable-pcreposix          enable using PCRE Posix libs for regex functions])
 
 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
   CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
@@ -200,11 +269,18 @@ if test x"${enable_gcc_rdynamic}" = x"yes" ; then
   LDFLAGS="${LDFLAGS} -rdynamic"
 fi
 
+if test x"${enable_time_check}" != x"no" ; then
+  if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
+    AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
+  else
+    AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
+  fi
+fi
+
 if test "${enable_broken_aliases}" = "yes"; then
   if test "${enable_netlink}" = "yes"
   then
-    echo "Sorry, you can't use netlink with broken aliases"
-    exit 1
+    AC_MSG_FAILURE([Sorry you can not use netlink with broken aliases])
   fi
   AC_DEFINE(HAVE_BROKEN_ALIASES,,Broken Alias)
   enable_netlink=no
@@ -214,15 +290,19 @@ if test "${enable_tcp_zebra}" = "yes"; then
   AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
 fi
 
-if test "${enable_opaque_lsa}" = "yes"; then
+if test "${enable_opaque_lsa}" != "no"; then
   AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
 fi
 
-if test "${enable_ospf_te}" = "yes"; then
+if test "${enable_ospf_te}" != "no"; then
   AC_DEFINE(HAVE_OPAQUE_LSA,,OSPF Opaque LSA)
   AC_DEFINE(HAVE_OSPF_TE,,OSPF TE)
 fi
 
+if test "${enable_linux24_tcp_md5}" = "yes"; then
+  AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
+fi
+
 AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
 if test "${enable_rtadv}" != "no"; then
   AC_MSG_RESULT(yes)
@@ -251,14 +331,12 @@ if test "${enable_user}" = "yes" || test x"${enable_user}" = x""; then
 elif test "${enable_user}" = "no"; then
   enable_user="root"
 fi
-AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
 
 if test "${enable_group}" = "yes" || test x"${enable_group}" = x""; then
   enable_group="quagga"
 elif test "${enable_group}" = "no"; then
   enable_group="root"
 fi
-AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
 
 if test x"${enable_vty_group}" = x"yes" ; then
   AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
@@ -267,6 +345,11 @@ elif test x"${enable_vty_group}" != x""; then
     AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
   fi
 fi
+AC_SUBST([enable_user])
+AC_SUBST([enable_group])
+AC_SUBST([enable_vty_group])
+AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
+AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
 
 enable_configfile_mask=${enable_configfile_mask:-0600}
 AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
@@ -274,45 +357,164 @@ AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config f
 enable_logfile_mask=${enable_logfile_mask:-0600}
 AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
 
-changequote(, )dnl
-
 MULTIPATH_NUM=1
 
 case "${enable_multipath}" in
-  [0-9]|[1-9][0-9])
+  [[0-9]|[1-9][0-9]])
     MULTIPATH_NUM="${enable_multipath}"
     ;;
   "")
     ;;
   *)           
-    echo "Please specify digit to --enable-multipath ARG."
-    exit 1
+    AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
     ;;
 esac
 
-changequote([, ])dnl
-
 AC_SUBST(MULTIPATH_NUM)
 
-dnl -------------------
-dnl Check header files.
-dnl -------------------
+dnl ------------------------------------
+dnl Check C keywords and standard  types
+dnl ------------------------------------
+AC_C_CONST
+AC_C_INLINE
+AC_C_RESTRICT
+AC_C_VOLATILE
 AC_HEADER_STDC
-AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
-                 sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
-                 sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
-                 libutil.h limits.h])
+AC_HEADER_TIME
+AC_HEADER_SYS_WAIT
+dnl AC_TYPE_PID_T
+AC_TYPE_UID_T
+AC_TYPE_MODE_T
+AC_TYPE_SIZE_T
+AC_TYPE_SIGNAL
+AC_STRUCT_TM
+
+dnl -------------------------
+dnl Check other header files.
+dnl -------------------------
+AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
+       sys/types.h linux/version.h netdb.h asm/types.h \
+       sys/param.h limits.h signal.h \
+       sys/socket.h netinet/in.h time.h sys/time.h])
+
+dnl Utility macro to avoid retyping includes all the time
+m4_define([QUAGGA_INCLUDES],
+[#ifdef SUNOS_5
+#define _XPG4_2
+#define __EXTENSIONS__
+#endif
+#include <stdio.h>
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+/* sys/conf.h depends on param.h on FBSD at least */
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+/* Required for MAXSIG */
+#if HAVE_SIGNAL_H
+# include <signal.h>
+#endif
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#if HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif /* TIME_WITH_SYS_TIME */
+])dnl
+
+dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
+dnl round below execution begins, otherwise it doesn't properly detect
+dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
+dnl on FreeBSD (BZ#408).
+
+AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
+
+m4_define([QUAGGA_INCLUDES],
+QUAGGA_INCLUDES
+[#if HAVE_NET_IF_H
+# include <net/if.h>
+#endif
+])dnl
 
-AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
-                net/if_dl.h net/netopt.h inet/nd.h net/route.h \
-                net/if.h net/if_var.h netinet/in_var.h])
+dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
+dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
+dnl an additional round for it.
 
-dnl V6 headers are checked below, after we check for v6
+AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
 
-dnl check some types
-AC_C_CONST
-dnl AC_TYPE_PID_T
-AC_TYPE_SIGNAL
+m4_define([QUAGGA_INCLUDES],
+QUAGGA_INCLUDES
+[#if HAVE_NET_IF_VAR_H
+# include <net/if_var.h>
+#endif
+])dnl
+
+AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
+       net/if_dl.h net/netopt.h net/route.h \
+       inet/nd.h arpa/inet.h netinet/ip_icmp.h \
+       fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
+       sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
+       [], [], QUAGGA_INCLUDES)
+
+AC_CHECK_HEADERS([ucontext.h], [], [],
+[#ifndef __USE_GNU
+#define __USE_GNU
+#endif /* __USE_GNU */
+QUAGGA_INCLUDES
+])
+
+m4_define([QUAGGA_INCLUDES],
+QUAGGA_INCLUDES
+[#if HAVE_SYS_UN_H
+# include <sys/un.h>
+#endif
+#if HAVE_NETINET_IN_SYSTM_H
+# include <netinet/in_systm.h>
+#endif
+#if HAVE_NETINET_IN_VAR_H
+# include <netinet/in_var.h>
+#endif
+#if HAVE_NET_IF_DL_H
+# include <net/if_dl.h>
+#endif
+#if HAVE_NET_NETOPT_H
+# include <net/netopt.h>
+#endif
+#if HAVE_NET_ROUTE_H
+# include <net/route.h>
+#endif
+#if HAVE_INET_ND_H
+# include <inet/nd.h>
+#endif
+#if HAVE_ARPA_INET_H
+# include <arpa/inet.h>
+#endif
+/* Required for IDRP */
+#if HAVE_NETINET_IP_ICMP_H
+# include <netinet/ip_icmp.h>
+#endif
+])dnl
+
+dnl V6 headers are checked below, after we check for v6
 
 dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
 case "$host" in
@@ -323,13 +525,22 @@ case "$host" in
       AC_CHECK_LIB(xnet, main)
       CURSES=-lcurses
   ;;
-  [*-sunos5.[8-9]] | [*-sunos5.1[0-9]] \
-  | [*-solaris2.[8-9]] | [*-solaris2.1[0-9]])
+  [*-sunos5.[8-9]] \
+  | [*-sunos5.1[0-9]] \
+  | [*-sunos5.1[0-9].[0-9]] \
+  | [*-solaris2.[8-9]] \
+  | [*-solaris2.1[0-9]] \
+  | [*-solaris2.1[0-9].[0-9]])
       opsys=sol8
-      AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
-      AC_DEFINE(SUNOS_5, 1, SunOS 5)
+      AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
+      AC_DEFINE(SUNOS_5, 1, [SunOS 5])
       AC_CHECK_LIB(socket, main)
       AC_CHECK_LIB(nsl, main)
+      AC_CHECK_LIB(umem, main)
+      AC_CHECK_FUNCS([printstack],
+       [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
+        AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
+       ])
       CURSES=-lcurses
   ;;
   *-sunos5* | *-solaris2*)
@@ -346,9 +557,6 @@ case "$host" in
       AC_CHECK_LIB(nsl, gethostbyname)
       AC_CHECK_LIB(socket, socket)
   ;;
-  *-freebsd3.2)
-      AC_DEFINE(FREEBSD_32,,FreeBSD 3.2)
-  ;;
   *-openbsd*)
       opsys=openbsd
       AC_DEFINE(OPEN_BSD,,OpenBSD)
@@ -364,6 +572,8 @@ case "$host" in
   ;;
 esac
 
+AC_SYS_LARGEFILE
+
 dnl ---------------------
 dnl Integrated VTY option
 dnl ---------------------
@@ -372,14 +582,19 @@ case "${enable_vtysh}" in
          AC_DEFINE(VTYSH,,VTY shell)
         AC_PATH_PROG(PERL, perl)
 dnl     Vtysh uses libreadline, which looks for termcap functions at
-dnl     configure time.  We follow readline's search order.
+dnl     configure time.  We follow readlines search order.
 dnl     The required procedures are in libtermcap on NetBSD, in
 dnl     [TODO] on Linux, and in [TODO] on Solaris.
-        AC_CHECK_LIB(termcap, tputs, ,
-               AC_CHECK_LIB(tinfo, tputs, ,
-               AC_CHECK_LIB(curses, tputs, ,
-               AC_CHECK_LIB(ncurses, tputs))))
-         AC_CHECK_LIB(readline, main)
+        AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
+          [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
+            [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
+              [AC_CHECK_LIB(ncurses, tputs, 
+                            LIBREADLINE="$LIBREADLINE -lncurses")]
+             )]
+           )]
+         )
+         AC_CHECK_LIB(readline, main, LIBREADLINE="$LIBREADLINE -lreadline",,
+                      "$LIBREADLINE")
          if test $ac_cv_lib_readline_main = no; then
            AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
          fi
@@ -387,7 +602,8 @@ dnl  [TODO] on Linux, and in [TODO] on Solaris.
         if test $ac_cv_header_readline_history_h = no;then
            AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
         fi
-        AC_CHECK_LIB(readline, rl_completion_matches)
+        AC_CHECK_LIB(readline, rl_completion_matches, 
+                     LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
          if test $ac_cv_lib_readline_rl_completion_matches = no; then
            AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
         fi
@@ -395,23 +611,31 @@ dnl        [TODO] on Linux, and in [TODO] on Solaris.
   "no" ) VTYSH="";;
   *    ) ;;
 esac
+AC_SUBST(LIBREADLINE)
 
 dnl ----------
 dnl PAM module
+dnl
+dnl Quagga detects the PAM library it is built against by checking for a
+dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
+dnl is known to #include pam_appl.h, the standard header of a PAM library, and
+dnl openpam.h doesn't do that, although depends on the header too. Hence a
+dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
+dnl of OpenPAM.
 dnl ----------
 if test "$with_libpam" = "yes"; then
-  AC_CHECK_HEADER(security/pam_misc.h)
-  if test "$ac_cv_header_security_pam_misc_h" = yes; then
-    AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
-    AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
-    pam_conv_func="misc_conv"
-  fi
-  AC_CHECK_HEADER(security/openpam.h)
-  if test "$ac_cv_header_security_openpam_h" = yes; then
-    AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
-    AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
-    pam_conv_func="openpam_ttyconv"
-  fi
+  AC_CHECK_HEADER([security/pam_misc.h],
+    [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
+     AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
+     pam_conv_func="misc_conv"
+    ],
+    [], QUAGGA_INCLUDES)
+  AC_CHECK_HEADER([security/openpam.h],
+    [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
+     AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
+     pam_conv_func="openpam_ttyconv"
+    ],
+    [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
   if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
     AC_MSG_WARN([*** pam support will not be built ***])
     with_libpam="no"
@@ -419,7 +643,7 @@ if test "$with_libpam" = "yes"; then
 fi
 
 if test "$with_libpam" = "yes"; then
-dnl took this test from proftpd's configure.in and suited to our needs
+dnl took this test from proftpds configure.in and suited to our needs
 dnl -------------------------------------------------------------------------
 dnl
 dnl This next check looks funky due to a linker problem with some versions
@@ -465,9 +689,54 @@ dnl AC_CHECK_SIZEOF(long)
 dnl ----------------------------
 dnl check existance of functions
 dnl ----------------------------
-AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
-               strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
-              fcntl strnlen)
+AC_FUNC_CHOWN
+AC_FUNC_FNMATCH
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
+AC_FUNC_MKTIME
+AC_FUNC_STRFTIME
+AC_FUNC_REALLOC
+AC_FUNC_STAT
+AC_FUNC_SELECT_ARGTYPES
+AC_FUNC_STRFTIME
+dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
+dnl can lead to strange side effects.  So we just check for strnlen
+dnl directly, see below.
+dnl AC_FUNC_STRNLENdnl
+AC_FUNC_VPRINTF
+
+dnl -------------------------------
+dnl bgpd needs pow() and hence libm
+dnl -------------------------------
+TMPLIBS="$LIBS"
+AC_CHECK_HEADER([math.h],
+  [AC_CHECK_LIB([m], [pow],
+    [LIBM="-lm"
+     LIBS="$LIBS $LIBM"
+     AC_DEFINE(HAVE_LIBM,, Have libm)
+     AC_CHECK_FUNCS(pow,[],[LIBM=""])
+    ])
+])
+if test x"$LIBM" = x ; then
+  AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
+fi
+LIBS="$TMPLIBS"
+AC_SUBST(LIBM)
+
+dnl ---------------
+dnl other functions
+dnl ---------------
+AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
+       inet_ntoa inet_aton strnlen \
+       memchr memmove memset select socket \
+       strcasecmp strchr strcspn strdup strerror \
+       strncasecmp strndup strrchr strspn strstr \
+       strtol strtoul strlcat strlcpy \
+       daemon snprintf vsnprintf \
+       if_nametoindex if_indextoname getifaddrs \
+       uname fcntl])
+
 AC_CHECK_FUNCS(setproctitle, ,
   [AC_CHECK_LIB(util, setproctitle, 
      [LIBS="$LIBS -lutil"
@@ -536,18 +805,56 @@ AC_SUBST(RT_METHOD)
 AC_SUBST(KERNEL_METHOD)
 AC_SUBST(OTHER_METHOD)
 
+dnl --------------------------
+dnl Determine IS-IS I/O method
+dnl --------------------------
+AC_DEFINE(ISIS_METHOD_PFPACKET,        1, [ constant value for isis method pfpacket ])
+AC_DEFINE(ISIS_METHOD_DLPI,    2, [ constant value for isis method dlpi ])
+AC_DEFINE(ISIS_METHOD_BPF,     3, [ constant value for isis method bpf ])
+AC_CHECK_HEADER(net/bpf.h)
+AC_CHECK_HEADER(sys/dlpi.h)
+AC_MSG_CHECKING(zebra IS-IS I/O method)
+if test x"$opsys" = x"gnu-linux"; then
+  AC_MSG_RESULT(pfpacket)
+  ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
+elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
+  AC_MSG_RESULT(DLPI)
+  ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
+else
+  if test $ac_cv_header_net_bpf_h = no; then
+    if test $ac_cv_header_sys_dlpi_h = no; then
+      AC_MSG_RESULT(none)
+      AC_MSG_WARN([*** IS-IS support will not be built ***])
+      ISISD=""
+    else
+      AC_MSG_RESULT(DLPI)
+    fi
+    ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
+  else
+    AC_MSG_RESULT(BPF)
+    ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
+  fi
+fi
+AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
+
 dnl ------------------------------------
 dnl check for broken CMSG_FIRSTHDR macro
 dnl ------------------------------------
 AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
-AC_TRY_RUN([
+AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #ifdef SUNOS_5
 #define _XPG4_2
 #define __EXTENSIONS__
 #endif
-#include <stdlib.h>
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
+#endif
 
 main()
 {
@@ -560,35 +867,32 @@ main()
   if (CMSG_FIRSTHDR(&msg) != NULL)
     exit(0);
   exit (1);
-}],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
-[AC_MSG_RESULT(no)])
+}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
+[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
 
 dnl ------------------------------
 dnl check kernel route read method
 dnl ------------------------------
-AC_CACHE_CHECK(route read method check, zebra_rtread,
-[if test "$netlink" = yes; then
-  RTREAD_METHOD="rtread_netlink.o"
-  zebra_rtread="netlink"
+AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
+[if test "x$netlink" = xyes; then
+  quagga_cv_rtread_method="netlink"
 else
-for zebra_rtread in /proc/net/route /dev/ip /dev/null;
+for quagga_cv_rtread_method in /proc/net/route /dev/ip /dev/null;
 do
-  test x`ls $zebra_rtread 2>/dev/null` = x"$zebra_rtread" && break
+  test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
 done
-case $zebra_rtread in
-  "/proc/net/route") RTREAD_METHOD="rtread_proc.o"
-                     zebra_rtread="proc";;
+case $quagga_cv_rtread_method in
+  "/proc/net/route") quagga_cv_rtread_method="proc";;
   "/dev/ip")
                      case "$host" in
-                       *-freebsd*)    RTREAD_METHOD=rtread_sysctl.o
-                                      zebra_rtread="sysctl";;
-                       *)             RTREAD_METHOD="rtread_getmsg.o"
-                                      zebra_rtread="getmsg";;
+                       *-freebsd*)    quagga_cv_rtread_method="sysctl";;
+                       *)             quagga_cv_rtread_method="getmsg";;
                      esac;;
-  *)                 RTREAD_METHOD="rtread_sysctl.o"
-                     zebra_rtread="sysctl";;
+       *)
+                     quagga_cv_rtread_method="sysctl";;
 esac
 fi])
+RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
 AC_SUBST(RTREAD_METHOD)
 
 dnl -----------------------------
@@ -623,43 +927,93 @@ fi
 AC_SUBST(IF_METHOD)
 AC_SUBST(IOCTL_METHOD)
 
+dnl ---------------------------------------------------------------
+dnl figure out how to specify an interface in multicast sockets API
+dnl ---------------------------------------------------------------
+AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
+
+AC_MSG_CHECKING([for BSD struct ip_mreq hack])
+AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000)
+  return (0);
+#else
+  #error No support for BSD struct ip_mreq hack detected
+#endif],[AC_MSG_RESULT(yes)
+AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
+AC_MSG_RESULT(no))
+
+dnl ---------------------------------------------------------------
+dnl figure out how to check link-state
+dnl ---------------------------------------------------------------
+AC_CHECK_HEADER([net/if.h],
+  [AC_CHECK_HEADER( [net/if_media.h],
+    [m4_define([LINK_DETECT_INCLUDES],
+      QUAGGA_INCLUDES
+      [#include <net/if_media.h>
+    ])
+    AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
+      AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
+      [], LINK_DETECT_INCLUDES)], 
+    [],
+    QUAGGA_INCLUDES)], 
+  [], QUAGGA_INCLUDES )
+
+dnl ------------------------
+dnl TCP_MD5SIG socket option
+dnl ------------------------
+
+AC_CHECK_HEADER([netinet/tcp.h], 
+   [m4_define([MD5_INCLUDES],
+      QUAGGA_INCLUDES
+      [#include <netinet/tcp.h>
+    ])
+    AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
+   [],
+   QUAGGA_INCLUDES)
+if test $ac_cv_have_decl_TCP_MD5SIG = no; then
+  AC_CHECK_HEADER([linux/tcp.h],
+       [m4_define([MD5_INCLUDES],
+          QUAGGA_INCLUDES
+          [#include <linux/tcp.h>
+        ])
+       AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
+fi
+
 dnl -----------------------
 dnl check proc file system.
 dnl -----------------------
-if test -r /proc/net/dev; then
-  AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
-  IF_PROC=if_proc.o
-fi
-
-if test -r /proc/net/if_inet6; then
-  AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
-  IF_PROC=if_proc.o
+if test "$netlink" != yes; then
+  if test -r /proc/net/dev; then
+    AC_DEFINE(HAVE_PROC_NET_DEV,,/proc/net/dev)
+    IF_PROC=if_proc.o
+  fi
+  if test -r /proc/net/if_inet6; then
+    AC_DEFINE(HAVE_PROC_NET_IF_INET6,,/proc/net/if_inet6)
+    IF_PROC=if_proc.o
+  fi
 fi
 AC_SUBST(IF_PROC)
 
 dnl -----------------------------
 dnl check ipforward detect method
 dnl -----------------------------
-AC_CACHE_CHECK(ipforward method check, zebra_ipforward_path,
-[for zebra_ipforward_path in /proc/net/snmp /dev/ip /dev/null;
+AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
+[for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
 do
-  test x`ls $zebra_ipforward_path 2>/dev/null` = x"$zebra_ipforward_path" && break
+  test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
 done
-case $zebra_ipforward_path in
-  "/proc/net/snmp")  IPFORWARD=ipforward_proc.o
-                     zebra_ipforward_path="proc";;
+case $quagga_cv_ipforward_method in
+  "/proc/net/snmp")  quagga_cv_ipforward_method="proc";;
   "/dev/ip")         
                      case "$host" in
-                       *-nec-sysv4*)  IPFORWARD=ipforward_ews.o
-                                      zebra_ipforward_path="ews";;
-                       *-freebsd*)    IPFORWARD=ipforward_sysctl.o
-                                      zebra_ipforward_path="sysctl";;
-                       *)             IPFORWARD=ipforward_solaris.o
-                                      zebra_ipforward_path="solaris";;
+                       *-nec-sysv4*)  quagga_cv_ipforward_method="ews";;
+                       *-freebsd*)    quagga_cv_ipforward_method="sysctl";;
+                       *)             quagga_cv_ipforward_method="solaris";;
                      esac;;
-  *)                 IPFORWARD=ipforward_sysctl.o
-                     zebra_ipforward_path="sysctl";;
+  *)                 quagga_cv_ipforward_method="sysctl";;
 esac])
+IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
 AC_SUBST(IPFORWARD)
 
 AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
@@ -758,6 +1112,18 @@ dnl ----------
     fi
   fi
 
+  if test "$zebra_cv_linux_ipv6" = "yes";then
+    AC_MSG_CHECKING(whether libc has IPv6 support)
+    AC_TRY_LINK([#include <netinet/in.h>
+    ],[ int a; a = (int) in6addr_any.s6_addr[0]; if (a != 12345) return a; ],
+    [AC_MSG_RESULT(yes)
+      zebra_cv_ipv6=yes
+      zebra_cv_linux_ipv6=yes],
+    [AC_MSG_RESULT(no)
+      zebra_cv_ipv6=no
+      zebra_cv_linux_ipv6=no])
+  fi
+
   if test "$zebra_cv_linux_ipv6" = "yes";then
     AC_MSG_CHECKING(for GNU libc >= 2.1)
     AC_DEFINE(HAVE_IPV6,1,Linux IPv6)
@@ -797,7 +1163,34 @@ dnl IPv6 header checks
 dnl ------------------
 if test "x${zebra_cv_ipv6}" = "xyes"; then
 AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
-                netinet6/in6_var.h netinet6/nd6.h])
+       netinet6/in6_var.h netinet6/nd6.h], [], [],
+       QUAGGA_INCLUDES)
+fi
+
+m4_define([QUAGGA_INCLUDES],dnl
+QUAGGA_INCLUDES
+[#if HAVE_NETINET6_IN6_H
+#include <netinet6/in6.h>
+#endif
+#if HAVE_NETINET_IN6_VAR_H
+#include <netinet/in6_var.h>
+#endif
+#if HAVE_NETINET_ICMP6_H
+# include <netinet/icmp6.h>
+#endif
+#if HAVE_NETINET6_IN6_VAR_H
+# include <netinet6/in6_var.h>
+#endif
+#if HAVE_NETINET6_ND6_H
+# include <netinet6/nd6.h>
+#endif
+])dnl
+
+dnl disable doc check
+if test "${enable_doc}" = "no";then
+  DOC=""
+else
+  DOC="doc"
 fi
 
 dnl --------------------
@@ -834,7 +1227,7 @@ else
 fi
 
 OSPFCLIENT=""
-if test "${enable_opaque_lsa}" = "yes"; then
+if test "${enable_opaque_lsa}" != "no"; then
   if test "${enable_ospfapi}" != "no";then
     AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
 
@@ -863,10 +1256,20 @@ case "${enable_isisd}" in
   *    ) ;;
 esac
 
+# XXX Perhaps auto-enable on Solaris, but that's messy for cross builds.
+case "${enable_solaris}" in
+  "yes") SOLARIS="solaris";;
+  "no" ) SOLARIS="";;
+  *    ) ;;
+esac
+
 if test "${enable_bgp_announce}" = "no";then
-  AC_DEFINE(DISABLE_BGP_ANNOUNCE,,Disable BGP installation to zebra)
+  AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
+else
+  AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
 fi
 
+AC_SUBST(DOC)
 AC_SUBST(ZEBRA)
 AC_SUBST(BGPD)
 AC_SUBST(RIPD)
@@ -875,6 +1278,7 @@ AC_SUBST(OSPFD)
 AC_SUBST(OSPF6D)
 AC_SUBST(WATCHQUAGGA)
 AC_SUBST(ISISD)
+AC_SUBST(SOLARIS)
 AC_SUBST(VTYSH)
 AC_SUBST(INCLUDES)
 AC_SUBST(CURSES)
@@ -884,7 +1288,6 @@ AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
 AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
 AC_CHECK_LIB(crypt, crypt)
 AC_CHECK_LIB(resolv, res_init)
-AC_CHECK_LIB(m, main)
 
 dnl ---------------------------------------------------
 dnl BSD/OS 4.1 define inet_XtoY function as __inet_XtoY
@@ -893,259 +1296,79 @@ AC_CHECK_FUNC(__inet_ntop, AC_DEFINE(HAVE_INET_NTOP,,__inet_ntop))
 AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
 AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
 
+dnl ---------------------------
+dnl check system has PCRE regexp
+dnl ---------------------------
+if test "x$enable_pcreposix" = "xyes"; then
+  AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
+  AC_MSG_WARN([*** falling back to other regex library ***]) ])
+fi
+
+if test "x$enable_pcreposix" != "xyes"; then
 dnl ---------------------------
 dnl check system has GNU regexp
 dnl ---------------------------
-dnl AC_MSG_CHECKING(whether system has GNU regex)
+AC_MSG_CHECKING(whether system has GNU regex)
 AC_CHECK_LIB(c, regexec,
 [AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
  LIB_REGEX=""],
 [LIB_REGEX="regex.o"])
+fi
+AC_SUBST(HAVE_LIBPCREPOSIX)
 AC_SUBST(LIB_REGEX)
 
 dnl ------------------
-dnl check SNMP library
+dnl check Net-SNMP library
 dnl ------------------
-if test "${enable_snmp}" = "yes";then
-dnl  AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
-  if test "${HAVE_SNMP}" = ""; then
-    old_libs="${LIBS}"
-    LIBS="-L/usr/lib"
-    unset ac_cv_lib_snmp_asn_parse_int
-    AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
-    if test "${NEED_CRYPTO}" = ""; then
-      AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes ])
-    else
-      AC_CHECK_LIB(netsnmp, asn_parse_int, [HAVE_NETSNMP=yes; HAVE_SNMP=yes; NEED_CRYPTO=yes;LIBS="$LIBS -lcrypto" ],,"-lcrypto")
+if test "${enable_snmp}" = "yes"; then
+    if test "$with_crypto" != "no"; then
+        LIBS="${LIBS} -lcrypto";
     fi
-    LIBS="${old_libs}"
-  fi
-  if test "${HAVE_SNMP}" = ""; then
-    old_libs="${LIBS}"
-    LIBS="-L/usr/lib"
-    unset ac_cv_lib_snmp_asn_parse_int
-    AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes, )
-    if test "${HAVE_SNMP}" = ""; then
-      unset ac_cv_lib_snmp_asn_parse_int
-      AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
-      if test "${NEED_CRYPTO}" = "yes"; then 
-        AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
-      fi
-    fi
-    LIBS="${old_libs}"
-  fi
-
-  if test "${HAVE_SNMP}" = ""; then
-    old_libs="${LIBS}"
-    LIBS="-L/usr/local/lib"
-    unset ac_cv_lib_snmp_asn_parse_int
-    AC_CHECK_LIB(snmp, asn_parse_int, HAVE_SNMP=yes)
-    if test "${HAVE_SNMP}" = ""; then
-      unset ac_cv_lib_snmp_asn_parse_int
-      AC_CHECK_LIB(crypto, main, NEED_CRYPTO=yes, )
-      if test "${NEED_CRYPTO}" = "yes"; then
-        AC_CHECK_LIB(snmp, asn_parse_int, [HAVE_SNMP=yes; NEED_CRYPTO=yes; LIBS="$LIBS -lcrypto" ],,"-lcrypto")
-      fi
-    fi
-    LIBS="${old_libs}"
-  fi
-
-  if test "${HAVE_SNMP}" = "yes"; then
-    for ac_snmp in /usr/include/net-snmp/library/asn1.h /usr/include/ucd-snmp/asn1.h /usr/local/include/ucd-snmp/asn1.h /dev/null
-    do
-      test -f "${ac_snmp}" && break
-    done
-
-    case ${ac_snmp} in
-      /usr/include/net-snmp/*)
-                  AC_DEFINE(HAVE_SNMP,,SNMP)
-                 AC_DEFINE(HAVE_NETSNMP,,SNMP)
-                  AC_DEFINE(UCD_COMPATIBLE,,SNMP)
-                  SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/net-snmp -I/usr/include/net-snmp/library"
-                 if test "${HAVE_NETSNMP}" = "yes"; then
-                       LIBS="${LIBS} -lnetsnmp"
-                 else
-                       LIBS="${LIBS} -lsnmp"
-                 fi
-                  ;;
-      /usr/include/ucd-snmp/*) 
-                  AC_DEFINE(HAVE_SNMP,,SNMP)
-                  SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/include/ucd-snmp"
-                 LIBS="${LIBS} -lsnmp"
-                  ;;
-      /usr/local/include/ucd-snmp/*) 
-                  AC_DEFINE(HAVE_SNMP,,SNMP)
-                 SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/ucd-snmp"
-                 LIBS="${LIBS} -L/usr/local/lib -lsnmp"
-                  ;;
-      /usr/local/include/net-snmp/*)
-               AC_DEFINE(HAVE_SNMP,,SNMP)
-               AC_DEFINE(HAVE_NET_SNMP,,SNMP)
-               AC_DEFINE(UCD_COMPATIBLE,,SNMP)
-               SNMP_INCLUDES="${SNMP_INCLUDES} -I/usr/local/include/net-snmp"
-               LIBS="${LIBS} -L/usr/local/lib -lnetsnmp"
-               ;;
-    esac
-    if test "${NEED_CRYPTO}" = "yes"; then
-      LIBS="${LIBS} -lcrypto"
-    fi
-  fi
-fi
-
-if test "${enable_snmp}" = "yes" -a "${HAVE_SNMP}" != "yes"; then
-  AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])
-fi
-
-AC_SUBST(SNMP_INCLUDES)
-
-dnl ----------------------------
-dnl check sa_len of sockaddr
-dnl ----------------------------
-AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>
-],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SA_LEN,,sa_len)],
- AC_MSG_RESULT(no))
-
-dnl ----------------------------
-dnl check sin_len of sockaddr_in
-dnl ----------------------------
-AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <netinet/in.h>
-],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
- AC_MSG_RESULT(no))
-
-dnl ----------------------------
-dnl check sun_len of sockaddr_un
-dnl ----------------------------
-AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/un.h>
-],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
- AC_MSG_RESULT(no))
-
-dnl -----------------------------------
-dnl check sin6_scope_id of sockaddr_in6
-dnl -----------------------------------
-if test "$zebra_cv_ipv6" = yes; then
-  AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
-  AC_TRY_COMPILE([#include <sys/types.h>
-#include <netinet/in.h>
-],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
- AC_MSG_RESULT(no))
+    AC_CHECK_LIB(netsnmp, asn_parse_int,
+       [AC_DEFINE(HAVE_NETSNMP,,Net SNMP) 
+        AC_DEFINE(HAVE_SNMP,,SNMP)
+        LIBS="${LIBS} -lnetsnmp"],
+       [AC_MSG_ERROR([--enable-snmp given, but cannot find support for SNMP])])
+
+    AC_CHECK_HEADER([net-snmp/net-snmp-config.h],
+        [],
+        [AC_MSG_ERROR([--enable-snmp given, but cannot find net-snmp-config.h])],
+       QUAGGA_INCLUDES)
+    AC_SUBST(SNMP_INCLUDES)
 fi
 
-dnl ----------------------------
-dnl check socklen_t exist or not
-dnl ----------------------------
-AC_MSG_CHECKING(whther socklen_t is defined)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-],[socklen_t ac_x;],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
- AC_MSG_RESULT(no))
-
-dnl ------------------------
-dnl check struct sockaddr_dl
-dnl ------------------------
-AC_MSG_CHECKING(whether struct sockaddr_dl exist)
-AC_EGREP_HEADER(sockaddr_dl,
-net/if_dl.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
- AC_MSG_RESULT(no))
-
-dnl --------------------------
-dnl check structure ifaliasreq
-dnl --------------------------
-AC_MSG_CHECKING(whether struct ifaliasreq exist)
-AC_EGREP_HEADER(ifaliasreq,
-net/if.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
- AC_MSG_RESULT(no))
-
-dnl ----------------------------
-dnl check structure in6_aliasreq
-dnl ----------------------------
-AC_MSG_CHECKING(whether struct in6_aliasreq exist)
-AC_EGREP_HEADER(in6_aliasreq,
-netinet6/in6_var.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
- AC_MSG_RESULT(no))
-
-dnl -----------------------------------
-dnl check ifra_lifetime of in6_aliasreq
-dnl -----------------------------------
-AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <netinet6/in6_var.h>
-],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
- AC_MSG_RESULT(no))
-
 dnl ---------------------------
-dnl check structure rt_addrinfo
+dnl sockaddr and netinet checks
 dnl ---------------------------
-AC_MSG_CHECKING(whether struct rt_addrinfo exist)
-AC_EGREP_HEADER(rt_addrinfo,
-net/route.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
- AC_MSG_RESULT(no))
-
-dnl --------------------------
-dnl check structure in_pktinfo
-dnl --------------------------
-AC_MSG_CHECKING(whether struct in_pktinfo exist)
-AC_TRY_COMPILE([#include <netinet/in.h>
-],[struct in_pktinfo ac_x;],
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
- AC_MSG_RESULT(no))
+AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
+       struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
+       socklen_t,
+       struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
+       struct nd_opt_adv_interval, struct rt_addrinfo,
+       struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
+       [], [], QUAGGA_INCLUDES)
+
+AC_CHECK_MEMBERS([struct sockaddr.sa_len,
+       struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
+       struct sockaddr_in6.sin6_scope_id,
+       struct if6_aliasreq.ifra_lifetime,
+       struct nd_opt_adv_interval.nd_opt_ai_type],
+       [], [], QUAGGA_INCLUDES)
 
-dnl ----------------------------------
-dnl check struct nd_opt_homeagent_info
-dnl ----------------------------------
-AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
-AC_EGREP_HEADER(nd_opt_homeagent_info,
-netinet/icmp6.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
- AC_MSG_RESULT(no))
-
-dnl --------------------------------
-dnl check struct nd_opt_adv_interval
-dnl --------------------------------
-AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
-AC_EGREP_HEADER(nd_opt_adv_interval,
-netinet/icmp6.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
- AC_MSG_RESULT(no))
-
-dnl ------------------------------------
-dnl check fields in  nd_opt_adv_interval
-dnl ------------------------------------
-AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
-AC_EGREP_HEADER(nd_opt_ai_type,
-netinet/icmp6.h,
-[AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
- AC_MSG_RESULT(no))
+dnl ---------------------------
+dnl IRDP/pktinfo/icmphdr checks
+dnl ---------------------------
+AC_CHECK_TYPES([struct in_pktinfo], 
+ [AC_CHECK_TYPES([struct icmphdr],
+   [if test "${enable_irdp}" != "no"; then
+      AC_DEFINE(HAVE_IRDP,, IRDP)
+    fi],
+   [if test "${enable_irdp}" = "yes"; then
+      AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
+    fi], [QUAGGA_INCLUDES])],
+ [if test "${enable_irdp}" = "yes"; then
+    AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
+  fi], [QUAGGA_INCLUDES])
 
 dnl --------------------------------------
 dnl checking for getrusage struct and call
@@ -1157,6 +1380,14 @@ AC_TRY_COMPILE([#include <sys/resource.h>
  AC_DEFINE(HAVE_RUSAGE,,rusage)],
  AC_MSG_RESULT(no))
 
+dnl --------------------------------------
+dnl checking for clock_time monotonic struct and call
+dnl --------------------------------------
+AC_CHECK_DECL(CLOCK_MONOTONIC,
+       [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
+        AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
+], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
+
 dnl -------------------
 dnl capabilities checks
 dnl -------------------
@@ -1175,28 +1406,55 @@ if test "${enable_capabilities}" != "no"; then
     AC_CHECK_LIB(cap, cap_init, 
       [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
        LIBCAP="-lcap"
-      ]
+       quagga_ac_lcaps="yes"]
     )
+  else
+    AC_CHECK_HEADERS(priv.h,
+     [AC_MSG_CHECKING(Solaris style privileges are available)
+      AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
+         [AC_MSG_RESULT(yes)
+          AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
+          quagga_ac_scaps="yes"],
+          AC_MSG_RESULT(no)
+      )
+     ]
+   )
+  fi
+  if test x"${quagga_ac_scaps}" = x"yes" \
+       -o x"${quagga_ac_lcaps}" = x"yes"; then
+    AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
   fi
 fi
 AC_SUBST(LIBCAP)
 
-dnl -------------------
-dnl test for ucontext.h
-dnl -------------------
-AC_CHECK_HEADERS(ucontext.h)
-
 dnl ---------------------------
 dnl check for glibc 'backtrace'
 dnl --------------------------- 
 if test "${glibc}" = "yes"; then
-   AC_CHECK_HEADER(execinfo.h)
+   AC_CHECK_HEADER([execinfo.h],
+    [AC_CHECK_FUNC([backtrace],
+       [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
+        AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
+       ])
+    ])
 fi
-if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
-  AC_CHECK_FUNC(backtrace,
-    [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
+
+dnl -----------------------------------------
+dnl check for malloc mallinfo struct and call
+dnl this must try and link using LIBS, in
+dnl order to check no alternative allocator
+dnl has been specified, which might not provide
+dnl mallinfo, e.g. such as Umem on Solaris.
+dnl -----------------------------------------
+AC_CHECK_HEADER([malloc.h],
+ [AC_MSG_CHECKING(whether mallinfo is available)
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
+                        [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
+      [AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
+       AC_MSG_RESULT(no)
   )
-fi
+ ], [], QUAGGA_INCLUDES)
 
 dnl ----------
 dnl configure date
@@ -1204,17 +1462,40 @@ dnl ----------
 CONFDATE=`date '+%Y%m%d'`
 AC_SUBST(CONFDATE)
 
+dnl Conditionally enable PIE support for GNU toolchains.
+AC_ARG_ENABLE(pie, AS_HELP_STRING([--disable-pie], [Do not build tools as a Position Independent Executables]))
+if test "$enable_pie" != "no"; then
+  AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
+    save_CFLAGS=$CFLAGS
+    save_LDFLAGS=$LDFLAGS
+    CFLAGS="$CFLAGS -fPIE"
+    LDFLAGS="$LDFLAGS -pie"
+    AC_LINK_IFELSE([AC_LANG_SOURCE([[static int foo[30000]; int main () { return 0; }]])],
+      [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no]
+    )
+    CFLAGS=$save_CFLAGS
+    LDFLAGS=$save_LDFLAGS
+  ])
+  if test "$ap_cv_cc_pie" = "yes"; then
+    PICFLAGS="-fPIE"
+    PILDFLAGS="-pie"
+  fi
+fi
+
+AC_SUBST(PICFLAGS)
+AC_SUBST(PILDFLAGS)
+
 dnl ------------------------------
 dnl set paths for state directory
 dnl ------------------------------
+AC_MSG_CHECKING(directory to use for state file)
 if test "${prefix}" = "NONE"; then
   quagga_statedir_prefix="";
 else
   quagga_statedir_prefix=${prefix}
 fi
 if test "${localstatedir}" = '${prefix}/var'; then
-  AC_CACHE_CHECK(state directory,ac_statedir,
-  [for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
+  for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
                        ${quagga_statedir_prefix}/var/adm dnl
                        ${quagga_statedir_prefix}/etc dnl
                        /var/run        dnl
@@ -1224,15 +1505,15 @@ if test "${localstatedir}" = '${prefix}/var'; then
   do
     test -d $QUAGGA_STATE_DIR && break
   done
-  quagga_statedir=$QUAGGA_STATE_DIR])
+  quagga_statedir=$QUAGGA_STATE_DIR
 else
   quagga_statedir=${localstatedir}
-  AC_MSG_CHECKING(directory to use for state file)
-  AC_MSG_RESULT(${quagga_statedir})
 fi
 if test $quagga_statedir = "/dev/null"; then
     AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
 fi
+AC_MSG_RESULT(${quagga_statedir})
+AC_SUBST(quagga_statedir)
 
 AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
 AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
@@ -1252,23 +1533,23 @@ AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty so
 AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
 AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
 
+dnl -------------------------------
+dnl Quagga sources should always be 
+dnl current wrt interfaces. Dont
+dnl allow deprecated interfaces to
+dnl be exposed.
+dnl -------------------------------
+AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
+
 dnl ---------------------------
 dnl Check htonl works correctly
 dnl ---------------------------
 AC_MSG_CHECKING(for working htonl)
-AC_CACHE_VAL(ac_cv_htonl_works, [
-AC_TRY_LINK([#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif],
-[htonl (0);],
-ac_cv_htonl_works=yes,
-ac_cv_htonl_works=no)])
+AC_CACHE_VAL(ac_cv_htonl_works,
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
+               [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
+ ]
+)
 AC_MSG_RESULT($ac_cv_htonl_works)
 
 AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile 
@@ -1282,22 +1563,24 @@ AC_CONFIG_FILES([Makefile lib/Makefile zebra/Makefile ripd/Makefile
          isisd/topology/Makefile
          pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
          pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
+AC_CONFIG_FILES([solaris/Makefile])
+
 AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
 ## Hack, but working solution to avoid rebuilding of quagga.info.
 ## It's already in CVS until texinfo 4.7 is more common.
-AC_CONFIG_COMMANDS([info-time],[touch doc/quagga.info])
 AC_OUTPUT
 
 echo "
 Quagga configuration
 --------------------
 quagga version          : ${PACKAGE_VERSION}
-host operationg system  : ${host_os}
+host operating system  : ${host_os}
 source code location    : ${srcdir}
 compiler                : ${CC}
 compiler flags          : ${CFLAGS}
+make                    : ${MAKE-make}
 includes                : ${INCLUDES} ${SNMP_INCLUDES}
-linker flags            : ${LDFLAGS} ${LIBS}
+linker flags            : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
 state file directory    : ${quagga_statedir}
 config file directory   : `eval echo \`echo ${sysconfdir}\``
 example directory       : `eval echo \`echo ${exampledir}\``
@@ -1308,5 +1591,11 @@ config file mask        : ${enable_configfile_mask}
 log file mask           : ${enable_logfile_mask}
 
 The above user and group must have read/write access to the state file
-directory and to the config files in the config file directory.
-"
+directory and to the config files in the config file directory."
+
+if test x"$quagga_cv_gnu_make" = x"no"; then echo "
+Warning: The ${MAKE-make} programme detected, either in your path or
+via the MAKE variable, is not GNU Make. GNU make may be installed as
+gmake on some systems. and is required to complete a build of Quagga
+" > /dev/stderr 
+fi