blob: 7d9aa3f3cfa2357c7c7c141c516c0c9d16e60211 [file] [log] [blame]
paul7ea487b2003-03-17 02:05:07 +00001##
paule8f29842003-08-12 13:08:31 +00002## Configure template file for Quagga.
paul7ea487b2003-03-17 02:05:07 +00003## autoconf will generate configure script.
4##
5## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
paule8f29842003-08-12 13:08:31 +00006## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
paul7ea487b2003-03-17 02:05:07 +00007##
Paul Jakmaf9f47312016-02-16 11:30:33 +00008AC_PREREQ(2.60)
paul7ea487b2003-03-17 02:05:07 +00009
Paul Jakmac876b0b2017-02-08 15:19:38 +000010AC_INIT(Quagga, 1.2.0, [https://bugzilla.quagga.net])
David Lamparter7abd8752014-11-22 10:43:29 -080011CONFIG_ARGS="$*"
12AC_SUBST(CONFIG_ARGS)
paulfa1253d2003-09-24 05:09:26 +000013AC_CONFIG_SRCDIR(lib/zebra.h)
Paul Jakma62c9f502009-07-19 17:33:21 +010014AC_CONFIG_MACRO_DIR([m4])
ajsdfb9a542005-04-11 14:55:55 +000015
16dnl -----------------------------------
17dnl Get hostname and other information.
18dnl -----------------------------------
19AC_CANONICAL_BUILD()
20AC_CANONICAL_HOST()
21AC_CANONICAL_TARGET()
22
Avneesh Sachdevb2624482016-04-04 10:54:56 -070023# Disable portability warnings -- our automake code (in particular
24# common.am) uses some constructs specific to gmake.
25AM_INIT_AUTOMAKE([1.6 -Wno-portability])
Pawel Wieczorkiewicz2ab67a72016-04-01 12:54:38 +020026
27m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
David Lampartercc813082015-02-10 11:39:39 +010028AM_SILENT_RULES([yes])
Hasso Tepper303bb002013-01-13 17:45:28 +000029AC_CONFIG_HEADERS(config.h)
paul7ea487b2003-03-17 02:05:07 +000030
David Lamparter0be793e2012-11-27 01:34:56 +000031AC_PATH_PROG(PERL, perl)
Jeremy Jackson7ec57362009-01-21 22:10:40 -050032AC_CHECK_PROG([GAWK],[gawk],[gawk],[not-in-PATH])
33if test "x$GAWK" = "xnot-in-PATH" ; then
34 AC_MSG_ERROR([GNU awk is required for lib/memtype.h made by memtypes.awk.
35BSD awk complains: awk: gensub doesn't support backreferences (subst "\1") ])
36fi
paul03ecfb62005-04-16 15:38:23 +000037AC_ARG_VAR([GAWK],[GNU AWK])
38
gdtd6b72f72003-12-03 17:24:27 +000039dnl default is to match previous behavior
gdtc4f0efe2003-12-04 15:39:25 +000040exampledir=${sysconfdir}
gdtd6b72f72003-12-03 17:24:27 +000041AC_ARG_ENABLE([exampledir],
David Lamparterb6fa7602014-06-28 22:15:59 +020042 AS_HELP_STRING([--enable-exampledir],
gdtd6b72f72003-12-03 17:24:27 +000043 [specify alternate directory for examples]),
44 exampledir="$enableval",)
gdtc4f0efe2003-12-04 15:39:25 +000045dnl XXX add --exampledir to autoconf standard directory list somehow
gdtd6b72f72003-12-03 17:24:27 +000046AC_SUBST(exampledir)
47
gdtcbd04082004-08-31 18:16:36 +000048dnl default is to match previous behavior
49pkgsrcrcdir=""
50pkgsrcdir=""
51AC_ARG_ENABLE([pkgsrcrcdir],
David Lamparterb6fa7602014-06-28 22:15:59 +020052 AS_HELP_STRING([--enable-pkgsrcrcdir],
gdtcbd04082004-08-31 18:16:36 +000053 [specify directory for rc.d scripts]),
54 pkgsrcrcdir="$enableval"; pkgsrcdir="pkgsrc",)
55dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
56AC_SUBST(pkgsrcdir)
57AC_SUBST(pkgsrcrcdir)
58
paul7ea487b2003-03-17 02:05:07 +000059dnl ------------
60dnl Check CFLAGS
61dnl ------------
62AC_ARG_WITH(cflags,
63[ --with-cflags Set CFLAGS for use in compilation.])
64if test "x$with_cflags" != "x" ; then
65 CFLAGS="$with_cflags" ; cflags_specified=yes ;
66elif test -n "$CFLAGS" ; then
67 cflags_specified=yes ;
68fi
69
hasso1969e4b2005-03-27 13:07:23 +000070dnl --------------------
71dnl Check CC and friends
72dnl --------------------
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010073AC_LANG([C])
paul7ea487b2003-03-17 02:05:07 +000074AC_PROG_CC
hasso1969e4b2005-03-27 13:07:23 +000075AC_PROG_CPP
Paul P Komkoff Jr46bc0e42008-08-13 16:17:04 +010076AM_PROG_CC_C_O
Paul Jakmaf9f47312016-02-16 11:30:33 +000077AC_PROG_RANLIB
hasso1969e4b2005-03-27 13:07:23 +000078AC_PROG_EGREP
Timo Teräsdafa05e2017-01-19 17:27:01 +020079PKG_PROG_PKG_CONFIG
Martin Wintera53d4e52016-10-20 23:55:10 -070080AC_PROG_CC_C99
Greg Troxel553bdfe2007-02-06 20:10:35 +000081
82dnl autoconf 2.59 appears not to support AC_PROG_SED
83dnl AC_PROG_SED
84AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
hasso1969e4b2005-03-27 13:07:23 +000085
Paul Jakma3c06ac02017-02-05 21:45:05 +000086dnl Check for pdflatex and latexmk, in case someone wants to build
87dnl PDFs from TeX (as used to be case for HACKING)
Paul Jakmafa482832012-03-08 13:51:21 +000088AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
89AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
90if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
91 AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
92else
93 HAVE_LATEX=true
94fi
95AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
Paul Jakma3c06ac02017-02-05 21:45:05 +000096dnl for making HACKING.pdf from HACKING.md using pandoc
97AC_CHECK_PROG([PANDOC],[pandoc],[pandoc],[/bin/false])
98if test "x$PDFLATEX" = "x/bin/false" -o "x$PANDOC" = "x/bin/false"; then
99 AC_MSG_WARN([Will not be able to make PDF versions of MD documents])
100else
101 HAVE_PANDOC=true
102fi
103AM_CONDITIONAL([HAVE_PANDOC], [test "x$HAVE_PANDOC" = "xtrue"])
Paul Jakmafa482832012-03-08 13:51:21 +0000104
David Lamparter3a7e83c2015-03-03 09:55:51 +0100105if test "x${GCC}" != "xyes" ; then
paul6a4b8832005-11-26 08:28:00 +0000106 AC_MSG_CHECKING([whether we are using SunPro compiler])
107 AC_EGREP_CPP([^__SUNPRO_C.*0x5(7|8|9)], ["__SUNPRO_C" __SUNPRO_C],
108 [AC_MSG_RESULT([no])],
109 [COMPILER="SUNPRO"
110 AC_MSG_RESULT([yes])]
111 )
112fi
paul7ea487b2003-03-17 02:05:07 +0000113
paula49c0ff2004-09-30 06:08:58 +0000114dnl ---------------------------------------------
paul7ea487b2003-03-17 02:05:07 +0000115dnl If CLFAGS doesn\'t exist set default value
paula49c0ff2004-09-30 06:08:58 +0000116dnl AC_PROG_CC will have set minimal default
117dnl already, eg "-O2 -g" for gcc, "-g" for others
paul27eebb32004-07-22 18:16:59 +0000118dnl (Wall is gcc specific... have to make sure
119dnl gcc is being used before setting it)
120dnl
paul6a4b8832005-11-26 08:28:00 +0000121dnl Sun Studio 10 / SunPro 5.7 is also supported,
122dnl so lets set some sane CFLAGS for it.
123dnl ---------------------------------------------
hasso1969e4b2005-03-27 13:07:23 +0000124
David Lamparter3a7e83c2015-03-03 09:55:51 +0100125AC_USE_SYSTEM_EXTENSIONS()
126AC_DEFUN([AC_C_FLAG], [{
127 AC_LANG_PUSH(C)
128 ac_c_flag_save="$CFLAGS"
129 CFLAGS="$CFLAGS $1"
130 AC_MSG_CHECKING([[whether $CC supports $1]])
131 AC_COMPILE_IFELSE(
132 [AC_LANG_PROGRAM([[]])],
133 [
134 AC_MSG_RESULT([yes])
135 m4_if([$3], [], [], [
136 CFLAGS="$ac_c_flag_save"
137 $3
138 ])
139 ], [
140 CFLAGS="$ac_c_flag_save"
141 AC_MSG_RESULT([no])
142 $2
143 ])
144 AC_LANG_POP(C)
145 }])
146
paul6a4b8832005-11-26 08:28:00 +0000147AC_MSG_CHECKING([whether to set a default CFLAGS])
148if test "x${cflags_specified}" = "x" ; then
149 case ${COMPILER} in
paul6a4b8832005-11-26 08:28:00 +0000150 "SUNPRO")
David Lamparter3a7e83c2015-03-03 09:55:51 +0100151 CFLAGS="-xO4 -v -g -xspace -xcode=pic32 -xstrconst -xc99"
152 AC_MSG_RESULT([SunPro default])
153 ;;
paul6a4b8832005-11-26 08:28:00 +0000154 *)
David Lamparter3a7e83c2015-03-03 09:55:51 +0100155 AC_MSG_RESULT([autodetecting])
156
157 AC_C_FLAG([-diag-error 10006])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100158 AC_C_FLAG([-g])
159 AC_C_FLAG([-Os], [
160 AC_C_FLAG([-O2])
161 ])
Paul Jakma40fc3dd2016-10-11 16:00:27 +0100162 AC_C_FLAG([-fstack-protector-strong])
Paul Jakma52c0bc72015-08-20 21:30:17 +0100163 AC_C_FLAG([-fpie])
David Lamparter3a7e83c2015-03-03 09:55:51 +0100164 AC_C_FLAG([-fno-omit-frame-pointer])
165 AC_C_FLAG([-Wall])
166 AC_C_FLAG([-Wextra])
167 AC_C_FLAG([-Wmissing-prototypes])
168 AC_C_FLAG([-Wmissing-declarations])
169 AC_C_FLAG([-Wpointer-arith])
170 AC_C_FLAG([-Wbad-function-cast])
171 AC_C_FLAG([-Wwrite-strings])
172 if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
173 AC_C_FLAG([-Wcast-qual])
174 AC_C_FLAG([-Wstrict-prototypes])
175 AC_C_FLAG([-Wmissing-noreturn])
176 AC_C_FLAG([-Wmissing-format-attribute])
177 AC_C_FLAG([-Wunreachable-code])
178 AC_C_FLAG([-Wpacked])
179 AC_C_FLAG([-Wpadded])
180 else
181 AC_C_FLAG([-Wno-unused-result])
182 fi
183 AC_C_FLAG([-Wno-unused-parameter])
184 AC_C_FLAG([-Wno-missing-field-initializers])
185 # ICC emits a broken warning for const char *x = a ? "b" : "c";
186 # for some reason the string consts get 'promoted' to char *,
187 # triggering a const to non-const conversion warning.
188 AC_C_FLAG([-diag-disable 3179])
paul6a4b8832005-11-26 08:28:00 +0000189 ;;
190 esac
191else
192 AC_MSG_RESULT([CFLAGS supplied by user])
hasso1969e4b2005-03-27 13:07:23 +0000193fi
194
David Lamparterc0bedeb2015-03-03 10:00:43 +0100195if test x"${enable_werror}" = x"yes" ; then
196 WERROR="-Werror"
197fi
198AC_SUBST(WERROR)
199
paul7ea487b2003-03-17 02:05:07 +0000200dnl --------------
201dnl Check programs
202dnl --------------
paul7ea487b2003-03-17 02:05:07 +0000203AC_PROG_INSTALL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000204AC_PROG_LN_S
paul7ea487b2003-03-17 02:05:07 +0000205AC_PROG_MAKE_SET
206AC_CHECK_TOOL(AR, ar)
paul7ea487b2003-03-17 02:05:07 +0000207
Paul Jakma105b8232006-05-28 08:02:41 +0000208dnl ---------------------------
209dnl We, perhaps unfortunately,
210dnl depend on GNU Make specific
211dnl constructs.
212dnl Give the user a warning if
213dnl not GNU Make.
214dnl ---------------------------
215AC_CACHE_CHECK([if ${MAKE-make} is GNU make], [quagga_cv_gnu_make],
216 [quagga_cv_gnu_make=no
217 if ${MAKE-make} --version 2>/dev/null | \
218 grep '^GNU Make ' >/dev/null ; then
219 quagga_cv_gnu_make=yes;
220 fi
221 ]
222)
223
Paul Jakmad46d2a22007-05-10 16:53:04 +0000224dnl -----------------
225dnl System extensions
226dnl -----------------
Paul Jakmad46d2a22007-05-10 16:53:04 +0000227AC_GNU_SOURCE
paul7ea487b2003-03-17 02:05:07 +0000228
gdt87efd642004-06-30 17:36:11 +0000229dnl -------
230dnl libtool
231dnl -------
Paul Jakma52c0bc72015-08-20 21:30:17 +0100232LT_INIT
gdt87efd642004-06-30 17:36:11 +0000233
paul7ea487b2003-03-17 02:05:07 +0000234dnl ----------------------
235dnl Packages configuration
236dnl ----------------------
Joachim Nilsson1080c132012-05-30 08:15:48 +0200237AC_ARG_WITH(pkg-extra-version,
238 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
239 [EXTRAVERSION=$withval],)
David Lamparter0be793e2012-11-27 01:34:56 +0000240AC_ARG_WITH(pkg-git-version,
241 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
David Lampartera16dcf72012-12-13 11:20:50 +0100242 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
paul7ea487b2003-03-17 02:05:07 +0000243AC_ARG_ENABLE(vtysh,
Donald Sharpe6756782015-07-16 21:18:34 -0400244 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for Quagga]))
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +0100245AC_ARG_ENABLE(doc,
David Lamparterb6fa7602014-06-28 22:15:59 +0200246 AS_HELP_STRING([--disable-doc], [do not build docs]))
paul7ea487b2003-03-17 02:05:07 +0000247AC_ARG_ENABLE(zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200248 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
paul7ea487b2003-03-17 02:05:07 +0000249AC_ARG_ENABLE(bgpd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200250 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
paul7ea487b2003-03-17 02:05:07 +0000251AC_ARG_ENABLE(ripd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200252 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
paul7ea487b2003-03-17 02:05:07 +0000253AC_ARG_ENABLE(ripngd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200254 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
paul7ea487b2003-03-17 02:05:07 +0000255AC_ARG_ENABLE(ospfd,
David Lamparterb6fa7602014-06-28 22:15:59 +0200256 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
paul7ea487b2003-03-17 02:05:07 +0000257AC_ARG_ENABLE(ospf6d,
David Lamparterb6fa7602014-06-28 22:15:59 +0200258 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
Timo Teräsdafa05e2017-01-19 17:27:01 +0200259AC_ARG_ENABLE(nhrpd,
260 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
ajsd0199432004-12-22 14:03:52 +0000261AC_ARG_ENABLE(watchquagga,
David Lamparterb6fa7602014-06-28 22:15:59 +0200262 AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
jardin9e867fe2003-12-23 08:56:18 +0000263AC_ARG_ENABLE(isisd,
David Lamparter656a2c02015-02-09 11:36:10 +0100264 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
Everton Marques871dbcf2009-08-11 15:43:05 -0300265AC_ARG_ENABLE(pimd,
Donald Sharpe6756782015-07-16 21:18:34 -0400266 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
paul7ea487b2003-03-17 02:05:07 +0000267AC_ARG_ENABLE(bgp-announce,
David Lamparterb6fa7602014-06-28 22:15:59 +0200268 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
paul7ea487b2003-03-17 02:05:07 +0000269AC_ARG_ENABLE(snmp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200270 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
paul7ea487b2003-03-17 02:05:07 +0000271AC_ARG_WITH(libpam,
David Lamparterb6fa7602014-06-28 22:15:59 +0200272 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
hasso71c0fb52003-05-25 20:18:13 +0000273AC_ARG_ENABLE(tcp-zebra,
David Lamparterb6fa7602014-06-28 22:15:59 +0200274 AS_HELP_STRING([--enable-tcp-zebra], [enable TCP/IP socket connection between zebra and protocol daemon]))
paul1ef74ef2003-03-21 15:16:05 +0000275AC_ARG_ENABLE(ospfapi,
David Lamparterb6fa7602014-06-28 22:15:59 +0200276 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
paul1ef74ef2003-03-21 15:16:05 +0000277AC_ARG_ENABLE(ospfclient,
David Lamparterb6fa7602014-06-28 22:15:59 +0200278 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
279 (this is the default if --disable-ospfapi is set)]))
paul7ea487b2003-03-17 02:05:07 +0000280AC_ARG_ENABLE(multipath,
David Lamparterb6fa7602014-06-28 22:15:59 +0200281 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100282AC_ARG_ENABLE(user,
David Lamparterb6fa7602014-06-28 22:15:59 +0200283 AS_HELP_STRING([--enable-user=USER], [user to run Quagga suite as (default quagga)]))
Paul P Komkoff Jrfe86b482008-08-13 16:56:05 +0100284AC_ARG_ENABLE(group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200285 AS_HELP_STRING([--enable-group=GROUP], [group to run Quagga suite as (default quagga)]))
pauledd7c242003-06-04 13:59:38 +0000286AC_ARG_ENABLE(vty_group,
David Lamparterb6fa7602014-06-28 22:15:59 +0200287 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
gdtaa593d52003-12-22 20:15:53 +0000288AC_ARG_ENABLE(configfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200289 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
gdtaa593d52003-12-22 20:15:53 +0000290AC_ARG_ENABLE(logfile_mask,
David Lamparterb6fa7602014-06-28 22:15:59 +0200291 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
pauledd7c242003-06-04 13:59:38 +0000292
hasso71c0fb52003-05-25 20:18:13 +0000293AC_ARG_ENABLE(rtadv,
David Lamparterb6fa7602014-06-28 22:15:59 +0200294 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
hassoca776982004-06-12 14:33:05 +0000295AC_ARG_ENABLE(irdp,
David Lamparterb6fa7602014-06-28 22:15:59 +0200296 AS_HELP_STRING([--enable-irdp], [enable IRDP server support in zebra]))
hassof695b012005-04-02 19:03:39 +0000297AC_ARG_ENABLE(isis_topology,
David Lamparterb6fa7602014-06-28 22:15:59 +0200298 AS_HELP_STRING([--enable-isis-topology], [enable IS-IS topology generator]))
hasso41d3fc92004-04-06 11:59:00 +0000299AC_ARG_ENABLE(capabilities,
David Lamparterb6fa7602014-06-28 22:15:59 +0200300 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
Stephen Hemminger47f6aef2013-01-04 22:29:22 +0000301AC_ARG_ENABLE(rusage,
David Lamparterb6fa7602014-06-28 22:15:59 +0200302 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
paul6b6942f2004-10-22 04:55:05 +0000303AC_ARG_ENABLE(gcc_ultra_verbose,
David Lamparterb6fa7602014-06-28 22:15:59 +0200304 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
Paul Jakma3453a712009-06-12 14:21:02 +0100305AC_ARG_ENABLE(linux24_tcp_md5,
David Lamparterb6fa7602014-06-28 22:15:59 +0200306 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
ajs3cade262004-12-29 17:50:22 +0000307AC_ARG_ENABLE(gcc-rdynamic,
David Lamparterb6fa7602014-06-28 22:15:59 +0200308 AS_HELP_STRING([--enable-gcc-rdynamic], [enable linking with -rdynamic for better backtraces (default if gcc)]))
David Lamparter8c99b4c2013-08-01 07:43:36 +0000309AC_ARG_ENABLE(backtrace,
David Lamparterb6fa7602014-06-28 22:15:59 +0200310 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
ajs924b9222005-04-16 17:11:24 +0000311AC_ARG_ENABLE(time-check,
David Lamparterb6fa7602014-06-28 22:15:59 +0200312 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
Jeremy Jackson25f45882009-01-12 16:06:12 -0500313AC_ARG_ENABLE(pcreposix,
David Lamparterb6fa7602014-06-28 22:15:59 +0200314 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000315AC_ARG_ENABLE(fpm,
David Lamparterb6fa7602014-06-28 22:15:59 +0200316 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
David Lamparterc0bedeb2015-03-03 10:00:43 +0100317AC_ARG_ENABLE(werror,
318 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700319AC_ARG_ENABLE([protobuf],
320 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
paul6b6942f2004-10-22 04:55:05 +0000321
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800322AC_ARG_ENABLE([dev_build],
323 AS_HELP_STRING([--enable-dev-build], [build for development]))
324
David Lamparter8c99b4c2013-08-01 07:43:36 +0000325if test x"${enable_gcc_rdynamic}" != x"no" ; then
326 if test x"${enable_gcc_rdynamic}" = x"yes" -o x"$COMPILER" = x"GCC"; then
327 LDFLAGS="${LDFLAGS} -rdynamic"
328 fi
ajs3cade262004-12-29 17:50:22 +0000329fi
330
ajs924b9222005-04-16 17:11:24 +0000331if test x"${enable_time_check}" != x"no" ; then
332 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
333 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
334 else
335 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
336 fi
337fi
338
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000339if test "${enable_fpm}" = "yes"; then
340 AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support)
341fi
342
Avneesh Sachdev7e4025c2016-03-11 12:21:24 -0800343if test "x${enable_dev_build}" = "xyes"; then
344 AC_DEFINE(DEV_BUILD,,Build for development)
345fi
346AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
347
Avneesh Sachdev07e5b642016-04-04 10:54:55 -0700348#
349# Logic for protobuf support.
350#
351if test "$enable_protobuf" = "yes"; then
352 have_protobuf=yes
353
354 # Check for protoc-c
355 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
356 if test "x$PROTOC_C" = "x/bin/false"; then
357 have_protobuf=no
358 else
359 found_protobuf_c=no
360 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
361 [found_protobuf_c=yes],
362 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
363
364 if test "x$found_protobuf_c" = "xyes"; then
365 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
366 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
367 else
368 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
369 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
370 fi
371 fi
372fi
373
374# Fail if the user explicity enabled protobuf support and we couldn't
375# find the compiler or libraries.
376if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
377 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
378fi
379
380if test "x$have_protobuf" = "xyes"; then
381 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
382fi
383
384AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
385
386#
387# End of logic for protobuf support.
388#
389
paul7ea487b2003-03-17 02:05:07 +0000390if test "${enable_tcp_zebra}" = "yes"; then
391 AC_DEFINE(HAVE_TCP_ZEBRA,,Use TCP for zebra communication)
392fi
393
Paul Jakma3453a712009-06-12 14:21:02 +0100394if test "${enable_linux24_tcp_md5}" = "yes"; then
395 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
396fi
397
gdtd2a0ccc2003-12-03 18:13:48 +0000398AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
399if test "${enable_rtadv}" != "no"; then
hasso71c0fb52003-05-25 20:18:13 +0000400 AC_MSG_RESULT(yes)
gdtd2a0ccc2003-12-03 18:13:48 +0000401 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
paul2487bea2003-05-25 23:51:31 +0000402else
403 AC_MSG_RESULT(no)
hasso71c0fb52003-05-25 20:18:13 +0000404fi
paul7ea487b2003-03-17 02:05:07 +0000405
hassoca776982004-06-12 14:33:05 +0000406if test "${enable_irdp}" = "yes"; then
407 AC_DEFINE(HAVE_IRDP,, IRDP )
408fi
409
David Lamparter656a2c02015-02-09 11:36:10 +0100410if test "${enable_isisd}" != "no" && test "${enable_isis_topology}" = yes; then
hassof695b012005-04-02 19:03:39 +0000411 AC_DEFINE(TOPOLOGY_GENERATE,,Enable IS-IS topology generator code)
David Lamparteree1ac2d2012-07-19 12:58:59 +0200412 ISIS_TOPOLOGY_INCLUDES="-I\$(srcdir)/topology"
hassof695b012005-04-02 19:03:39 +0000413 ISIS_TOPOLOGY_DIR="topology"
414 ISIS_TOPOLOGY_LIB="./topology/libtopology.a"
415fi
416
417AC_SUBST(ISIS_TOPOLOGY_INCLUDES)
418AC_SUBST(ISIS_TOPOLOGY_DIR)
419AC_SUBST(ISIS_TOPOLOGY_LIB)
420
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500421if test x"${enable_user}" = x"no"; then
422 enable_user=""
423else
424 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
425 enable_user="quagga"
426 fi
427 AC_DEFINE_UNQUOTED(QUAGGA_USER, "${enable_user}", Quagga User)
pauledd7c242003-06-04 13:59:38 +0000428fi
pauledd7c242003-06-04 13:59:38 +0000429
Jafar Al-Gharaibeha8f97902016-07-28 14:41:20 -0500430if test x"${enable_group}" = x"no"; then
431 enable_group=""
432else
433 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
434 enable_group="quagga"
435 fi
436 AC_DEFINE_UNQUOTED(QUAGGA_GROUP, "${enable_group}", Quagga Group)
pauledd7c242003-06-04 13:59:38 +0000437fi
pauledd7c242003-06-04 13:59:38 +0000438
439if test x"${enable_vty_group}" = x"yes" ; then
paul8d4aee52003-06-06 00:30:35 +0000440 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
paul79cb2162003-06-06 12:19:53 +0000441elif test x"${enable_vty_group}" != x""; then
paul8d4aee52003-06-06 00:30:35 +0000442 if test x"${enable_vty_group}" != x"no"; then
pauledd7c242003-06-04 13:59:38 +0000443 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
444 fi
445fi
paul26275b02005-04-11 07:10:47 +0000446AC_SUBST([enable_user])
447AC_SUBST([enable_group])
448AC_SUBST([enable_vty_group])
pauledd7c242003-06-04 13:59:38 +0000449
gdtaa593d52003-12-22 20:15:53 +0000450enable_configfile_mask=${enable_configfile_mask:-0600}
451AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
452
453enable_logfile_mask=${enable_logfile_mask:-0600}
454AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
455
Donald Sharpd1839632015-12-09 08:24:44 -0500456MPATH_NUM=1
paul7ea487b2003-03-17 02:05:07 +0000457
458case "${enable_multipath}" in
Donald Sharpd1839632015-12-09 08:24:44 -0500459 0)
460 MPATH_NUM=64
461 ;;
462 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
463 MPATH_NUM="${enable_multipath}"
paul7ea487b2003-03-17 02:05:07 +0000464 ;;
465 "")
466 ;;
467 *)
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000468 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
paul7ea487b2003-03-17 02:05:07 +0000469 ;;
470esac
471
Donald Sharpd1839632015-12-09 08:24:44 -0500472AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
paul7ea487b2003-03-17 02:05:07 +0000473
Joachim Nilsson1080c132012-05-30 08:15:48 +0200474dnl -----------------------------------
475dnl Add extra version string to package
476dnl name, string and version fields.
477dnl -----------------------------------
478if test "x${EXTRAVERSION}" != "x" ; then
David Lamparter0be793e2012-11-27 01:34:56 +0000479 VERSION="${VERSION}${EXTRAVERSION}"
480 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
481 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
Joachim Nilsson1080c132012-05-30 08:15:48 +0200482fi
483
David Lampartera16dcf72012-12-13 11:20:50 +0100484if test "x$with_pkg_git_version" = "xyes"; then
485 if test -d "${srcdir}/.git"; then
486 AC_DEFINE(GIT_VERSION, [1], [include git version info])
487 else with_pkg_git_version="no"
488 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
489 fi
490fi
491AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
David Lamparter0be793e2012-11-27 01:34:56 +0000492
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000493dnl ------------------------------------
494dnl Check C keywords and standard types
495dnl ------------------------------------
496AC_C_CONST
497AC_C_INLINE
498AC_C_RESTRICT
499AC_C_VOLATILE
pauldc7a2bf2003-10-22 00:07:44 +0000500AC_HEADER_STDC
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000501AC_HEADER_TIME
502AC_HEADER_SYS_WAIT
Paul Jakmae8441a82015-09-15 16:15:27 +0100503AC_HEADER_STDBOOL
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000504dnl AC_TYPE_PID_T
505AC_TYPE_UID_T
506AC_TYPE_MODE_T
507AC_TYPE_SIZE_T
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000508AC_STRUCT_TM
pauldc7a2bf2003-10-22 00:07:44 +0000509
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000510dnl -------------------------
511dnl Check other header files.
512dnl -------------------------
513AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
514 sys/types.h linux/version.h netdb.h asm/types.h \
Timo Teräs16ffb262014-07-29 09:41:54 +0000515 sys/cdefs.h sys/param.h limits.h signal.h \
Paul Jakma7e49a4f2016-08-02 13:36:03 +0100516 sys/socket.h netinet/in.h time.h sys/time.h features.h])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000517
518dnl Utility macro to avoid retyping includes all the time
519m4_define([QUAGGA_INCLUDES],
520[#ifdef SUNOS_5
521#define _XPG4_2
522#define __EXTENSIONS__
523#endif
524#include <stdio.h>
525#if STDC_HEADERS
526# include <stdlib.h>
527# include <stddef.h>
528#else
529# if HAVE_STDLIB_H
530# include <stdlib.h>
531# endif
532#endif
533#if HAVE_SYS_TYPES_H
534# include <sys/types.h>
535#endif
536/* sys/conf.h depends on param.h on FBSD at least */
537#if HAVE_SYS_PARAM_H
538# include <sys/param.h>
539#endif
540/* Required for MAXSIG */
541#if HAVE_SIGNAL_H
542# include <signal.h>
543#endif
544#if HAVE_SYS_SOCKET_H
545# include <sys/socket.h>
546#endif
Hasso Tepperea057672013-01-13 17:45:29 +0000547#ifdef __APPLE__
548# define __APPLE_USE_RFC_3542
549#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000550#if HAVE_NETINET_IN_H
551# include <netinet/in.h>
552#endif
Paul Jakma6511cab2009-06-18 17:38:01 +0100553#ifdef TIME_WITH_SYS_TIME
554# include <sys/time.h>
555# include <time.h>
556#else
557# ifdef HAVE_SYS_TIME_H
558# include <sys/time.h>
559# else
560# include <time.h>
561# endif
562#endif /* TIME_WITH_SYS_TIME */
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000563])dnl
564
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400565dnl HAVE_NET_IF_H must be discovered by the time the longer AC_CHECK_HEADERS
566dnl round below execution begins, otherwise it doesn't properly detect
567dnl HAVE_NETINET6_IN6_VAR_H, HAVE_NET_IF_VAR_H and HAVE_STRUCT_IN6_ALIASREQ
568dnl on FreeBSD (BZ#408).
569
570AC_CHECK_HEADERS([net/if.h], [], [], QUAGGA_INCLUDES)
571
572m4_define([QUAGGA_INCLUDES],
573QUAGGA_INCLUDES
574[#if HAVE_NET_IF_H
575# include <net/if.h>
576#endif
577])dnl
578
579dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
580dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
581dnl an additional round for it.
582
583AC_CHECK_HEADERS([net/if_var.h], [], [], QUAGGA_INCLUDES)
584
585m4_define([QUAGGA_INCLUDES],
586QUAGGA_INCLUDES
587[#if HAVE_NET_IF_VAR_H
588# include <net/if_var.h>
589#endif
590])dnl
591
592AC_CHECK_HEADERS([sys/un.h netinet/in_systm.h netinet/in_var.h \
593 net/if_dl.h net/netopt.h net/route.h \
Paul Jakma11770e12007-06-22 16:14:42 +0000594 inet/nd.h arpa/inet.h netinet/ip_icmp.h \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000595 fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
596 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
597 [], [], QUAGGA_INCLUDES)
598
599AC_CHECK_HEADERS([ucontext.h], [], [],
600[#ifndef __USE_GNU
601#define __USE_GNU
602#endif /* __USE_GNU */
603QUAGGA_INCLUDES
604])
605
Joakim Tjernlundb166ea22009-06-25 16:40:06 +0100606m4_define([UCONTEXT_INCLUDES],
607[#include <ucontext.h>])dnl
608
609AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
610 [], [], [UCONTEXT_INCLUDES])
611AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
612 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
613 [], [], [UCONTEXT_INCLUDES])],
614 [], [UCONTEXT_INCLUDES])
615AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
616 [], [], [UCONTEXT_INCLUDES])
617
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000618m4_define([QUAGGA_INCLUDES],
619QUAGGA_INCLUDES
Denis Ovsienko2b43bf22011-07-14 16:30:08 +0400620[#if HAVE_SYS_UN_H
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000621# include <sys/un.h>
622#endif
623#if HAVE_NETINET_IN_SYSTM_H
624# include <netinet/in_systm.h>
625#endif
626#if HAVE_NETINET_IN_VAR_H
627# include <netinet/in_var.h>
628#endif
629#if HAVE_NET_IF_DL_H
630# include <net/if_dl.h>
631#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000632#if HAVE_NET_NETOPT_H
633# include <net/netopt.h>
634#endif
635#if HAVE_NET_ROUTE_H
636# include <net/route.h>
637#endif
638#if HAVE_INET_ND_H
639# include <inet/nd.h>
640#endif
641#if HAVE_ARPA_INET_H
642# include <arpa/inet.h>
643#endif
Paul Jakma11770e12007-06-22 16:14:42 +0000644/* Required for IDRP */
645#if HAVE_NETINET_IP_ICMP_H
646# include <netinet/ip_icmp.h>
647#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000648])dnl
pauldc7a2bf2003-10-22 00:07:44 +0000649
gdtfa3232e2003-12-03 17:52:30 +0000650dnl V6 headers are checked below, after we check for v6
paul7ea487b2003-03-17 02:05:07 +0000651
paul7ea487b2003-03-17 02:05:07 +0000652dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
653case "$host" in
paulafd8a122005-03-12 06:36:10 +0000654 [*-sunos5.[6-7]*] | [*-solaris2.[6-7]*])
paul7ea487b2003-03-17 02:05:07 +0000655 opsys=sol2-6
paulafd8a122005-03-12 06:36:10 +0000656 AC_DEFINE(SUNOS_56, 1, SunOS 5.6 to 5.7)
paul19877dd2004-05-11 10:49:35 +0000657 AC_DEFINE(SUNOS_5, 1, SunOS 5)
paul7ea487b2003-03-17 02:05:07 +0000658 AC_CHECK_LIB(xnet, main)
659 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200660 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000661 ;;
paul1b73de82005-04-10 16:31:51 +0000662 [*-sunos5.[8-9]] \
663 | [*-sunos5.1[0-9]] \
664 | [*-sunos5.1[0-9].[0-9]] \
665 | [*-solaris2.[8-9]] \
666 | [*-solaris2.1[0-9]] \
667 | [*-solaris2.1[0-9].[0-9]])
paulafd8a122005-03-12 06:36:10 +0000668 opsys=sol8
Paul Jakmafb66b292006-05-28 08:26:15 +0000669 AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
670 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
paul19877dd2004-05-11 10:49:35 +0000671 AC_CHECK_LIB(socket, main)
672 AC_CHECK_LIB(nsl, main)
paul1b73de82005-04-10 16:31:51 +0000673 AC_CHECK_LIB(umem, main)
Paul Jakmafb66b292006-05-28 08:26:15 +0000674 AC_CHECK_FUNCS([printstack],
675 [AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
676 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
677 ])
paul19877dd2004-05-11 10:49:35 +0000678 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200679 SOLARIS="solaris"
paul19877dd2004-05-11 10:49:35 +0000680 ;;
paul7ea487b2003-03-17 02:05:07 +0000681 *-sunos5* | *-solaris2*)
paul19877dd2004-05-11 10:49:35 +0000682 AC_DEFINE(SUNOS_5,,SunOS 5, Unknown SunOS)
paul7ea487b2003-03-17 02:05:07 +0000683 AC_CHECK_LIB(socket, main)
684 AC_CHECK_LIB(nsl, main)
685 CURSES=-lcurses
David Lampartere8d0d242014-06-28 22:07:41 +0200686 SOLARIS="solaris"
paul7ea487b2003-03-17 02:05:07 +0000687 ;;
hassoc45eb832005-02-19 13:58:06 +0000688 *-linux*)
paul7ea487b2003-03-17 02:05:07 +0000689 opsys=gnu-linux
690 AC_DEFINE(GNU_LINUX,,GNU Linux)
691 ;;
paul7ea487b2003-03-17 02:05:07 +0000692 *-openbsd*)
693 opsys=openbsd
694 AC_DEFINE(OPEN_BSD,,OpenBSD)
695 ;;
paul7ea487b2003-03-17 02:05:07 +0000696esac
697
Paul Jakma62c9f502009-07-19 17:33:21 +0100698AC_SYS_LARGEFILE
699
paul7ea487b2003-03-17 02:05:07 +0000700dnl ---------------------
701dnl Integrated VTY option
702dnl ---------------------
703case "${enable_vtysh}" in
Donald Sharpe6756782015-07-16 21:18:34 -0400704 "no") VTYSH="";;
705 *) VTYSH="vtysh";
paul7ea487b2003-03-17 02:05:07 +0000706 AC_DEFINE(VTYSH,,VTY shell)
gdtfc9d0742004-06-30 14:25:12 +0000707dnl Vtysh uses libreadline, which looks for termcap functions at
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000708dnl configure time. We follow readlines search order.
gdtfc9d0742004-06-30 14:25:12 +0000709dnl The required procedures are in libtermcap on NetBSD, in
710dnl [TODO] on Linux, and in [TODO] on Solaris.
hassoc0689392005-08-25 12:00:58 +0000711 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
paula9694592005-08-25 14:50:05 +0000712 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
713 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
714 [AC_CHECK_LIB(ncurses, tputs,
715 LIBREADLINE="$LIBREADLINE -lncurses")]
716 )]
717 )]
718 )
Thomas Petazzoni64f8c7d2016-08-21 09:23:04 +0300719 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
paula9694592005-08-25 14:50:05 +0000720 "$LIBREADLINE")
paul7ea487b2003-03-17 02:05:07 +0000721 if test $ac_cv_lib_readline_main = no; then
gdtfc9d0742004-06-30 14:25:12 +0000722 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
paul7ea487b2003-03-17 02:05:07 +0000723 fi
724 AC_CHECK_HEADER(readline/history.h)
725 if test $ac_cv_header_readline_history_h = no;then
726 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
727 fi
paula9694592005-08-25 14:50:05 +0000728 AC_CHECK_LIB(readline, rl_completion_matches,
729 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
paul3d3de8c2003-05-23 10:33:49 +0000730 if test $ac_cv_lib_readline_rl_completion_matches = no; then
731 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
732 fi
733 ;;
paul7ea487b2003-03-17 02:05:07 +0000734 "no" ) VTYSH="";;
paul7ea487b2003-03-17 02:05:07 +0000735esac
hassoc0689392005-08-25 12:00:58 +0000736AC_SUBST(LIBREADLINE)
David Wardf027d332012-04-30 11:36:15 -0400737AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
paul7ea487b2003-03-17 02:05:07 +0000738
739dnl ----------
740dnl PAM module
Denis Ovsienko61599282011-07-15 00:24:15 +0400741dnl
742dnl Quagga detects the PAM library it is built against by checking for a
743dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
744dnl is known to #include pam_appl.h, the standard header of a PAM library, and
745dnl openpam.h doesn't do that, although depends on the header too. Hence a
746dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
747dnl of OpenPAM.
paul7ea487b2003-03-17 02:05:07 +0000748dnl ----------
749if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000750 AC_CHECK_HEADER([security/pam_misc.h],
751 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
752 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
753 pam_conv_func="misc_conv"
754 ],
755 [], QUAGGA_INCLUDES)
756 AC_CHECK_HEADER([security/openpam.h],
757 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
758 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
759 pam_conv_func="openpam_ttyconv"
760 ],
Denis Ovsienko61599282011-07-15 00:24:15 +0400761 [], QUAGGA_INCLUDES[#include <security/pam_appl.h>])
paul24cd4352003-05-06 12:16:27 +0000762 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
763 AC_MSG_WARN([*** pam support will not be built ***])
764 with_libpam="no"
765 fi
766fi
767
768if test "$with_libpam" = "yes"; then
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000769dnl took this test from proftpds configure.in and suited to our needs
paul7ea487b2003-03-17 02:05:07 +0000770dnl -------------------------------------------------------------------------
771dnl
772dnl This next check looks funky due to a linker problem with some versions
773dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
774dnl omitted requiring libdl linking information. PAM-0.72 or better ships
775dnl with RedHat 6.2 and Debian 2.2 or better.
776AC_CHECK_LIB(pam, pam_start,
paul24cd4352003-05-06 12:16:27 +0000777 [AC_CHECK_LIB(pam, $pam_conv_func,
paul7ea487b2003-03-17 02:05:07 +0000778 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
779 LIBPAM="-lpam"],
780 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
781 LIBPAM="-lpam -lpam_misc"]
782 )
783 ],
784
785 [AC_CHECK_LIB(pam, pam_end,
paul24cd4352003-05-06 12:16:27 +0000786 [AC_CHECK_LIB(pam, $pam_conv_func,
paula159ed92003-06-04 11:01:45 +0000787 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000788 LIBPAM="-lpam -ldl"],
paula159ed92003-06-04 11:01:45 +0000789 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
paul7ea487b2003-03-17 02:05:07 +0000790 LIBPAM="-lpam -ldl -lpam_misc"]
791 )
792 ],AC_MSG_WARN([*** pam support will not be built ***]),
793 [-ldl])
794 ]
795)
796fi
797AC_SUBST(LIBPAM)
798
799dnl -------------------------------
800dnl Endian-ness check
801dnl -------------------------------
802AC_WORDS_BIGENDIAN
803
804dnl -------------------------------
805dnl check the size in byte of the C
806dnl -------------------------------
807dnl AC_CHECK_SIZEOF(char)
808dnl AC_CHECK_SIZEOF(int)
809dnl AC_CHECK_SIZEOF(short)
810dnl AC_CHECK_SIZEOF(long)
811
812dnl ----------------------------
813dnl check existance of functions
814dnl ----------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000815AC_FUNC_CHOWN
816AC_FUNC_FNMATCH
817AC_FUNC_FORK
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000818AC_FUNC_MEMCMP
819AC_FUNC_MKTIME
820AC_FUNC_STRFTIME
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000821AC_FUNC_STAT
822AC_FUNC_SELECT_ARGTYPES
823AC_FUNC_STRFTIME
Paul Jakmad46d2a22007-05-10 16:53:04 +0000824dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
825dnl can lead to strange side effects. So we just check for strnlen
826dnl directly, see below.
Paul Jakma2b5cb412007-05-10 17:05:16 +0000827dnl AC_FUNC_STRNLENdnl
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000828AC_FUNC_VPRINTF
829
830dnl -------------------------------
831dnl bgpd needs pow() and hence libm
832dnl -------------------------------
833TMPLIBS="$LIBS"
834AC_CHECK_HEADER([math.h],
835 [AC_CHECK_LIB([m], [pow],
836 [LIBM="-lm"
837 LIBS="$LIBS $LIBM"
838 AC_DEFINE(HAVE_LIBM,, Have libm)
839 AC_CHECK_FUNCS(pow,[],[LIBM=""])
840 ])
841])
842if test x"$LIBM" = x ; then
843 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
844fi
845LIBS="$TMPLIBS"
846AC_SUBST(LIBM)
847
848dnl ---------------
849dnl other functions
850dnl ---------------
851AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
Paul Jakmad46d2a22007-05-10 16:53:04 +0000852 inet_ntoa inet_aton strnlen \
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000853 memchr memmove memset select socket \
854 strcasecmp strchr strcspn strdup strerror \
855 strncasecmp strndup strrchr strspn strstr \
856 strtol strtoul strlcat strlcpy \
857 daemon snprintf vsnprintf \
858 if_nametoindex if_indextoname getifaddrs \
David Lamparter12bbd622015-09-15 02:26:44 -0700859 uname fcntl getgrouplist])
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000860
paul7ea487b2003-03-17 02:05:07 +0000861
Feng Lu55cfa2f2014-07-03 18:24:34 +0800862AC_CHECK_HEADER([asm-generic/unistd.h],
863 [AC_CHECK_DECL(__NR_setns,
864 AC_DEFINE(HAVE_NETNS,, Have netns),,
865 QUAGGA_INCLUDES [#include <asm-generic/unistd.h>
866 ])
867 AC_CHECK_FUNCS(setns, AC_DEFINE(HAVE_SETNS,, Have setns))]
868 )
869
paul7ea487b2003-03-17 02:05:07 +0000870dnl ------------------------------------
871dnl Determine routing get and set method
872dnl ------------------------------------
873AC_MSG_CHECKING(zebra between kernel interface method)
874if test x"$opsys" = x"gnu-linux"; then
David Lamparter2e5ca492014-06-28 20:54:31 +0200875 AC_MSG_RESULT(netlink)
876 RT_METHOD=rt_netlink.o
877 AC_DEFINE(HAVE_NETLINK,,netlink)
878 netlink=yes
paul7ea487b2003-03-17 02:05:07 +0000879else
David Lamparter39b233f2014-06-28 21:49:18 +0200880 AC_MSG_RESULT(Route socket)
881 KERNEL_METHOD="kernel_socket.o"
882 RT_METHOD="rt_socket.o"
paul7ea487b2003-03-17 02:05:07 +0000883fi
884AC_SUBST(RT_METHOD)
885AC_SUBST(KERNEL_METHOD)
Avneesh Sachdev5adc2522012-11-13 22:48:59 +0000886AM_CONDITIONAL([HAVE_NETLINK], [test "x$netlink" = "xyes"])
paul7ea487b2003-03-17 02:05:07 +0000887
Paul Jakma238497f2007-08-07 18:49:18 +0000888dnl --------------------------
889dnl Determine IS-IS I/O method
890dnl --------------------------
David Lamparter745bf052010-02-02 21:49:35 +0100891AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
892AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
893AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
Paul Jakma238497f2007-08-07 18:49:18 +0000894AC_CHECK_HEADER(net/bpf.h)
895AC_CHECK_HEADER(sys/dlpi.h)
896AC_MSG_CHECKING(zebra IS-IS I/O method)
897if test x"$opsys" = x"gnu-linux"; then
898 AC_MSG_RESULT(pfpacket)
David Lamparter745bf052010-02-02 21:49:35 +0100899 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
Paul Jakma238497f2007-08-07 18:49:18 +0000900elif test x"$opsys" = x"sol2-6" -o x"$opsys" = x"sol8"; then
901 AC_MSG_RESULT(DLPI)
David Lamparter745bf052010-02-02 21:49:35 +0100902 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000903else
904 if test $ac_cv_header_net_bpf_h = no; then
905 if test $ac_cv_header_sys_dlpi_h = no; then
906 AC_MSG_RESULT(none)
907 AC_MSG_WARN([*** IS-IS support will not be built ***])
908 ISISD=""
909 else
910 AC_MSG_RESULT(DLPI)
911 fi
David Lamparter745bf052010-02-02 21:49:35 +0100912 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
Paul Jakma238497f2007-08-07 18:49:18 +0000913 else
914 AC_MSG_RESULT(BPF)
David Lamparter745bf052010-02-02 21:49:35 +0100915 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
Paul Jakma238497f2007-08-07 18:49:18 +0000916 fi
917fi
David Lamparter745bf052010-02-02 21:49:35 +0100918AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
Paul Jakma238497f2007-08-07 18:49:18 +0000919
ajsb99760a2005-01-04 16:24:43 +0000920dnl ------------------------------------
921dnl check for broken CMSG_FIRSTHDR macro
922dnl ------------------------------------
gdt6c200462005-01-04 17:02:48 +0000923AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
hasso5b087522005-04-03 23:46:37 +0000924AC_RUN_IFELSE([AC_LANG_SOURCE([[
ajsb99760a2005-01-04 16:24:43 +0000925#ifdef SUNOS_5
926#define _XPG4_2
927#define __EXTENSIONS__
928#endif
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000929#ifdef HAVE_STDLIB_H
930# include <stdlib.h>
931#endif
932#ifdef HAVE_SYS_TYPES_H
ajsb99760a2005-01-04 16:24:43 +0000933#include <sys/types.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000934#endif
935#ifdef HAVE_SYS_SOCKET_H
ajsb99760a2005-01-04 16:24:43 +0000936#include <sys/socket.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +0000937#endif
ajsb99760a2005-01-04 16:24:43 +0000938
939main()
940{
941 struct msghdr msg;
942 char buf[4];
943
944 msg.msg_control = buf;
945 msg.msg_controllen = 0;
946
947 if (CMSG_FIRSTHDR(&msg) != NULL)
948 exit(0);
949 exit (1);
hasso5b087522005-04-03 23:46:37 +0000950}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
hassod33e8d72005-04-03 13:07:21 +0000951[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
ajsb99760a2005-01-04 16:24:43 +0000952
paul7ea487b2003-03-17 02:05:07 +0000953dnl ------------------------------
954dnl check kernel route read method
955dnl ------------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500956AC_CACHE_CHECK([route read method], [quagga_cv_rtread_method],
957[if test "x$netlink" = xyes; then
958 quagga_cv_rtread_method="netlink"
paul7ea487b2003-03-17 02:05:07 +0000959else
David Lamparter2e5ca492014-06-28 20:54:31 +0200960for quagga_cv_rtread_method in /dev/ip /dev/null;
paul7ea487b2003-03-17 02:05:07 +0000961do
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500962 test x`ls $quagga_cv_rtread_method 2>/dev/null` = x"$quagga_cv_rtread_method" && break
paul7ea487b2003-03-17 02:05:07 +0000963done
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500964case $quagga_cv_rtread_method in
paul9c30ab62003-07-08 08:36:17 +0000965 "/dev/ip")
966 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500967 *-freebsd*) quagga_cv_rtread_method="sysctl";;
968 *) quagga_cv_rtread_method="getmsg";;
paul9c30ab62003-07-08 08:36:17 +0000969 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500970 *)
971 quagga_cv_rtread_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +0000972esac
973fi])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -0500974RTREAD_METHOD=rtread_${quagga_cv_rtread_method}.o
paul7ea487b2003-03-17 02:05:07 +0000975AC_SUBST(RTREAD_METHOD)
976
977dnl -----------------------------
978dnl check interface lookup method
979dnl -----------------------------
paul19877dd2004-05-11 10:49:35 +0000980IOCTL_METHOD=ioctl.o
paul7ea487b2003-03-17 02:05:07 +0000981AC_MSG_CHECKING(interface looking up method)
982if test "$netlink" = yes; then
983 AC_MSG_RESULT(netlink)
984 IF_METHOD=if_netlink.o
paul19877dd2004-05-11 10:49:35 +0000985elif test "$opsys" = "sol2-6";then
986 AC_MSG_RESULT(Solaris GIF)
987 IF_METHOD=if_ioctl.o
paulafd8a122005-03-12 06:36:10 +0000988elif test "$opsys" = "sol8";then
paul19877dd2004-05-11 10:49:35 +0000989 AC_MSG_RESULT(Solaris GLIF)
990 IF_METHOD=if_ioctl_solaris.o
991 IOCTL_METHOD=ioctl_solaris.o
paul19877dd2004-05-11 10:49:35 +0000992elif test "$opsys" = "openbsd";then
993 AC_MSG_RESULT(openbsd)
994 IF_METHOD=if_ioctl.o
995elif grep NET_RT_IFLIST /usr/include/sys/socket.h >/dev/null 2>&1; then
996 AC_MSG_RESULT(sysctl)
paul7ea487b2003-03-17 02:05:07 +0000997 IF_METHOD=if_sysctl.o
998 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
paul19877dd2004-05-11 10:49:35 +0000999else
paul7ea487b2003-03-17 02:05:07 +00001000 AC_MSG_RESULT(ioctl)
1001 IF_METHOD=if_ioctl.o
paul7ea487b2003-03-17 02:05:07 +00001002fi
1003AC_SUBST(IF_METHOD)
paul19877dd2004-05-11 10:49:35 +00001004AC_SUBST(IOCTL_METHOD)
paul7ea487b2003-03-17 02:05:07 +00001005
paul42c98192005-05-07 02:22:51 +00001006dnl ---------------------------------------------------------------
1007dnl figure out how to specify an interface in multicast sockets API
1008dnl ---------------------------------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001009AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], QUAGGA_INCLUDES)
paul42c98192005-05-07 02:22:51 +00001010
Donald Sharp1934e782015-06-05 12:15:44 -07001011AC_CHECK_HEADERS([linux/mroute.h], [], [],
1012[
1013#if HAVE_NETINET_IN_H
1014#include<netinet/in.h>
1015#endif])
paul42c98192005-05-07 02:22:51 +00001016AC_MSG_CHECKING([for BSD struct ip_mreq hack])
1017AC_TRY_COMPILE([#ifdef HAVE_SYS_PARAM_H
1018#include <sys/param.h>
Brian Bennettb8a893c2015-02-17 22:32:22 +00001019#endif],[#if (defined(__FreeBSD__) && ((__FreeBSD_version >= 500022 && __FreeBSD_version < 700000) || (__FreeBSD_version < 500000 && __FreeBSD_version >= 440000))) || (defined(__NetBSD__) && defined(__NetBSD_Version__) && __NetBSD_Version__ >= 106010000) || defined(__OpenBSD__) || defined(__APPLE__) || defined(__DragonFly__) || defined(__sun)
paul42c98192005-05-07 02:22:51 +00001020 return (0);
1021#else
1022 #error No support for BSD struct ip_mreq hack detected
1023#endif],[AC_MSG_RESULT(yes)
1024AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1025AC_MSG_RESULT(no))
1026
Dmitrij Tejblum10d04cd2011-08-22 11:39:35 +04001027AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1028AC_TRY_COMPILE([
1029#include <sys/types.h>
1030#include <netinet/in.h>
1031], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1032], [AC_MSG_RESULT(yes)
1033AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1034AC_MSG_RESULT(no))
1035
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001036dnl ---------------------------------------------------------------
1037dnl figure out how to check link-state
1038dnl ---------------------------------------------------------------
Andrew J. Schorr6418bed2008-01-11 16:33:59 +00001039AC_CHECK_HEADER([net/if.h],
1040 [AC_CHECK_HEADER( [net/if_media.h],
1041 [m4_define([LINK_DETECT_INCLUDES],
1042 QUAGGA_INCLUDES
1043 [#include <net/if_media.h>
1044 ])
1045 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1046 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1047 [], LINK_DETECT_INCLUDES)],
1048 [],
1049 QUAGGA_INCLUDES)],
1050 [], QUAGGA_INCLUDES )
Andrew J. Schorrc543a172008-01-10 15:24:32 +00001051
Doug VanLeuven9234b382012-10-10 16:12:32 -07001052dnl ---------------------------------------------------------------
1053dnl Additional, newer way to check link-state using ifi_link_state.
1054dnl Not available in all BSD's when ifmediareq available
1055dnl ---------------------------------------------------------------
1056AC_CHECK_HEADER([net/if.h],
1057 AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1058 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
1059 [], QUAGGA_INCLUDES),
1060 ,)
1061
Paul Jakma0df7c912008-07-21 21:02:49 +00001062dnl ------------------------
1063dnl TCP_MD5SIG socket option
1064dnl ------------------------
1065
1066AC_CHECK_HEADER([netinet/tcp.h],
1067 [m4_define([MD5_INCLUDES],
1068 QUAGGA_INCLUDES
1069 [#include <netinet/tcp.h>
1070 ])
1071 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1072 [],
1073 QUAGGA_INCLUDES)
1074if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1075 AC_CHECK_HEADER([linux/tcp.h],
1076 [m4_define([MD5_INCLUDES],
1077 QUAGGA_INCLUDES
1078 [#include <linux/tcp.h>
1079 ])
1080 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1081fi
1082
paul7ea487b2003-03-17 02:05:07 +00001083dnl -----------------------------
1084dnl check ipforward detect method
1085dnl -----------------------------
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001086AC_CACHE_CHECK([ipforward method], [quagga_cv_ipforward_method],
David Lamparterca9f3422009-09-16 02:11:00 +02001087[if test x$cross_compiling = xyes; then
1088 if test x"$opsys" = x"gnu-linux"; then
1089 quagga_cv_ipforward_method=/proc/net/snmp
1090 else
1091 quagga_cv_ipforward_method=/dev/ip
1092 fi
1093else
1094 for quagga_cv_ipforward_method in /proc/net/snmp /dev/ip /dev/null;
1095 do
1096 test x`ls $quagga_cv_ipforward_method 2>/dev/null` = x"$quagga_cv_ipforward_method" && break
1097 done
1098fi
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001099case $quagga_cv_ipforward_method in
1100 "/proc/net/snmp") quagga_cv_ipforward_method="proc";;
paul7ea487b2003-03-17 02:05:07 +00001101 "/dev/ip")
1102 case "$host" in
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001103 *-freebsd*) quagga_cv_ipforward_method="sysctl";;
1104 *) quagga_cv_ipforward_method="solaris";;
paul7ea487b2003-03-17 02:05:07 +00001105 esac;;
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001106 *) quagga_cv_ipforward_method="sysctl";;
paul7ea487b2003-03-17 02:05:07 +00001107esac])
Jeremy Jackson5589ffa2009-01-21 18:27:37 -05001108IPFORWARD=ipforward_${quagga_cv_ipforward_method}.o
paul7ea487b2003-03-17 02:05:07 +00001109AC_SUBST(IPFORWARD)
1110
1111AC_CHECK_FUNCS(getaddrinfo, [have_getaddrinfo=yes], [have_getaddrinfo=no])
1112
1113dnl ----------
1114dnl IPv6 check
1115dnl ----------
1116AC_MSG_CHECKING(whether does this OS have IPv6 stack)
paul7ea487b2003-03-17 02:05:07 +00001117dnl ---------
1118dnl KAME IPv6
1119dnl ---------
David Lamparter6d6df302014-06-28 21:12:37 +02001120 if grep WIDE /usr/include/netinet6/in6.h >/dev/null 2>&1; then
paula159ed92003-06-04 11:01:45 +00001121 AC_DEFINE(KAME,1,KAME IPv6)
paula159ed92003-06-04 11:01:45 +00001122 AC_MSG_RESULT(KAME)
paul19877dd2004-05-11 10:49:35 +00001123dnl ------------------------------------
1124dnl Solaris 9, 10 and potentially higher
1125dnl ------------------------------------
paulafd8a122005-03-12 06:36:10 +00001126 elif test x"$opsys" = x"sol8"; then
paul19877dd2004-05-11 10:49:35 +00001127 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
paul19877dd2004-05-11 10:49:35 +00001128 AC_MSG_RESULT(Solaris IPv6)
paul7ea487b2003-03-17 02:05:07 +00001129dnl ----------
1130dnl Linux IPv6
1131dnl ----------
David Lamparter29ed6222014-06-28 21:42:25 +02001132 elif test x"$opsys" = x"gnu-linux"; then
Timo Teräs3ef0b872014-07-29 09:41:56 +00001133 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
David Lamparter29ed6222014-06-28 21:42:25 +02001134 AC_MSG_RESULT(Linux IPv6)
1135 else
David Lamparter7fe17e62014-11-22 10:31:33 -08001136 AC_MSG_ERROR([Failed to detect IPv6 stack])
paula159ed92003-06-04 11:01:45 +00001137 fi
paul7ea487b2003-03-17 02:05:07 +00001138
David Lamparter7fe17e62014-11-22 10:31:33 -08001139dnl this is unconditial, for compatibility
1140AC_DEFINE(HAVE_IPV6,1,IPv6)
paul7ea487b2003-03-17 02:05:07 +00001141
gdtfa3232e2003-12-03 17:52:30 +00001142dnl ------------------
1143dnl IPv6 header checks
1144dnl ------------------
gdtfa3232e2003-12-03 17:52:30 +00001145AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h netinet/icmp6.h \
David Lamparter05a69d22015-05-27 22:15:37 +02001146 netinet6/in6_var.h netinet6/nd6.h], [], [],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001147 QUAGGA_INCLUDES)
gdtfa3232e2003-12-03 17:52:30 +00001148
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001149m4_define([QUAGGA_INCLUDES],dnl
1150QUAGGA_INCLUDES
1151[#if HAVE_NETINET6_IN6_H
1152#include <netinet6/in6.h>
1153#endif
1154#if HAVE_NETINET_IN6_VAR_H
1155#include <netinet/in6_var.h>
1156#endif
1157#if HAVE_NETINET_ICMP6_H
1158# include <netinet/icmp6.h>
1159#endif
1160#if HAVE_NETINET6_IN6_VAR_H
1161# include <netinet6/in6_var.h>
1162#endif
1163#if HAVE_NETINET6_ND6_H
Hasso Tepperfbf24542007-06-25 19:30:59 +00001164# include <netinet6/nd6.h>
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001165#endif
1166])dnl
1167
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001168dnl disable doc check
1169if test "${enable_doc}" = "no";then
1170 DOC=""
1171else
1172 DOC="doc"
1173fi
1174
paul7ea487b2003-03-17 02:05:07 +00001175dnl --------------------
1176dnl Daemon disable check
1177dnl --------------------
1178if test "${enable_zebra}" = "no";then
1179 ZEBRA=""
1180else
1181 ZEBRA="zebra"
1182fi
David Wardf027d332012-04-30 11:36:15 -04001183AM_CONDITIONAL(ZEBRA, test "x$ZEBRA" = "xzebra")
paul7ea487b2003-03-17 02:05:07 +00001184
1185if test "${enable_bgpd}" = "no";then
1186 BGPD=""
1187else
1188 BGPD="bgpd"
1189fi
David Wardf027d332012-04-30 11:36:15 -04001190AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
paul7ea487b2003-03-17 02:05:07 +00001191
1192if test "${enable_ripd}" = "no";then
1193 RIPD=""
1194else
1195 RIPD="ripd"
1196fi
David Wardf027d332012-04-30 11:36:15 -04001197AM_CONDITIONAL(RIPD, test "x$RIPD" = "xripd")
paul7ea487b2003-03-17 02:05:07 +00001198
1199if test "${enable_ospfd}" = "no";then
1200 OSPFD=""
1201else
1202 OSPFD="ospfd"
1203fi
David Wardf027d332012-04-30 11:36:15 -04001204AM_CONDITIONAL(OSPFD, test "x$OSPFD" = "xospfd")
paul7ea487b2003-03-17 02:05:07 +00001205
Timo Teräsdafa05e2017-01-19 17:27:01 +02001206if test x"$opsys" != x"gnu-linux"; then
1207 dnl NHRPd works currently with Linux only.
1208 enable_nhrpd="no"
1209fi
1210if test "${enable_nhrpd}" = "no";then
1211 NHRPD=""
1212else
1213 NHRPD="nhrpd"
1214fi
1215AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1216
ajsd0199432004-12-22 14:03:52 +00001217if test "${enable_watchquagga}" = "no";then
1218 WATCHQUAGGA=""
1219else
1220 WATCHQUAGGA="watchquagga"
1221fi
David Wardf027d332012-04-30 11:36:15 -04001222AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
ajsd0199432004-12-22 14:03:52 +00001223
paul1ef74ef2003-03-21 15:16:05 +00001224OSPFCLIENT=""
Donald Sharp36fef572015-12-16 14:22:10 -05001225if test "${enable_ospfapi}" != "no";then
paul9a569842003-03-28 01:45:13 +00001226 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
paul1ef74ef2003-03-21 15:16:05 +00001227
Donald Sharp36fef572015-12-16 14:22:10 -05001228 if test "${enable_ospfclient}" != "no";then
paul1ef74ef2003-03-21 15:16:05 +00001229 OSPFCLIENT="ospfclient"
paul1ef74ef2003-03-21 15:16:05 +00001230 fi
paul7ea487b2003-03-17 02:05:07 +00001231fi
Donald Sharp36fef572015-12-16 14:22:10 -05001232
David Wardf027d332012-04-30 11:36:15 -04001233AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
paul7ea487b2003-03-17 02:05:07 +00001234
1235case "${enable_ripngd}" in
paul7ea487b2003-03-17 02:05:07 +00001236 "no" ) RIPNGD="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001237 * ) RIPNGD="ripngd";;
paul7ea487b2003-03-17 02:05:07 +00001238esac
David Wardf027d332012-04-30 11:36:15 -04001239AM_CONDITIONAL(RIPNGD, test "x$RIPNGD" = "xripngd")
paul7ea487b2003-03-17 02:05:07 +00001240
1241case "${enable_ospf6d}" in
paul7ea487b2003-03-17 02:05:07 +00001242 "no" ) OSPF6D="";;
David Lamparter7fe17e62014-11-22 10:31:33 -08001243 * ) OSPF6D="ospf6d";;
paul7ea487b2003-03-17 02:05:07 +00001244esac
David Wardf027d332012-04-30 11:36:15 -04001245AM_CONDITIONAL(OSPF6D, test "x$OSPF6D" = "xospf6d")
paul7ea487b2003-03-17 02:05:07 +00001246
jardin9e867fe2003-12-23 08:56:18 +00001247case "${enable_isisd}" in
jardin9e867fe2003-12-23 08:56:18 +00001248 "no" ) ISISD="";;
David Lamparter656a2c02015-02-09 11:36:10 +01001249 * ) ISISD="isisd";;
jardin9e867fe2003-12-23 08:56:18 +00001250esac
David Wardf027d332012-04-30 11:36:15 -04001251AM_CONDITIONAL(ISISD, test "x$ISISD" = "xisisd")
jardin9e867fe2003-12-23 08:56:18 +00001252
Everton Marques871dbcf2009-08-11 15:43:05 -03001253case "${enable_pimd}" in
Everton Marques871dbcf2009-08-11 15:43:05 -03001254 "no" ) PIMD="";;
Donald Sharpe6756782015-07-16 21:18:34 -04001255 * ) PIMD="pimd";;
Everton Marques871dbcf2009-08-11 15:43:05 -03001256esac
Everton Marquesff57d362014-06-25 15:54:03 -03001257AM_CONDITIONAL(PIMD, test "x$PIMD" = "xpimd")
Everton Marques871dbcf2009-08-11 15:43:05 -03001258
paul7ea487b2003-03-17 02:05:07 +00001259if test "${enable_bgp_announce}" = "no";then
Paul Jakma750e8142008-07-22 21:11:48 +00001260 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1261else
1262 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
paul7ea487b2003-03-17 02:05:07 +00001263fi
1264
Joakim Tjernlundcbcd9bf2009-02-16 09:40:39 +01001265AC_SUBST(DOC)
paul7ea487b2003-03-17 02:05:07 +00001266AC_SUBST(ZEBRA)
1267AC_SUBST(BGPD)
1268AC_SUBST(RIPD)
1269AC_SUBST(RIPNGD)
1270AC_SUBST(OSPFD)
1271AC_SUBST(OSPF6D)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001272AC_SUBST(NHRPD)
ajsd0199432004-12-22 14:03:52 +00001273AC_SUBST(WATCHQUAGGA)
jardin9e867fe2003-12-23 08:56:18 +00001274AC_SUBST(ISISD)
Everton Marques871dbcf2009-08-11 15:43:05 -03001275AC_SUBST(PIMD)
Greg Troxel97cee872007-08-02 13:36:56 +00001276AC_SUBST(SOLARIS)
paul7ea487b2003-03-17 02:05:07 +00001277AC_SUBST(VTYSH)
paul7ea487b2003-03-17 02:05:07 +00001278AC_SUBST(CURSES)
1279AC_SUBST(OSPFCLIENT)
paul1ef74ef2003-03-21 15:16:05 +00001280AC_SUBST(OSPFAPI)
paul7ea487b2003-03-17 02:05:07 +00001281AC_CHECK_LIB(c, inet_ntop, [AC_DEFINE(HAVE_INET_NTOP,,inet_ntop)])
1282AC_CHECK_LIB(c, inet_pton, [AC_DEFINE(HAVE_INET_PTON,,inet_pton)])
1283AC_CHECK_LIB(crypt, crypt)
1284AC_CHECK_LIB(resolv, res_init)
paul7ea487b2003-03-17 02:05:07 +00001285
paul7ea487b2003-03-17 02:05:07 +00001286dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001287dnl check system has PCRE regexp
1288dnl ---------------------------
1289if test "x$enable_pcreposix" = "xyes"; then
1290 AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
1291 AC_MSG_WARN([*** falling back to other regex library ***]) ])
1292fi
1293
1294if test "x$enable_pcreposix" != "xyes"; then
1295dnl ---------------------------
paul7ea487b2003-03-17 02:05:07 +00001296dnl check system has GNU regexp
1297dnl ---------------------------
Jeremy Jackson25f45882009-01-12 16:06:12 -05001298AC_MSG_CHECKING(whether system has GNU regex)
paul7ea487b2003-03-17 02:05:07 +00001299AC_CHECK_LIB(c, regexec,
1300[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
1301 LIB_REGEX=""],
1302[LIB_REGEX="regex.o"])
Jeremy Jackson25f45882009-01-12 16:06:12 -05001303fi
1304AC_SUBST(HAVE_LIBPCREPOSIX)
paul7ea487b2003-03-17 02:05:07 +00001305AC_SUBST(LIB_REGEX)
1306
1307dnl ------------------
Timo Teräsdafa05e2017-01-19 17:27:01 +02001308dnl check C-Ares library
1309dnl ------------------
1310if test "${enable_nhrpd}" != "no";then
1311 PKG_CHECK_MODULES([CARES], [libcares])
1312fi
1313
1314
1315dnl ------------------
paulb1fc9ac2006-01-31 10:09:27 +00001316dnl check Net-SNMP library
paul7ea487b2003-03-17 02:05:07 +00001317dnl ------------------
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001318if test "${enable_snmp}" != ""; then
Vincent Bernat08d7f652012-05-22 22:29:17 +02001319 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1320 if test x"$NETSNMP_CONFIG" = x"no"; then
1321 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1322 fi
1323 LIBS="$LIBS `${NETSNMP_CONFIG} --agent-libs`"
1324 CFLAGS="`${NETSNMP_CONFIG} --base-cflags` $CFLAGS"
1325 AC_MSG_CHECKING([whether we can link to Net-SNMP])
1326 AC_LINK_IFELSE([AC_LANG_PROGRAM([
1327int main(void);
1328],
1329[
1330{
1331 return 0;
1332}
1333])],[AC_MSG_RESULT(yes)],[
1334 AC_MSG_RESULT(no)
1335 AC_MSG_ERROR([--enable-snmp given but not usable])])
1336 AC_DEFINE(HAVE_SNMP,,SNMP)
Vincent Bernatd6be5fb2012-05-24 09:44:43 +02001337 case "${enable_snmp}" in
1338 yes)
1339 SNMP_METHOD=agentx
1340 ;;
1341 smux|agentx)
1342 SNMP_METHOD="${enable_snmp}"
1343 ;;
1344 *)
1345 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1346 ;;
1347 esac
1348 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1349 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1350 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
paul7ea487b2003-03-17 02:05:07 +00001351fi
1352
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001353dnl ---------------------------
1354dnl sockaddr and netinet checks
1355dnl ---------------------------
1356AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1357 struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
Everton Marques871dbcf2009-08-11 15:43:05 -03001358 socklen_t, struct vifctl, struct mfcctl, struct sioc_sg_req,
1359 vifi_t, struct sioc_vif_req, struct igmpmsg,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001360 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1361 struct nd_opt_adv_interval, struct rt_addrinfo,
Paul Jakma11770e12007-06-22 16:14:42 +00001362 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001363 [], [], QUAGGA_INCLUDES)
paul7ea487b2003-03-17 02:05:07 +00001364
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001365AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1366 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1367 struct sockaddr_in6.sin6_scope_id,
David Lamparterca3ccd82012-09-26 14:52:39 +02001368 struct sockaddr_dl.sdl_len,
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001369 struct if6_aliasreq.ifra_lifetime,
1370 struct nd_opt_adv_interval.nd_opt_ai_type],
1371 [], [], QUAGGA_INCLUDES)
hasso71c0fb52003-05-25 20:18:13 +00001372
paul7ea487b2003-03-17 02:05:07 +00001373dnl ---------------------------
Paul Jakma11770e12007-06-22 16:14:42 +00001374dnl IRDP/pktinfo/icmphdr checks
paul7ea487b2003-03-17 02:05:07 +00001375dnl ---------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001376AC_CHECK_TYPES([struct in_pktinfo],
Paul Jakma11770e12007-06-22 16:14:42 +00001377 [AC_CHECK_TYPES([struct icmphdr],
1378 [if test "${enable_irdp}" != "no"; then
1379 AC_DEFINE(HAVE_IRDP,, IRDP)
1380 fi],
1381 [if test "${enable_irdp}" = "yes"; then
1382 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1383 fi], [QUAGGA_INCLUDES])],
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001384 [if test "${enable_irdp}" = "yes"; then
1385 AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1386 fi], [QUAGGA_INCLUDES])
vincent29c4c9b2005-03-25 13:05:47 +00001387
Everton Marques871dbcf2009-08-11 15:43:05 -03001388dnl -----------------------
1389dnl checking for IP_PKTINFO
1390dnl -----------------------
1391AC_MSG_CHECKING(for IP_PKTINFO)
1392AC_TRY_COMPILE([#include <netdb.h>], [
1393 int opt = IP_PKTINFO;
1394], [
1395 AC_MSG_RESULT(yes)
1396 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1397], [
1398 AC_MSG_RESULT(no)
1399])
1400
1401dnl ---------------------------
1402dnl checking for IP_RECVDSTADDR
1403dnl ---------------------------
1404AC_MSG_CHECKING(for IP_RECVDSTADDR)
1405AC_TRY_COMPILE([#include <netinet/in.h>], [
1406 int opt = IP_RECVDSTADDR;
1407], [
1408 AC_MSG_RESULT(yes)
1409 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1410], [
1411 AC_MSG_RESULT(no)
1412])
1413
1414dnl ----------------------
1415dnl checking for IP_RECVIF
1416dnl ----------------------
1417AC_MSG_CHECKING(for IP_RECVIF)
1418AC_TRY_COMPILE([#include <netinet/in.h>], [
1419 int opt = IP_RECVIF;
1420], [
1421 AC_MSG_RESULT(yes)
1422 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1423], [
1424 AC_MSG_RESULT(no)
1425])
1426
paul7ea487b2003-03-17 02:05:07 +00001427dnl --------------------------------------
1428dnl checking for getrusage struct and call
1429dnl --------------------------------------
Stephen Hemminger47f6aef2013-01-04 22:29:22 +00001430if test "${enable_rusage}" != "no"; then
1431 AC_MSG_CHECKING(whether getrusage is available)
1432 AC_TRY_COMPILE([#include <sys/resource.h>],[struct rusage ac_x; getrusage (RUSAGE_SELF, &ac_x);],
1433 [AC_MSG_RESULT(yes)
1434 AC_DEFINE(HAVE_RUSAGE,,rusage)],
1435 AC_MSG_RESULT(no))
1436fi
paul7ea487b2003-03-17 02:05:07 +00001437
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001438dnl --------------------------------------
1439dnl checking for clock_time monotonic struct and call
1440dnl --------------------------------------
Paul Jakma6511cab2009-06-18 17:38:01 +01001441AC_CHECK_DECL(CLOCK_MONOTONIC,
1442 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
Dmitry Tejblum9964fcf2009-11-05 16:50:36 +03001443 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
Paul Jakma6511cab2009-06-18 17:38:01 +01001444], [AC_MSG_RESULT(no)], [QUAGGA_INCLUDES])
Stephen Hemmingerc4376c92009-05-28 15:29:10 -07001445
pauledd7c242003-06-04 13:59:38 +00001446dnl -------------------
1447dnl capabilities checks
1448dnl -------------------
hasso41d3fc92004-04-06 11:59:00 +00001449if test "${enable_capabilities}" != "no"; then
1450 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1451 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1452 [AC_MSG_RESULT(yes)
1453 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
1454 quagga_ac_keepcaps="yes"],
1455 AC_MSG_RESULT(no)
pauledd7c242003-06-04 13:59:38 +00001456 )
hasso41d3fc92004-04-06 11:59:00 +00001457 if test x"${quagga_ac_keepcaps}" = x"yes"; then
1458 AC_CHECK_HEADERS(sys/capability.h)
1459 fi
1460 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1461 AC_CHECK_LIB(cap, cap_init,
1462 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1463 LIBCAP="-lcap"
paulceacedb2005-09-29 14:39:32 +00001464 quagga_ac_lcaps="yes"]
hasso41d3fc92004-04-06 11:59:00 +00001465 )
paulceacedb2005-09-29 14:39:32 +00001466 else
1467 AC_CHECK_HEADERS(priv.h,
1468 [AC_MSG_CHECKING(Solaris style privileges are available)
1469 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1470 [AC_MSG_RESULT(yes)
1471 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
1472 quagga_ac_scaps="yes"],
1473 AC_MSG_RESULT(no)
1474 )
1475 ]
1476 )
1477 fi
1478 if test x"${quagga_ac_scaps}" = x"yes" \
1479 -o x"${quagga_ac_lcaps}" = x"yes"; then
1480 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
hasso41d3fc92004-04-06 11:59:00 +00001481 fi
pauledd7c242003-06-04 13:59:38 +00001482fi
1483AC_SUBST(LIBCAP)
1484
Doug VanLeuven327c4cd2012-12-14 14:58:30 +02001485dnl ---------------------------------------------------------------------------
1486dnl http://www.gnu.org/software/autoconf-archive/ax_sys_weak_alias.html
1487dnl Check for and set one of the following = 1
1488dnl HAVE_SYS_WEAK_ALIAS_ATTRIBUTE
1489dnl HAVE_SYS_WEAK_ALIAS_PRAGMA
1490dnl HAVE_SYS_WEAK_ALIAS_HPSECONDARY
1491dnl HAVE_SYS_WEAK_ALIAS_CRIDUPLICATE
1492dnl If any scheme is found, set
1493dnl HAVE_SYS_WEAK_ALIAS=1
1494dnl The following variable is set to text value
1495dnl WEAK_ALIAS = "attribute" || "pragma" || "hpsecondary" || "criduplicate" || "no"
1496dnl If weak alias can cross object file boundaries
1497dnl WEAK_ALIAS_CROSSFILE = "yes" || "no"
1498dnl ---------------------------------------------------------------------------
1499AX_SYS_WEAK_ALIAS
1500
paulfb2d1502003-06-04 09:40:54 +00001501dnl ---------------------------
1502dnl check for glibc 'backtrace'
1503dnl ---------------------------
David Lamparter8c99b4c2013-08-01 07:43:36 +00001504if test x"${enable_backtrace}" != x"no" ; then
1505 backtrace_ok=no
1506 AC_CHECK_HEADER([execinfo.h], [
1507 AC_SEARCH_LIBS([backtrace], [execinfo], [
1508 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1509 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1510 backtrace_ok=yes
1511 ],, [-lm])
Dmitrij Tejblumeda35292011-09-15 20:00:33 +04001512 ])
David Lamparter8c99b4c2013-08-01 07:43:36 +00001513
1514 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1515 dnl user explicitly requested backtrace but we failed to find support
1516 AC_MSG_FAILURE([failed to find backtrace support])
1517 fi
1518fi
paulfb2d1502003-06-04 09:40:54 +00001519
Paul Jakma41be32b2006-03-30 13:53:59 +00001520dnl -----------------------------------------
1521dnl check for malloc mallinfo struct and call
1522dnl this must try and link using LIBS, in
1523dnl order to check no alternative allocator
1524dnl has been specified, which might not provide
1525dnl mallinfo, e.g. such as Umem on Solaris.
1526dnl -----------------------------------------
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001527AC_CHECK_HEADER([malloc.h],
Paul Jakma41be32b2006-03-30 13:53:59 +00001528 [AC_MSG_CHECKING(whether mallinfo is available)
1529 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1530 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1531 [AC_MSG_RESULT(yes)
1532 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1533 AC_MSG_RESULT(no)
1534 )
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001535 ], [], QUAGGA_INCLUDES)
Paul Jakma41be32b2006-03-30 13:53:59 +00001536
paul408ad942003-05-20 00:03:33 +00001537dnl ----------
1538dnl configure date
1539dnl ----------
1540CONFDATE=`date '+%Y%m%d'`
1541AC_SUBST(CONFDATE)
1542
David Lamparterf281ab92013-02-26 16:21:20 +01001543dnl -------
1544dnl DejaGNU
1545dnl -------
1546if test x"$DEJAGNU" = x
1547then
1548 DEJAGNU="\$(top_srcdir)/tests/global-conf.exp"
1549fi
1550RUNTESTDEFAULTFLAGS="-x --tool \$\$tool"
1551
1552AC_SUBST(DEJAGNU)
1553AC_SUBST(RUNTESTDEFAULTFLAGS)
1554
paul7ea487b2003-03-17 02:05:07 +00001555dnl ------------------------------
paula159ed92003-06-04 11:01:45 +00001556dnl set paths for state directory
paul23bd12c2003-04-07 06:11:09 +00001557dnl ------------------------------
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001558AC_MSG_CHECKING(directory to use for state file)
paul23bd12c2003-04-07 06:11:09 +00001559if test "${prefix}" = "NONE"; then
paule8f29842003-08-12 13:08:31 +00001560 quagga_statedir_prefix="";
paul23bd12c2003-04-07 06:11:09 +00001561else
paule8f29842003-08-12 13:08:31 +00001562 quagga_statedir_prefix=${prefix}
paul23bd12c2003-04-07 06:11:09 +00001563fi
1564if test "${localstatedir}" = '${prefix}/var'; then
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001565 for QUAGGA_STATE_DIR in ${quagga_statedir_prefix}/var/run dnl
paule8f29842003-08-12 13:08:31 +00001566 ${quagga_statedir_prefix}/var/adm dnl
1567 ${quagga_statedir_prefix}/etc dnl
paula159ed92003-06-04 11:01:45 +00001568 /var/run dnl
1569 /var/adm dnl
1570 /etc dnl
1571 /dev/null;
paul23bd12c2003-04-07 06:11:09 +00001572 do
paule8f29842003-08-12 13:08:31 +00001573 test -d $QUAGGA_STATE_DIR && break
paul23bd12c2003-04-07 06:11:09 +00001574 done
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001575 quagga_statedir=$QUAGGA_STATE_DIR
paul23bd12c2003-04-07 06:11:09 +00001576else
paule8f29842003-08-12 13:08:31 +00001577 quagga_statedir=${localstatedir}
paul23bd12c2003-04-07 06:11:09 +00001578fi
paule8f29842003-08-12 13:08:31 +00001579if test $quagga_statedir = "/dev/null"; then
paula159ed92003-06-04 11:01:45 +00001580 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1581fi
Jeremy Jacksone84999d2009-01-21 20:29:39 -05001582AC_MSG_RESULT(${quagga_statedir})
1583AC_SUBST(quagga_statedir)
paula159ed92003-06-04 11:01:45 +00001584
paule8f29842003-08-12 13:08:31 +00001585AC_DEFINE_UNQUOTED(PATH_ZEBRA_PID, "$quagga_statedir/zebra.pid",zebra PID)
1586AC_DEFINE_UNQUOTED(PATH_RIPD_PID, "$quagga_statedir/ripd.pid",ripd PID)
1587AC_DEFINE_UNQUOTED(PATH_RIPNGD_PID, "$quagga_statedir/ripngd.pid",ripngd PID)
1588AC_DEFINE_UNQUOTED(PATH_BGPD_PID, "$quagga_statedir/bgpd.pid",bgpd PID)
1589AC_DEFINE_UNQUOTED(PATH_OSPFD_PID, "$quagga_statedir/ospfd.pid",ospfd PID)
1590AC_DEFINE_UNQUOTED(PATH_OSPF6D_PID, "$quagga_statedir/ospf6d.pid",ospf6d PID)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001591AC_DEFINE_UNQUOTED(PATH_NHRPD_PID, "$quagga_statedir/nhrpd.pid",nhrpd PID)
jardin9e867fe2003-12-23 08:56:18 +00001592AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$quagga_statedir/isisd.pid",isisd PID)
Everton Marques871dbcf2009-08-11 15:43:05 -03001593AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$quagga_statedir/pimd.pid",pimd PID)
ajsd0199432004-12-22 14:03:52 +00001594AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$quagga_statedir/watchquagga.pid",watchquagga PID)
paule8f29842003-08-12 13:08:31 +00001595AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$quagga_statedir/zserv.api",zebra api socket)
1596AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$quagga_statedir/zebra.vty",zebra vty socket)
1597AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$quagga_statedir/ripd.vty",rip vty socket)
1598AC_DEFINE_UNQUOTED(RIPNG_VTYSH_PATH, "$quagga_statedir/ripngd.vty",ripng vty socket)
1599AC_DEFINE_UNQUOTED(BGP_VTYSH_PATH, "$quagga_statedir/bgpd.vty",bgpd vty socket)
1600AC_DEFINE_UNQUOTED(OSPF_VTYSH_PATH, "$quagga_statedir/ospfd.vty",ospfd vty socket)
1601AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$quagga_statedir/ospf6d.vty",ospf6d vty socket)
Timo Teräsdafa05e2017-01-19 17:27:01 +02001602AC_DEFINE_UNQUOTED(NHRP_VTYSH_PATH, "$quagga_statedir/nhrpd.vty",nhrpd vty socket)
jardin9e867fe2003-12-23 08:56:18 +00001603AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$quagga_statedir/isisd.vty",isisd vty socket)
Everton Marques871dbcf2009-08-11 15:43:05 -03001604AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$quagga_statedir/pimd.vty",pimd vty socket)
ajs515210b2004-12-22 15:35:12 +00001605AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$quagga_statedir",daemon vty directory)
paul7ea487b2003-03-17 02:05:07 +00001606
paul1eb8ef22005-04-07 07:30:20 +00001607dnl -------------------------------
1608dnl Quagga sources should always be
1609dnl current wrt interfaces. Dont
1610dnl allow deprecated interfaces to
1611dnl be exposed.
1612dnl -------------------------------
1613AC_DEFINE(QUAGGA_NO_DEPRECATED_INTERFACES, 1, Hide deprecated interfaces)
1614
paul7ea487b2003-03-17 02:05:07 +00001615dnl ---------------------------
1616dnl Check htonl works correctly
1617dnl ---------------------------
1618AC_MSG_CHECKING(for working htonl)
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001619AC_CACHE_VAL(ac_cv_htonl_works,
1620 [AC_LINK_IFELSE([AC_LANG_PROGRAM([QUAGGA_INCLUDES],[htonl (0);])],
1621 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1622 ]
1623)
paul7ea487b2003-03-17 02:05:07 +00001624AC_MSG_RESULT($ac_cv_htonl_works)
1625
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001626AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
ajsd0199432004-12-22 14:03:52 +00001627 ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile
Paul Jakma336724d2015-05-11 15:13:31 +01001628 ospf6d/Makefile isisd/Makefile vtysh/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001629 doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
Timo Teräsdafa05e2017-01-19 17:27:01 +02001630 pimd/Makefile nhrpd/Makefile
David Lamparter5bb7e4d2013-02-26 17:53:30 +01001631 tests/bgpd.tests/Makefile
David Lamparterc69905b2013-01-24 01:39:14 +01001632 tests/libzebra.tests/Makefile
David Lamparterf281ab92013-02-26 16:21:20 +01001633 redhat/Makefile
gdt69f1fc22004-08-27 15:57:35 +00001634 pkgsrc/Makefile
Avneesh Sachdevef20ef72016-04-04 10:54:57 -07001635 fpm/Makefile
paul670bbf12004-11-12 09:05:00 +00001636 redhat/quagga.spec
gdtb7a97f82004-07-23 16:23:56 +00001637 lib/version.h
hassof695b012005-04-02 19:03:39 +00001638 isisd/topology/Makefile
gdtcbd04082004-08-31 18:16:36 +00001639 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
paulf31293a2004-11-12 09:27:04 +00001640 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
paul26275b02005-04-11 07:10:47 +00001641AC_CONFIG_FILES([solaris/Makefile])
1642
paul670bbf12004-11-12 09:05:00 +00001643AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
hasso48577192004-11-19 06:41:49 +00001644## Hack, but working solution to avoid rebuilding of quagga.info.
1645## It's already in CVS until texinfo 4.7 is more common.
paul14c17fd2004-11-07 22:34:23 +00001646AC_OUTPUT
paul7ea487b2003-03-17 02:05:07 +00001647
1648echo "
hassoc89f6492004-08-26 12:21:28 +00001649Quagga configuration
1650--------------------
1651quagga version : ${PACKAGE_VERSION}
Joachim Nilsson1080c132012-05-30 08:15:48 +02001652host operating system : ${host_os}
paul7ea487b2003-03-17 02:05:07 +00001653source code location : ${srcdir}
1654compiler : ${CC}
1655compiler flags : ${CFLAGS}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001656make : ${MAKE-make}
Paul Jakma6f0e3f62007-05-10 02:38:51 +00001657linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
paule8f29842003-08-12 13:08:31 +00001658state file directory : ${quagga_statedir}
pauldc7a2bf2003-10-22 00:07:44 +00001659config file directory : `eval echo \`echo ${sysconfdir}\``
gdtd6b72f72003-12-03 17:24:27 +00001660example directory : `eval echo \`echo ${exampledir}\``
paul8d4aee52003-06-06 00:30:35 +00001661user to run as : ${enable_user}
1662group to run as : ${enable_group}
1663group for vty sockets : ${enable_vty_group}
gdtaa593d52003-12-22 20:15:53 +00001664config file mask : ${enable_configfile_mask}
1665log file mask : ${enable_logfile_mask}
Avneesh Sachdev07e5b642016-04-04 10:54:55 -07001666zebra protobuf enabled : ${have_protobuf:-no}
pauldc7a2bf2003-10-22 00:07:44 +00001667
1668The above user and group must have read/write access to the state file
Paul Jakma105b8232006-05-28 08:02:41 +00001669directory and to the config files in the config file directory."
1670
1671if test x"$quagga_cv_gnu_make" = x"no"; then echo "
1672Warning: The ${MAKE-make} programme detected, either in your path or
1673via the MAKE variable, is not GNU Make. GNU make may be installed as
1674gmake on some systems. and is required to complete a build of Quagga
1675" > /dev/stderr
1676fi