]> git.proxmox.com Git - mirror_frr.git/blame - configure.ac
Merge pull request #1496 from donaldsharp/install_failure
[mirror_frr.git] / configure.ac
CommitLineData
7ea487bc 1##
447a8fe9 2## Configure template file for FRRouting.
7ea487bc 3## autoconf will generate configure script.
4##
5## Copyright (c) 1996, 97, 98, 99, 2000 Kunihiro Ishiguro <kunihiro@zebra.org>
e8f2984c 6## Portions Copyright (c) 2003 Paul Jakma <paul@dishone.st>
7ea487bc 7##
9bc6875a 8AC_PREREQ(2.60)
7ea487bc 9
4952d0f0 10AC_INIT(frr, 3.1-dev, [https://github.com/frrouting/frr/issues])
d6180888 11PACKAGE_URL="https://frrouting.org/"
34982989 12AC_SUBST(PACKAGE_URL)
447a8fe9 13PACKAGE_FULLNAME="FRRouting"
a07169b1
DL
14AC_SUBST(PACKAGE_FULLNAME)
15
5ee1bde7 16CONFIG_ARGS="$ac_configure_args"
80db5ac1 17AC_SUBST(CONFIG_ARGS)
a07169b1 18
fa1253d0 19AC_CONFIG_SRCDIR(lib/zebra.h)
62c9f504 20AC_CONFIG_MACRO_DIR([m4])
dfb9a545 21
22dnl -----------------------------------
23dnl Get hostname and other information.
24dnl -----------------------------------
25AC_CANONICAL_BUILD()
26AC_CANONICAL_HOST()
29ad6f68
DL
27
28AS_IF([test "$host" != "$build"], [
29 if test "$srcdir" = "."; then
30 AC_MSG_ERROR([cross-compilation is only possible with builddir separate from srcdir. create a separate directory and run as .../path-to-frr/configure.])
31 fi
32 test -d hosttools || mkdir hosttools
33 abssrc="`cd \"${srcdir}\"; pwd`"
34
35 AC_MSG_NOTICE([...])
36 AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
37 AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
38 AC_MSG_NOTICE([...])
39
40 ( CPPFLAGS="$HOST_CPPFLAGS"; \
41 CFLAGS="$HOST_CFLAGS"; \
42 LDFLAGS="$HOST_LDFLAGS"; \
43 cd hosttools; "${abssrc}/configure" "--host=$build" "--build=$build"; )
44
45 AC_MSG_NOTICE([...])
46 AC_MSG_NOTICE([... cross-compilation: finished self-configuring for build platform tools])
47 AC_MSG_NOTICE([...])
48
49 build_clippy="false"
4a121f99 50 HOSTTOOLS="hosttools/"
29ad6f68
DL
51], [
52 build_clippy="true"
4a121f99 53 HOSTTOOLS=""
29ad6f68 54])
4a121f99 55AC_SUBST(HOSTTOOLS)
29ad6f68 56AM_CONDITIONAL([BUILD_CLIPPY], [$build_clippy])
dfb9a545 57
f77cba1b
AS
58# Disable portability warnings -- our automake code (in particular
59# common.am) uses some constructs specific to gmake.
a6cf5da4 60AM_INIT_AUTOMAKE([1.12 -Wno-portability])
50cfc0d2 61m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
e54583ea 62AM_SILENT_RULES([yes])
303bb005 63AC_CONFIG_HEADERS(config.h)
7ea487bc 64
0be793e6 65AC_PATH_PROG(PERL, perl)
00c03bc9 66PKG_PROG_PKG_CONFIG
03ecfb67 67
d6b72f7a 68dnl default is to match previous behavior
c4f0efe6 69exampledir=${sysconfdir}
d6b72f7a 70AC_ARG_ENABLE([exampledir],
23925784 71 AS_HELP_STRING([--enable-exampledir],
d6b72f7a 72 [specify alternate directory for examples]),
73 exampledir="$enableval",)
c4f0efe6 74dnl XXX add --exampledir to autoconf standard directory list somehow
d6b72f7a 75AC_SUBST(exampledir)
76
cbd04084 77dnl default is to match previous behavior
78pkgsrcrcdir=""
cbd04084 79AC_ARG_ENABLE([pkgsrcrcdir],
23925784 80 AS_HELP_STRING([--enable-pkgsrcrcdir],
cbd04084 81 [specify directory for rc.d scripts]),
53d93be1 82 pkgsrcrcdir="$enableval",)
cbd04084 83dnl XXX add --pkgsrcrcdir to autoconf standard directory list somehow
cbd04084 84AC_SUBST(pkgsrcrcdir)
53d93be1 85AM_CONDITIONAL([PKGSRC], [test "x$pkgsrcrcdir" != "x"])
cbd04084 86
30771d65
DL
87AC_ARG_WITH([moduledir], [AS_HELP_STRING([--with-moduledir=DIR], [module directory (${libdir}/frr/modules)])], [
88 moduledir="$withval"
89], [
90 moduledir="\${libdir}/frr/modules"
91])
92AC_SUBST([moduledir], [$moduledir])
93
3f9c7369 94AC_ARG_ENABLE(tcmalloc,
428cd73f 95 AS_HELP_STRING([--enable-tcmalloc], [Turn on tcmalloc]),
3f9c7369
DS
96[case "${enableval}" in
97 yes) tcmalloc_enabled=true
98LIBS="$LIBS -ltcmalloc_minimal"
99 ;;
100 no) tcmalloc_enabled=false ;;
101 *) AC_MSG_ERROR(bad value ${enableval} for --enable-tcmalloc) ;;
102esac],[tcmalloc_enabled=false])
103
104
fbd0bae6
DL
105dnl Thanks autoconf, but we don't want a default -g -O2. We have our own
106dnl flag determination logic.
107CFLAGS="${CFLAGS:-}"
108
1969e4b9 109dnl --------------------
110dnl Check CC and friends
111dnl --------------------
a89b1641
DL
112dnl note orig_cflags is also used further down
113orig_cflags="$CFLAGS"
46bc0e43 114AC_LANG([C])
7ea487bc 115AC_PROG_CC
1969e4b9 116AC_PROG_CPP
46bc0e43 117AM_PROG_CC_C_O
a89b1641
DL
118dnl remove autoconf default "-g -O2"
119CFLAGS="$orig_cflags"
1769aff8 120AC_PROG_CC_C99
8aa42b82 121dnl NB: see C11 below
553bdfe3 122
a89b1641 123AC_PROG_EGREP
2fb975da 124PKG_PROG_PKG_CONFIG
a89b1641 125
553bdfe3
GT
126dnl autoconf 2.59 appears not to support AC_PROG_SED
127dnl AC_PROG_SED
128AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
1969e4b9 129
1689cf7e 130dnl try and enable CFLAGS that are useful for FRR
a89b1641 131dnl - specifically, options to control warnings
1969e4b9 132
b31fd749 133AC_USE_SYSTEM_EXTENSIONS
988225dd
DL
134AC_DEFUN([AC_C_FLAG], [{
135 AC_LANG_PUSH(C)
136 ac_c_flag_save="$CFLAGS"
137 CFLAGS="$CFLAGS $1"
138 AC_MSG_CHECKING([[whether $CC supports $1]])
139 AC_COMPILE_IFELSE(
140 [AC_LANG_PROGRAM([[]])],
141 [
142 AC_MSG_RESULT([yes])
143 m4_if([$3], [], [], [
144 CFLAGS="$ac_c_flag_save"
145 $3
146 ])
147 ], [
148 CFLAGS="$ac_c_flag_save"
149 AC_MSG_RESULT([no])
150 $2
151 ])
152 AC_LANG_POP(C)
153 }])
154
92e50261
DL
155AC_DEFUN([AC_LINK_IFELSE_FLAGS], [{
156 AC_LANG_PUSH(C)
157 ac_cflags_save="$CFLAGS"
158 ac_libs_save="$LIBS"
159 CFLAGS="$CFLAGS $1"
160 LIBS="$LIBS $2"
161 AC_LINK_IFELSE(
162 [$3],
163 [
164 AC_MSG_RESULT([yes])
165 CFLAGS="$ac_cflags_save"
166 LIBS="$ac_libs_save"
167 $5
168 ], [
169 AC_MSG_RESULT([no])
170 CFLAGS="$ac_cflags_save"
171 LIBS="$ac_libs_save"
172 $4
173 ])
174 AC_LANG_POP(C)
175 }])
176
a89b1641
DL
177dnl ICC won't bail on unknown options without -diag-error 10006
178dnl need to do this first so we get useful results for the other options
179AC_C_FLAG([-diag-error 10006])
180
8aa42b82
DL
181dnl AC_PROG_CC_C99 may change CC to include -std=gnu99 or something
182ac_cc="$CC"
183CC="${CC% -std=gnu99}"
184CC="${CC% -std=c99}"
185
186AC_C_FLAG([-std=gnu11], [CC="$ac_cc"], [CC="$CC -std=gnu11"])
187
09329dbc
DS
188dnl if the user has specified any CFLAGS, override our settings
189if test "x${enable_dev_build}" = "xyes"; then
190 AC_DEFINE(DEV_BUILD,,Build for development)
191 if test "z$orig_cflags" = "z"; then
192 AC_C_FLAG([-g3])
193 AC_C_FLAG([-O0])
194 fi
195else
196 if test "z$orig_cflags" = "z"; then
197 AC_C_FLAG([-g])
198 AC_C_FLAG([-Os], [
199 AC_C_FLAG([-O2])
200 ])
201 fi
202fi
203AM_CONDITIONAL([DEV_BUILD], [test "x$enable_dev_build" = "xyes"])
8a71d93d 204AM_CONDITIONAL([SHARPD], [test "x$enable_dev_build" = "xyes"])
09329dbc 205
a89b1641
DL
206dnl always want these CFLAGS
207AC_C_FLAG([-fno-omit-frame-pointer])
c594d99f 208AC_C_FLAG([-funwind-tables])
a89b1641
DL
209AC_C_FLAG([-Wall])
210AC_C_FLAG([-Wextra])
211AC_C_FLAG([-Wmissing-prototypes])
212AC_C_FLAG([-Wmissing-declarations])
213AC_C_FLAG([-Wpointer-arith])
214AC_C_FLAG([-Wbad-function-cast])
215AC_C_FLAG([-Wwrite-strings])
216if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
217 AC_C_FLAG([-Wcast-qual])
218 AC_C_FLAG([-Wstrict-prototypes])
219 AC_C_FLAG([-Wmissing-noreturn])
220 AC_C_FLAG([-Wmissing-format-attribute])
221 AC_C_FLAG([-Wunreachable-code])
222 AC_C_FLAG([-Wpacked])
223 AC_C_FLAG([-Wpadded])
6a4b8832 224else
a89b1641 225 AC_C_FLAG([-Wno-unused-result])
1969e4b9 226fi
a89b1641
DL
227AC_C_FLAG([-Wno-unused-parameter])
228AC_C_FLAG([-Wno-missing-field-initializers])
229
230dnl ICC emits a broken warning for const char *x = a ? "b" : "c";
231dnl for some reason the string consts get 'promoted' to char *,
232dnl triggering a const to non-const conversion warning.
233AC_C_FLAG([-diag-disable 3179])
1969e4b9 234
aa9584c1
DS
235if test x"${enable_werror}" = x"yes" ; then
236 WERROR="-Werror"
237fi
238AC_SUBST(WERROR)
239
2e83e8e9
DL
240dnl need link on this one, not compile
241AC_LANG_PUSH(C)
242ac_ld_flag_save="$LDFLAGS"
243LDFLAGS="$LDFLAGS -rdynamic"
244AC_MSG_CHECKING([[whether linker supports -rdynamic]])
245AC_LINK_IFELSE(
246 [AC_LANG_PROGRAM([[]])],
247 [AC_MSG_RESULT([yes])],
248 [
249 LDFLAGS="$ac_ld_flag_save"
250 AC_MSG_RESULT([no])
251 ])
252AC_LANG_POP(C)
253
b31fd749
DL
254dnl ----------
255dnl Essentials
256dnl ----------
257
258AX_PTHREAD([
259 CC="$PTHREAD_CC"
260 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
261 LIBS="$PTHREAD_LIBS $LIBS"
262], [
1689cf7e 263 AC_MSG_FAILURE([This FRR version needs pthreads])
b31fd749
DL
264])
265
7ea487bc 266dnl --------------
267dnl Check programs
268dnl --------------
7ea487bc 269AC_PROG_INSTALL
6f0e3f6e 270AC_PROG_LN_S
7ea487bc 271AC_PROG_MAKE_SET
272AC_CHECK_TOOL(AR, ar)
7ea487bc 273
d46d2a24
PJ
274dnl -----------------
275dnl System extensions
276dnl -----------------
d46d2a24 277AC_GNU_SOURCE
7ea487bc 278
87efd646 279dnl -------
280dnl libtool
281dnl -------
95bb8305 282LT_INIT
87efd646 283
7ea487bc 284dnl ----------------------
285dnl Packages configuration
286dnl ----------------------
1080c13f
JN
287AC_ARG_WITH(pkg-extra-version,
288 AS_HELP_STRING([--with-pkg-extra-version=VER], [add extra version field, for packagers/distributions]),
289 [EXTRAVERSION=$withval],)
0be793e6
DL
290AC_ARG_WITH(pkg-git-version,
291 AS_HELP_STRING([--with-pkg-git-version], [add git information to MOTD and build version string]),
a16dcf7c 292 [ test "x$withval" != "xno" && with_pkg_git_version="yes" ])
08c369bd
DS
293AC_ARG_WITH(vtysh_pager,
294 AS_HELP_STRING([--with-vtysh-pager=PAGER], [control what pager is compiled in as default]),
295 VTYSH_PAGER=$withval, VTYSH_PAGER="more")
7ea487bc 296AC_ARG_ENABLE(vtysh,
1689cf7e 297 AS_HELP_STRING([--disable-vtysh], [do not build integrated vty shell for FRR]))
cbcd9bfc 298AC_ARG_ENABLE(doc,
23925784 299 AS_HELP_STRING([--disable-doc], [do not build docs]))
7ea487bc 300AC_ARG_ENABLE(zebra,
23925784 301 AS_HELP_STRING([--disable-zebra], [do not build zebra daemon]))
7ea487bc 302AC_ARG_ENABLE(bgpd,
23925784 303 AS_HELP_STRING([--disable-bgpd], [do not build bgpd]))
7ea487bc 304AC_ARG_ENABLE(ripd,
23925784 305 AS_HELP_STRING([--disable-ripd], [do not build ripd]))
7ea487bc 306AC_ARG_ENABLE(ripngd,
23925784 307 AS_HELP_STRING([--disable-ripngd], [do not build ripngd]))
7ea487bc 308AC_ARG_ENABLE(ospfd,
23925784 309 AS_HELP_STRING([--disable-ospfd], [do not build ospfd]))
7ea487bc 310AC_ARG_ENABLE(ospf6d,
23925784 311 AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
eac6e3f0
RW
312AC_ARG_ENABLE(ldpd,
313 AS_HELP_STRING([--enable-ldpd], [build ldpd]))
2fb975da
TT
314AC_ARG_ENABLE(nhrpd,
315 AS_HELP_STRING([--disable-nhrpd], [do not build nhrpd]))
7f57883e
DS
316AC_ARG_ENABLE(eigrpd,
317 AS_HELP_STRING([--disable-eigrpd], [do not build eigrpd]))
ca10883e
DS
318AC_ARG_ENABLE(babeld,
319 AS_HELP_STRING([--disable-babeld], [do not build babeld]))
9473e340
DS
320AC_ARG_ENABLE(watchfrr,
321 AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
9e867fe6 322AC_ARG_ENABLE(isisd,
c3a9461e 323 AS_HELP_STRING([--disable-isisd], [do not build isisd]))
12e41d03 324AC_ARG_ENABLE(pimd,
23925784 325 AS_HELP_STRING([--disable-pimd], [do not build pimd]))
7ea487bc 326AC_ARG_ENABLE(bgp-announce,
23925784 327 AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route announcement]))
65efcfce 328AC_ARG_ENABLE(bgp-vnc,
f95f2ad9 329 AS_HELP_STRING([--disable-bgp-vnc],[turn off BGP VNC support]))
65efcfce
LB
330AC_ARG_WITH(rfp-path,
331 AS_HELP_STRING([--with-rfp-path[=DIR]],[path to replaced stub RFP used with BGP VNC]))
7ea487bc 332AC_ARG_ENABLE(snmp,
23925784 333 AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or agentx)]))
b6116506
DL
334AC_ARG_ENABLE(zeromq,
335 AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
7ea487bc 336AC_ARG_WITH(libpam,
23925784 337 AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
1ef74ef7 338AC_ARG_ENABLE(ospfapi,
23925784 339 AS_HELP_STRING([--disable-ospfapi], [do not build OSPFAPI to access the OSPF LSA Database]))
1ef74ef7 340AC_ARG_ENABLE(ospfclient,
23925784
DL
341 AS_HELP_STRING([--disable-ospfclient], [do not build OSPFAPI client for OSPFAPI,
342 (this is the default if --disable-ospfapi is set)]))
7ea487bc 343AC_ARG_ENABLE(multipath,
23925784 344 AS_HELP_STRING([--enable-multipath=ARG], [enable multipath function, ARG must be digit]))
fe86b484 345AC_ARG_ENABLE(user,
b2f36157 346 AS_HELP_STRING([--enable-user=USER], [user to run FRR suite as (default frr)]))
fe86b484 347AC_ARG_ENABLE(group,
b2f36157 348 AS_HELP_STRING([--enable-group=GROUP], [group to run FRR suite as (default frr)]))
edd7c245 349AC_ARG_ENABLE(vty_group,
23925784 350 AS_HELP_STRING([--enable-vty-group=ARG], [set vty sockets to have specified group as owner]))
aa593d5e 351AC_ARG_ENABLE(configfile_mask,
23925784 352 AS_HELP_STRING([--enable-configfile-mask=ARG], [set mask for config files]))
aa593d5e 353AC_ARG_ENABLE(logfile_mask,
23925784 354 AS_HELP_STRING([--enable-logfile-mask=ARG], [set mask for log files]))
5fd1f747 355AC_ARG_ENABLE(shell_access,
23925784 356 AS_HELP_STRING([--enable-shell-access], [Allow users to access shell/telnet/ssh]))
71c0fb50 357AC_ARG_ENABLE(rtadv,
23925784 358 AS_HELP_STRING([--disable-rtadv], [disable IPV6 router advertisement feature]))
ca776988 359AC_ARG_ENABLE(irdp,
8dc1f7fc 360 AS_HELP_STRING([--disable-irdp], [enable IRDP server support in zebra (default if supported)]))
41d3fc96 361AC_ARG_ENABLE(capabilities,
23925784 362 AS_HELP_STRING([--disable-capabilities], [disable using POSIX capabilities]))
47f6aef0 363AC_ARG_ENABLE(rusage,
23925784 364 AS_HELP_STRING([--disable-rusage], [disable using getrusage]))
6b6942f9 365AC_ARG_ENABLE(gcc_ultra_verbose,
23925784 366 AS_HELP_STRING([--enable-gcc-ultra-verbose], [enable ultra verbose GCC warnings]))
3453a712 367AC_ARG_ENABLE(linux24_tcp_md5,
23925784 368 AS_HELP_STRING([--enable-linux24-tcp-md5], [enable support for old, Linux-2.4 RFC2385 patch]))
8c99b4c1 369AC_ARG_ENABLE(backtrace,
23925784 370 AS_HELP_STRING([--disable-backtrace,], [disable crash backtraces (default autodetect)]))
924b9229 371AC_ARG_ENABLE(time-check,
23925784 372 AS_HELP_STRING([--disable-time-check], [disable slow thread warning messages]))
25f45887 373AC_ARG_ENABLE(pcreposix,
23925784 374 AS_HELP_STRING([--enable-pcreposix], [enable using PCRE Posix libs for regex functions]))
5adc2528 375AC_ARG_ENABLE(fpm,
23925784 376 AS_HELP_STRING([--enable-fpm], [enable Forwarding Plane Manager support]))
ddd82ff6 377AC_ARG_ENABLE(systemd,
23925784 378 AS_HELP_STRING([--enable-systemd], [enable Systemd support]))
aa9584c1
DS
379AC_ARG_ENABLE(werror,
380 AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)]))
000cf1fb 381AC_ARG_ENABLE(cumulus,
23925784 382 AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions]))
df970aa6
DS
383AC_ARG_ENABLE(datacenter,
384 AS_HELP_STRING([--enable-datacenter], [enable Compilation for Data Center Extensions]))
411314ed
DS
385AC_ARG_ENABLE(fuzzing,
386 AS_HELP_STRING([--enable-fuzzing], [enable ability to fuzz various parts of FRR]))
76981cd3
DS
387AC_ARG_ENABLE(rr-semantics,
388 AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics]))
dad253b4
AS
389AC_ARG_ENABLE([protobuf],
390 AS_HELP_STRING([--enable-protobuf], [Enable experimental protobuf support]))
28436d6d 391AC_ARG_ENABLE([oldvpn_commands],
fcc65b0f 392 AS_HELP_STRING([--enable-oldvpn-commands], [Keep old vpn commands]))
dabecd7c
MR
393AC_ARG_ENABLE(rpki,
394 AS_HELP_STRING([--enable-rpki], [enable RPKI prefix validation support]))
6b6942f9 395
112072ac 396AC_CHECK_HEADERS(json-c/json.h)
ea2fd55a 397AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c", [], [-lm])
112072ac 398if test $ac_cv_lib_json_c_json_object_get = no; then
10b8ab26
DS
399 AC_CHECK_LIB(json, json_object_get, LIBS="$LIBS -ljson")
400 if test $ac_cv_lib_json_json_object_get = no; then
401 AC_MSG_ERROR([lib json is needed to compile])
402 fi
c2f4c19c
DS
403fi
404
3b8282a8
AS
405AC_ARG_ENABLE([dev_build],
406 AS_HELP_STRING([--enable-dev-build], [build for development]))
407
924b9229 408if test x"${enable_time_check}" != x"no" ; then
409 if test x"${enable_time_check}" = x"yes" -o x"${enable_time_check}" = x ; then
410 AC_DEFINE(CONSUMED_TIME_CHECK,5000000,Consumed Time Check)
411 else
412 AC_DEFINE_UNQUOTED(CONSUMED_TIME_CHECK,$enable_time_check,Consumed Time Check)
413 fi
414fi
415
37219958
DS
416case "${enable_systemd}" in
417 "no") ;;
418 "yes")
419 AC_CHECK_LIB(systemd, sd_notify, LIBS="$LIBS -lsystemd")
420 if test $ac_cv_lib_systemd_sd_notify = no; then
421 AC_MSG_ERROR([enable systemd has been specified but systemd development env not found on your system])
63e30864
DS
422 else
423 AC_DEFINE(HAVE_SYSTEMD,,Compile systemd support in)
37219958
DS
424 fi
425 ;;
426 "*") ;;
427esac
ddd82ff6 428
76981cd3
DS
429if test "${enable_rr_semantics}" != "no" ; then
430 AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics)
431fi
432
df970aa6
DS
433if test "${enable_datacenter}" = "yes" ; then
434 AC_DEFINE(HAVE_DATACENTER,,Compile extensions for a DataCenter)
8efe88ea
DL
435 DFLT_NAME="datacenter"
436else
437 DFLT_NAME="traditional"
000cf1fb 438fi
df970aa6 439
411314ed
DS
440if test "${enable_fuzzing}" = "yes" ; then
441 AC_DEFINE(HANDLE_ZAPI_FUZZING,,Compile extensions to use with a fuzzer)
442fi
443
df970aa6
DS
444if test "${enable_cumulus}" = "yes" ; then
445 AC_DEFINE(HAVE_CUMULUS,,Compile Special Cumulus Code in)
446fi
447
8efe88ea
DL
448AC_SUBST(DFLT_NAME)
449AC_DEFINE_UNQUOTED(DFLT_NAME,["$DFLT_NAME"], Name of the configuration default set)
000cf1fb 450
576b6b5d
DS
451if test "${enable_shell_access}" = "yes"; then
452 AC_DEFINE(HAVE_SHELL_ACCESS,,Allow user to use ssh/telnet/bash)
453fi
454
4f8ea50c 455AM_CONDITIONAL([FPM], [test "x$enable_fpm" = "xyes"])
5adc2528 456
29ad6f68
DL
457#
458# Python for clippy
459#
460AS_IF([test "$host" = "$build"], [
461 PYTHONCONFIG=""
462
463 # ordering:
464 # 1. try python3, but respect the user's preference on which minor ver
465 # 2. try python, which might be py3 or py2 again on the user's preference
466 # 3. try python2 (can really only be 2.7 but eh)
467 # 4. try 3.5 > 3.4 > 3.3 > 3.2 > 2.7 through pkg-config (no user pref)
468 #
469 # (AX_PYTHON_DEVEL has no clue about py3 vs py2)
470 # (AX_PYTHON does not do what we need)
471
472 AC_CHECK_TOOLS([PYTHONCONFIG], [python3-config python-config python2-config])
473 if test -n "$PYTHONCONFIG"; then
474 PYTHON_CFLAGS="`\"${PYTHONCONFIG}\" --includes`"
475 PYTHON_LIBS="`\"${PYTHONCONFIG}\" --libs`"
476
477 AC_MSG_CHECKING([whether we found a working Python version])
478 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
479#include <Python.h>
480#if PY_VERSION_HEX < 0x02070000
481#error python too old
482#endif
483int main(void);
484],
485[
486{
487 Py_Initialize();
488 return 0;
489}
490])], [
491 PYTHONCONFIG=""
492 unset PYTHON_LIBS
493 unset PYTHON_CFLAGS
494 ])
495 fi
496
497 if test -z "$PYTHONCONFIG"; then
498 PKG_CHECK_MODULES([PYTHON], python-3.5, [], [
499 PKG_CHECK_MODULES([PYTHON], python-3.4, [], [
500 PKG_CHECK_MODULES([PYTHON], python-3.3, [], [
501 PKG_CHECK_MODULES([PYTHON], python-3.2, [], [
502 PKG_CHECK_MODULES([PYTHON], python-2.7, [], [
503 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
504 ])])])])])
505
506
507 AC_MSG_CHECKING([whether we found a working Python version])
508 AC_LINK_IFELSE_FLAGS([$PYTHON_CFLAGS], [$PYTHON_LIBS], [AC_LANG_PROGRAM([
509#include <Python.h>
510#if PY_VERSION_HEX < 0x02070000
511#error python too old
512#endif
513int main(void);
514],
515[
516{
517 Py_Initialize();
518 return 0;
519}
520])], [
521 AC_MSG_FAILURE([could not find python-config or pkg-config python, please install Python development files from libpython-dev or similar])
522 ])
523 fi
524])
525AC_SUBST(PYTHON_CFLAGS)
526AC_SUBST(PYTHON_LIBS)
527
dad253b4
AS
528#
529# Logic for protobuf support.
530#
531if test "$enable_protobuf" = "yes"; then
532 have_protobuf=yes
533
534 # Check for protoc-c
535 AC_CHECK_PROG([PROTOC_C], [protoc-c], [protoc-c], [/bin/false])
536 if test "x$PROTOC_C" = "x/bin/false"; then
537 have_protobuf=no
538 else
539 found_protobuf_c=no
540 PKG_CHECK_MODULES([PROTOBUF_C], libprotobuf-c >= 0.14,
541 [found_protobuf_c=yes],
542 [AC_MSG_RESULT([pkg-config did not find libprotobuf-c])])
543
544 if test "x$found_protobuf_c" = "xyes"; then
545 LDFLAGS="$LDFLAGS $PROTOBUF_C_LIBS"
546 CFLAGS="$CFLAGS $PROTOBUF_C_CFLAGS"
547 else
548 AC_CHECK_HEADER([google/protobuf-c/protobuf-c.h], [],
549 [have_protobuf=no; AC_MSG_RESULT([Couldn't find google/protobuf-c.h])])
550 fi
551 fi
552fi
553
28436d6d
PG
554#
555# Logic for old vpn commans support.
556#
fcc65b0f 557if test "$enable_oldvpn_commands" = "yes"; then
28436d6d
PG
558 AC_DEFINE(KEEP_OLD_VPN_COMMANDS,, [Define for compiling with old vpn commands])
559fi
560
dad253b4
AS
561# Fail if the user explicity enabled protobuf support and we couldn't
562# find the compiler or libraries.
563if test "x$have_protobuf" = "xno" && test "x$enable_protobuf" = "xyes"; then
564 AC_MSG_ERROR([Protobuf enabled explicitly but can't find libraries/tools])
565fi
566
567if test "x$have_protobuf" = "xyes"; then
568 AC_DEFINE(HAVE_PROTOBUF,, protobuf)
569fi
570
571AM_CONDITIONAL([HAVE_PROTOBUF], [test "x$have_protobuf" = "xyes"])
572
573#
574# End of logic for protobuf support.
575#
576
3453a712
PJ
577if test "${enable_linux24_tcp_md5}" = "yes"; then
578 AC_DEFINE(HAVE_TCP_MD5_LINUX24,,Old Linux 2.4 TCP MD5 Signature Patch)
579fi
580
d2a0ccc6 581AC_MSG_CHECKING(if zebra should be configurable to send Route Advertisements)
582if test "${enable_rtadv}" != "no"; then
71c0fb50 583 AC_MSG_RESULT(yes)
d2a0ccc6 584 AC_DEFINE(HAVE_RTADV,,Enable IPv6 Routing Advertisement support)
2487bea1 585else
586 AC_MSG_RESULT(no)
71c0fb50 587fi
7ea487bc 588
0b02a1b4
JAG
589if test x"${enable_user}" = x"no"; then
590 enable_user=""
591else
592 if test x"${enable_user}" = x"yes" || test x"${enable_user}" = x""; then
b2f36157 593 enable_user="frr"
0b02a1b4 594 fi
b2f36157 595 AC_DEFINE_UNQUOTED(FRR_USER, "${enable_user}", frr User)
edd7c245 596fi
edd7c245 597
0b02a1b4
JAG
598if test x"${enable_group}" = x"no"; then
599 enable_group=""
600else
601 if test x"${enable_group}" = x"yes" || test x"${enable_group}" = x""; then
b2f36157 602 enable_group="frr"
0b02a1b4 603 fi
b2f36157 604 AC_DEFINE_UNQUOTED(FRR_GROUP, "${enable_group}", frr Group)
edd7c245 605fi
edd7c245 606
607if test x"${enable_vty_group}" = x"yes" ; then
8d4aee5d 608 AC_MSG_ERROR([--enable-vty-group requires a group as argument, not yes])
79cb2169 609elif test x"${enable_vty_group}" != x""; then
8d4aee5d 610 if test x"${enable_vty_group}" != x"no"; then
edd7c245 611 AC_DEFINE_UNQUOTED(VTY_GROUP, "${enable_vty_group}", VTY Sockets Group)
612 fi
613fi
26275b05 614AC_SUBST([enable_user])
615AC_SUBST([enable_group])
616AC_SUBST([enable_vty_group])
edd7c245 617
aa593d5e 618enable_configfile_mask=${enable_configfile_mask:-0600}
619AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
620
621enable_logfile_mask=${enable_logfile_mask:-0600}
622AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
623
7a6da5ba 624MPATH_NUM=1
7ea487bc 625
626case "${enable_multipath}" in
7c5d2b76 627 0)
7a6da5ba 628 MPATH_NUM=64
7c5d2b76 629 ;;
90fb3e13 630 [[1-9]|[1-9][0-9]|[1-9][0-9][0-9]])
7a6da5ba 631 MPATH_NUM="${enable_multipath}"
7ea487bc 632 ;;
633 "")
634 ;;
635 *)
6f0e3f6e 636 AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
7ea487bc 637 ;;
638esac
639
7a6da5ba 640AC_DEFINE_UNQUOTED(MULTIPATH_NUM, $MPATH_NUM, Maximum number of paths for a route)
7ea487bc 641
08c369bd
DS
642AC_DEFINE_UNQUOTED(VTYSH_PAGER, "$VTYSH_PAGER", [What pager to use])
643
1080c13f
JN
644dnl -----------------------------------
645dnl Add extra version string to package
646dnl name, string and version fields.
647dnl -----------------------------------
648if test "x${EXTRAVERSION}" != "x" ; then
0be793e6
DL
649 VERSION="${VERSION}${EXTRAVERSION}"
650 PACKAGE_VERSION="${PACKAGE_VERSION}${EXTRAVERSION}"
3ab11ecc 651 AC_SUBST(PACKAGE_EXTRAVERSION, ["${EXTRAVERSION}"])
0be793e6 652 PACKAGE_STRING="${PACKAGE_STRING}${EXTRAVERSION}"
1080c13f
JN
653fi
654
a16dcf7c
DL
655if test "x$with_pkg_git_version" = "xyes"; then
656 if test -d "${srcdir}/.git"; then
657 AC_DEFINE(GIT_VERSION, [1], [include git version info])
658 else with_pkg_git_version="no"
659 AC_MSG_WARN([--with-pkg-git-version given, but this is not a git checkout])
660 fi
661fi
662AM_CONDITIONAL([GIT_VERSION], [test "x$with_pkg_git_version" = "xyes"])
0be793e6 663
6f0e3f6e
PJ
664dnl ------------------------------------
665dnl Check C keywords and standard types
666dnl ------------------------------------
667AC_C_CONST
668AC_C_INLINE
6f0e3f6e 669AC_C_VOLATILE
dc7a2bf1 670AC_HEADER_STDC
6f0e3f6e
PJ
671dnl AC_TYPE_PID_T
672AC_TYPE_UID_T
673AC_TYPE_MODE_T
674AC_TYPE_SIZE_T
6f0e3f6e 675AC_STRUCT_TM
dc7a2bf1 676
6f0e3f6e
PJ
677dnl -------------------------
678dnl Check other header files.
679dnl -------------------------
24f5e2fc
DL
680AC_CHECK_HEADERS([stropts.h sys/ksym.h \
681 linux/version.h asm/types.h \
682 sys/cdefs.h])
6f0e3f6e 683
899a4fd2
DL
684ac_stdatomic_ok=false
685AC_DEFINE(FRR_AUTOCONF_ATOMIC, 1, [did autoconf checks for atomic funcs])
686AC_CHECK_HEADER([stdatomic.h],[
687
688 AC_MSG_CHECKING([whether _Atomic qualifier works])
689 AC_LINK_IFELSE([AC_LANG_SOURCE([[
690#include <stdatomic.h>
691int main(int argc, char **argv) {
692 _Atomic int i = 0;
693 return i;
694}
695]])], [
696 AC_DEFINE(HAVE_STDATOMIC_H, 1, [found stdatomic.h])
697 AC_MSG_RESULT([yes])
698 ac_stdatomic_ok=true
699 ], [
700 AC_MSG_RESULT([no])
701 ])
702])
703
704AS_IF([$ac_stdatomic_ok], [true], [
705 AC_MSG_CHECKING([for __atomic_* builtins])
706 AC_LINK_IFELSE([AC_LANG_SOURCE([[
707int main(int argc, char **argv) {
708 volatile int i = 1;
709 __atomic_store_n (&i, 0, __ATOMIC_RELEASE);
710 return __atomic_load_n (&i, __ATOMIC_ACQUIRE);
711}
712]])], [
713 AC_DEFINE(HAVE___ATOMIC, 1, [found __atomic builtins])
714 AC_MSG_RESULT([yes])
715 ], [
716 AC_MSG_RESULT([no])
717
718 dnl FreeBSD 9 has a broken stdatomic.h where _Atomic doesn't work
719 AC_MSG_CHECKING([for __sync_* builtins])
720 AC_LINK_IFELSE([AC_LANG_SOURCE([[
721int main(int argc, char **argv) {
722 volatile int i = 1;
723 __sync_fetch_and_sub (&i, 1);
724 return __sync_val_compare_and_swap (&i, 0, 1);
725}
726]])], [
727 AC_DEFINE(HAVE___SYNC, 1, [found __sync builtins])
728 AC_MSG_RESULT([yes])
729
730 AC_MSG_CHECKING([for __sync_swap builtin])
731 AC_LINK_IFELSE([AC_LANG_SOURCE([[
732int main(int argc, char **argv) {
733 volatile int i = 1;
734 return __sync_swap (&i, 2);
735}
736]])], [
737 AC_DEFINE(HAVE___SYNC_SWAP, 1, [found __sync_swap builtin])
738 AC_MSG_RESULT([yes])
739 ], [
740 AC_MSG_RESULT([no])
741 ])
742
743 ], [
744 AC_MSG_RESULT([no])
745 AC_MSG_FAILURE([stdatomic.h unavailable and $CC has neither __atomic nor __sync builtins])
746 ])
747 ])
748])
749
6f0e3f6e 750dnl Utility macro to avoid retyping includes all the time
8e4da10b 751m4_define([FRR_INCLUDES],
6f0e3f6e
PJ
752[#ifdef SUNOS_5
753#define _XPG4_2
754#define __EXTENSIONS__
755#endif
756#include <stdio.h>
24f5e2fc
DL
757#include <stdlib.h>
758#include <stddef.h>
759#include <sys/types.h>
6f0e3f6e 760/* sys/conf.h depends on param.h on FBSD at least */
24f5e2fc 761#include <sys/param.h>
6f0e3f6e 762/* Required for MAXSIG */
24f5e2fc
DL
763#include <signal.h>
764#include <sys/socket.h>
ea057677
HT
765#ifdef __APPLE__
766# define __APPLE_USE_RFC_3542
767#endif
24f5e2fc
DL
768#include <netinet/in.h>
769#include <sys/time.h>
770#include <time.h>
771#include <net/if.h>
2b43bf23
DO
772])dnl
773
774dnl Same applies for HAVE_NET_IF_VAR_H, which HAVE_NETINET6_ND6_H and
775dnl HAVE_NETINET_IN_VAR_H depend upon. But if_var.h depends on if.h, hence
776dnl an additional round for it.
777
8e4da10b 778AC_CHECK_HEADERS([net/if_var.h], [], [], FRR_INCLUDES)
2b43bf23 779
8e4da10b
DL
780m4_define([FRR_INCLUDES],
781FRR_INCLUDES
2b43bf23
DO
782[#if HAVE_NET_IF_VAR_H
783# include <net/if_var.h>
784#endif
785])dnl
786
24f5e2fc
DL
787AC_CHECK_HEADERS([netinet/in_var.h \
788 net/if_dl.h net/netopt.h \
789 inet/nd.h netinet/ip_icmp.h \
6f0e3f6e 790 sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
8e4da10b 791 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
792
793AC_CHECK_HEADERS([ucontext.h], [], [],
794[#ifndef __USE_GNU
795#define __USE_GNU
796#endif /* __USE_GNU */
8e4da10b 797FRR_INCLUDES
6f0e3f6e
PJ
798])
799
bccbd141
JT
800m4_define([UCONTEXT_INCLUDES],
801[#include <ucontext.h>])dnl
802
803AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.uc_regs],
804 [], [], [UCONTEXT_INCLUDES])
805AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs],
806 [AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.regs.nip],
807 [], [], [UCONTEXT_INCLUDES])],
808 [], [UCONTEXT_INCLUDES])
809AC_CHECK_MEMBERS([ucontext_t.uc_mcontext.gregs],
810 [], [], [UCONTEXT_INCLUDES])
811
8e4da10b
DL
812m4_define([FRR_INCLUDES],
813FRR_INCLUDES
24f5e2fc
DL
814[
815#include <sys/un.h>
816#include <netinet/in_systm.h>
6f0e3f6e
PJ
817#if HAVE_NETINET_IN_VAR_H
818# include <netinet/in_var.h>
819#endif
820#if HAVE_NET_IF_DL_H
821# include <net/if_dl.h>
822#endif
6f0e3f6e
PJ
823#if HAVE_NET_NETOPT_H
824# include <net/netopt.h>
825#endif
24f5e2fc 826#include <net/route.h>
6f0e3f6e
PJ
827#if HAVE_INET_ND_H
828# include <inet/nd.h>
829#endif
24f5e2fc 830#include <arpa/inet.h>
11770e10
PJ
831/* Required for IDRP */
832#if HAVE_NETINET_IP_ICMP_H
833# include <netinet/ip_icmp.h>
834#endif
6f0e3f6e 835])dnl
dc7a2bf1 836
fa3232e1 837dnl V6 headers are checked below, after we check for v6
7ea487bc 838
ddfeb486
DL
839AC_MSG_CHECKING([which operating system interface to use])
840case "$host_os" in
841 sunos* | solaris2*)
842 AC_MSG_RESULT([Solaris])
843
844 AC_DEFINE(SUNOS_5, 1, [SunOS 5])
845 AC_DEFINE(SOLARIS_IPV6, 1, Solaris IPv6)
846
847 AC_CHECK_LIB(socket, main)
848 AC_CHECK_LIB(nsl, main)
849 AC_CHECK_LIB(umem, main)
850 AC_CHECK_FUNCS([printstack], [
851 AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
852 AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
853 ])
854 CURSES=-lcurses
855 SOLARIS="solaris"
856 ;;
857 linux*)
858 AC_MSG_RESULT([Linux])
859
860 AC_DEFINE(GNU_LINUX,,GNU Linux)
861 AC_DEFINE(HAVE_NETLINK,,netlink)
862 AC_DEFINE(LINUX_IPV6,1,Linux IPv6 stack)
863
864 dnl Linux has a compilation problem with mixing
865 dnl netinet/in.h and linux/in6.h they are not
866 dnl compatible. There has been discussion on
867 dnl how to fix it but no real progress on implementation
868 dnl when they fix it, remove this
869 AC_DEFINE(IPV6_MINHOPCOUNT, 73, Linux ipv6 Min Hop Count)
870
871 AC_CHECK_DECLS([IFLA_INFO_SLAVE_KIND], [], [], [#include <linux/if_link.h>])
872 ;;
873 openbsd*)
874 AC_MSG_RESULT([OpenBSD])
875
876 AC_DEFINE(OPEN_BSD,,OpenBSD)
877 AC_DEFINE(KAME,1,KAME IPv6)
004174c7
JAG
878
879 if test "x${enable_pimd}" != "xno"; then
880 case "$host_os" in
881 openbsd6.0)
882 ;;
883 openbsd[6-9]*)
884 AC_MSG_FAILURE([pimd cannot be enabled as PIM support has been removed from OpenBSD 6.1])
885 ;;
886 esac
887 fi
ddfeb486
DL
888 ;;
889 *)
890 AC_MSG_RESULT([BSD])
891
892 AC_DEFINE(HAVE_NET_RT_IFLIST,,NET_RT_IFLIST)
893 AC_DEFINE(KAME,1,KAME IPv6)
894 ;;
7ea487bc 895esac
0fb07d51 896AM_CONDITIONAL(SOLARIS, test "${SOLARIS}" = "solaris")
7ea487bc 897
62c9f504
PJ
898AC_SYS_LARGEFILE
899
7ea487bc 900dnl ---------------------
901dnl Integrated VTY option
902dnl ---------------------
903case "${enable_vtysh}" in
f0646db0
DS
904 "no") VTYSH="";;
905 *) VTYSH="vtysh";
7ea487bc 906 AC_DEFINE(VTYSH,,VTY shell)
fc9d0745 907dnl Vtysh uses libreadline, which looks for termcap functions at
6f0e3f6e 908dnl configure time. We follow readlines search order.
fc9d0745 909dnl The required procedures are in libtermcap on NetBSD, in
910dnl [TODO] on Linux, and in [TODO] on Solaris.
c0689394 911 AC_CHECK_LIB(termcap, tputs, LIBREADLINE="$LIBREADLINE -ltermcap",
a969459c 912 [AC_CHECK_LIB(tinfo, tputs, LIBREADLINE="$LIBREADLINE -ltinfo",
913 [AC_CHECK_LIB(curses, tputs, LIBREADLINE="$LIBREADLINE -lcurses",
914 [AC_CHECK_LIB(ncurses, tputs,
915 LIBREADLINE="$LIBREADLINE -lncurses")]
916 )]
917 )]
918 )
4c2f8e95 919 AC_CHECK_LIB(readline, main, LIBREADLINE="-lreadline $LIBREADLINE",,
a969459c 920 "$LIBREADLINE")
7ea487bc 921 if test $ac_cv_lib_readline_main = no; then
fc9d0745 922 AC_MSG_ERROR([vtysh needs libreadline but was not found and usable on your system.])
7ea487bc 923 fi
924 AC_CHECK_HEADER(readline/history.h)
925 if test $ac_cv_header_readline_history_h = no;then
926 AC_MSG_ERROR([readline is too old to have readline/history.h, please update to the latest readline library.])
927 fi
a969459c 928 AC_CHECK_LIB(readline, rl_completion_matches,
929 LIBREADLINE="$LIBREADLINE",, "$LIBREADLINE")
3d3de8c4 930 if test $ac_cv_lib_readline_rl_completion_matches = no; then
931 AC_DEFINE(rl_completion_matches,completion_matches,Old readline)
932 fi
933 ;;
7ea487bc 934esac
c0689394 935AC_SUBST(LIBREADLINE)
f027d331 936AM_CONDITIONAL(VTYSH, test "x$VTYSH" = "xvtysh")
7ea487bc 937
938dnl ----------
939dnl PAM module
6159928d 940dnl
1689cf7e 941dnl FRR detects the PAM library it is built against by checking for a
6159928d
DO
942dnl functional pam_misc.h (Linux-PAM) or openpam.h (OpenPAM) header. pam_misc.h
943dnl is known to #include pam_appl.h, the standard header of a PAM library, and
944dnl openpam.h doesn't do that, although depends on the header too. Hence a
945dnl little assistance to AC_CHECK_HEADER is necessary for the proper detection
946dnl of OpenPAM.
7ea487bc 947dnl ----------
24cd435b 948if test "$with_libpam" = "yes"; then
6f0e3f6e
PJ
949 AC_CHECK_HEADER([security/pam_misc.h],
950 [AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
951 AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
952 pam_conv_func="misc_conv"
953 ],
8e4da10b 954 [], FRR_INCLUDES)
6f0e3f6e
PJ
955 AC_CHECK_HEADER([security/openpam.h],
956 [AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
957 AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
958 pam_conv_func="openpam_ttyconv"
959 ],
8e4da10b 960 [], FRR_INCLUDES[#include <security/pam_appl.h>])
24cd435b 961 if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
962 AC_MSG_WARN([*** pam support will not be built ***])
963 with_libpam="no"
964 fi
965fi
966
7ea487bc 967if test "$with_libpam" = "yes"; then
6f0e3f6e 968dnl took this test from proftpds configure.in and suited to our needs
7ea487bc 969dnl -------------------------------------------------------------------------
970dnl
971dnl This next check looks funky due to a linker problem with some versions
972dnl of the PAM library. Prior to 0.72 release, the Linux PAM shared library
973dnl omitted requiring libdl linking information. PAM-0.72 or better ships
974dnl with RedHat 6.2 and Debian 2.2 or better.
975AC_CHECK_LIB(pam, pam_start,
24cd435b 976 [AC_CHECK_LIB(pam, $pam_conv_func,
7ea487bc 977 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
978 LIBPAM="-lpam"],
979 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
980 LIBPAM="-lpam -lpam_misc"]
981 )
982 ],
983
984 [AC_CHECK_LIB(pam, pam_end,
24cd435b 985 [AC_CHECK_LIB(pam, $pam_conv_func,
a159ed93 986 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 987 LIBPAM="-lpam -ldl"],
a159ed93 988 [AC_DEFINE(USE_PAM,,Use PAM for authentication)
7ea487bc 989 LIBPAM="-lpam -ldl -lpam_misc"]
990 )
991 ],AC_MSG_WARN([*** pam support will not be built ***]),
992 [-ldl])
993 ]
994)
995fi
996AC_SUBST(LIBPAM)
997
998dnl -------------------------------
999dnl Endian-ness check
1000dnl -------------------------------
1001AC_WORDS_BIGENDIAN
1002
1003dnl -------------------------------
1004dnl check the size in byte of the C
1005dnl -------------------------------
1006dnl AC_CHECK_SIZEOF(char)
1007dnl AC_CHECK_SIZEOF(int)
1008dnl AC_CHECK_SIZEOF(short)
1009dnl AC_CHECK_SIZEOF(long)
1010
1011dnl ----------------------------
1012dnl check existance of functions
1013dnl ----------------------------
6f0e3f6e
PJ
1014AC_FUNC_FNMATCH
1015AC_FUNC_FORK
6f0e3f6e 1016AC_FUNC_MKTIME
6f0e3f6e 1017AC_FUNC_STAT
6f0e3f6e
PJ
1018
1019dnl -------------------------------
1020dnl bgpd needs pow() and hence libm
1021dnl -------------------------------
1022TMPLIBS="$LIBS"
1023AC_CHECK_HEADER([math.h],
1024 [AC_CHECK_LIB([m], [pow],
1025 [LIBM="-lm"
1026 LIBS="$LIBS $LIBM"
6f0e3f6e
PJ
1027 AC_CHECK_FUNCS(pow,[],[LIBM=""])
1028 ])
1029])
1030if test x"$LIBM" = x ; then
1031 AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
1032fi
1033LIBS="$TMPLIBS"
1034AC_SUBST(LIBM)
1035
154b9e8f
DL
1036AC_CHECK_FUNCS([ppoll], [
1037 AC_DEFINE([HAVE_PPOLL], 1, [have Linux/BSD ppoll()])
1038])
1039AC_CHECK_FUNCS([pollts], [
1040 AC_DEFINE([HAVE_POLLTS], 1, [have NetBSD pollts()])
1041])
1042
6f0e3f6e
PJ
1043dnl ---------------
1044dnl other functions
1045dnl ---------------
24f5e2fc
DL
1046AC_CHECK_FUNCS([ \
1047 strlcat strlcpy \
316d0ae5 1048 getgrouplist])
6f0e3f6e 1049
13460c44
FL
1050AC_CHECK_HEADER([asm-generic/unistd.h],
1051 [AC_CHECK_DECL(__NR_setns,
1052 AC_DEFINE(HAVE_NETNS,, Have netns),,
8e4da10b 1053 FRR_INCLUDES [#include <asm-generic/unistd.h>
13460c44 1054 ])
428cd73f 1055 AC_CHECK_FUNCS(setns)]
13460c44
FL
1056 )
1057
238497fc
PJ
1058dnl --------------------------
1059dnl Determine IS-IS I/O method
1060dnl --------------------------
745bf05f
DL
1061AC_DEFINE(ISIS_METHOD_PFPACKET, 1, [ constant value for isis method pfpacket ])
1062AC_DEFINE(ISIS_METHOD_DLPI, 2, [ constant value for isis method dlpi ])
1063AC_DEFINE(ISIS_METHOD_BPF, 3, [ constant value for isis method bpf ])
238497fc
PJ
1064AC_CHECK_HEADER(net/bpf.h)
1065AC_CHECK_HEADER(sys/dlpi.h)
1066AC_MSG_CHECKING(zebra IS-IS I/O method)
ddfeb486
DL
1067
1068case "$host_os" in
1069 linux*)
1070 AC_MSG_RESULT(pfpacket)
1071 ISIS_METHOD_MACRO="ISIS_METHOD_PFPACKET"
1072 ;;
1073 solaris* | sunos*)
1074 AC_MSG_RESULT(DLPI)
1075 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
1076 ;;
1077 *)
1078 if test $ac_cv_header_net_bpf_h = no; then
1079 if test $ac_cv_header_sys_dlpi_h = no; then
1080 AC_MSG_RESULT(none)
86e463cf
DL
1081 if test "${enable_isisd}" = yes; then
1082 AC_MSG_FAILURE([IS-IS support requested but no packet backend found])
1083 fi
ddfeb486 1084 AC_MSG_WARN([*** IS-IS support will not be built ***])
86e463cf 1085 enable_isisd="no"
ddfeb486
DL
1086 else
1087 AC_MSG_RESULT(DLPI)
1088 fi
1089 ISIS_METHOD_MACRO="ISIS_METHOD_DLPI"
238497fc 1090 else
ddfeb486
DL
1091 AC_MSG_RESULT(BPF)
1092 ISIS_METHOD_MACRO="ISIS_METHOD_BPF"
238497fc 1093 fi
ddfeb486
DL
1094 ;;
1095esac
745bf05f 1096AC_DEFINE_UNQUOTED(ISIS_METHOD, $ISIS_METHOD_MACRO, [ selected method for isis, == one of the constants ])
238497fc 1097
b99760ab 1098dnl ------------------------------------
1099dnl check for broken CMSG_FIRSTHDR macro
1100dnl ------------------------------------
6c20046f 1101AC_MSG_CHECKING(for broken CMSG_FIRSTHDR)
5b087528 1102AC_RUN_IFELSE([AC_LANG_SOURCE([[
b99760ab 1103#ifdef SUNOS_5
1104#define _XPG4_2
1105#define __EXTENSIONS__
1106#endif
24f5e2fc 1107#include <stdlib.h>
b99760ab 1108#include <sys/types.h>
1109#include <sys/socket.h>
1110
1111main()
1112{
1113 struct msghdr msg;
1114 char buf[4];
1115
1116 msg.msg_control = buf;
1117 msg.msg_controllen = 0;
1118
1119 if (CMSG_FIRSTHDR(&msg) != NULL)
1120 exit(0);
1121 exit (1);
5b087528 1122}]])],[AC_MSG_RESULT(yes - using workaround) AC_DEFINE(HAVE_BROKEN_CMSG_FIRSTHDR,,Broken CMSG_FIRSTHDR)],
d33e8d7b 1123[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
b99760ab 1124
42c98199 1125dnl ---------------------------------------------------------------
1126dnl figure out how to specify an interface in multicast sockets API
1127dnl ---------------------------------------------------------------
8e4da10b 1128AC_CHECK_MEMBERS([struct ip_mreqn.imr_ifindex], [], [], FRR_INCLUDES)
42c98199 1129
b3f2bf7c 1130AC_CHECK_HEADERS([linux/mroute.h], [], [],[
24f5e2fc
DL
1131 #include <sys/socket.h>
1132 #include <netinet/in.h>
b3f2bf7c
RW
1133 #define _LINUX_IN_H /* For Linux <= 2.6.25 */
1134 #include <linux/types.h>
1135])
1136
8e4da10b
DL
1137m4_define([FRR_INCLUDES],
1138FRR_INCLUDES
b3f2bf7c
RW
1139[#if HAVE_LINUX_MROUTE_H
1140# include <linux/mroute.h>
1141#endif
1142])dnl
1143
1144AC_CHECK_HEADERS([netinet/ip_mroute.h], [], [],[
24f5e2fc
DL
1145 #include <sys/socket.h>
1146 #include <sys/types.h>
1147 #include <netinet/in.h>
1148 #include <net/route.h>
b3f2bf7c
RW
1149])
1150
8e4da10b
DL
1151m4_define([FRR_INCLUDES],
1152FRR_INCLUDES
b3f2bf7c
RW
1153[#if HAVE_NETINET_IP_MROUTE_H
1154# include <netinet/ip_mroute.h>
1155#endif
1156])dnl
1157
42c98199 1158AC_MSG_CHECKING([for BSD struct ip_mreq hack])
24f5e2fc
DL
1159AC_TRY_COMPILE([#include <sys/param.h>],
1160[#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)
42c98199 1161 return (0);
1162#else
1163 #error No support for BSD struct ip_mreq hack detected
1164#endif],[AC_MSG_RESULT(yes)
1165AC_DEFINE(HAVE_BSD_STRUCT_IP_MREQ_HACK,,[Can pass ifindex in struct ip_mreq])],
1166AC_MSG_RESULT(no))
1167
10d04cdb
DT
1168AC_MSG_CHECKING([for RFC3678 protocol-independed API])
1169AC_TRY_COMPILE([
1170#include <sys/types.h>
1171#include <netinet/in.h>
1172], [struct group_req gr; int sock; setsockopt(sock, IPPROTO_IP, MCAST_JOIN_GROUP, (void*)&gr, sizeof(gr));
1173], [AC_MSG_RESULT(yes)
1174AC_DEFINE(HAVE_RFC3678,1,[Have RFC3678 protocol-independed API])],
1175AC_MSG_RESULT(no))
1176
c543a173
AS
1177dnl ---------------------------------------------------------------
1178dnl figure out how to check link-state
1179dnl ---------------------------------------------------------------
24f5e2fc
DL
1180AC_CHECK_HEADER( [net/if_media.h],
1181 [m4_define([LINK_DETECT_INCLUDES],
8e4da10b 1182 FRR_INCLUDES
24f5e2fc
DL
1183 [#include <net/if_media.h>
1184 ])
1185 AC_CHECK_MEMBERS( [struct ifmediareq.ifm_status],
1186 AC_DEFINE(HAVE_BSD_LINK_DETECT,,[BSD link-detect]),
1187 [], LINK_DETECT_INCLUDES)],
1188 [],
8e4da10b 1189 FRR_INCLUDES)
c543a173 1190
9234b382
DV
1191dnl ---------------------------------------------------------------
1192dnl Additional, newer way to check link-state using ifi_link_state.
1193dnl Not available in all BSD's when ifmediareq available
1194dnl ---------------------------------------------------------------
24f5e2fc
DL
1195AC_CHECK_MEMBERS([struct if_data.ifi_link_state],
1196 AC_DEFINE(HAVE_BSD_IFI_LINK_STATE,,[BSD ifi_link_state available]),
8e4da10b 1197 [], FRR_INCLUDES)
9234b382 1198
0df7c91f
PJ
1199dnl ------------------------
1200dnl TCP_MD5SIG socket option
1201dnl ------------------------
1202
1203AC_CHECK_HEADER([netinet/tcp.h],
1204 [m4_define([MD5_INCLUDES],
8e4da10b 1205 FRR_INCLUDES
0df7c91f
PJ
1206 [#include <netinet/tcp.h>
1207 ])
1208 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)],
1209 [],
8e4da10b 1210 FRR_INCLUDES)
0df7c91f
PJ
1211if test $ac_cv_have_decl_TCP_MD5SIG = no; then
1212 AC_CHECK_HEADER([linux/tcp.h],
1213 [m4_define([MD5_INCLUDES],
8e4da10b 1214 FRR_INCLUDES
0df7c91f
PJ
1215 [#include <linux/tcp.h>
1216 ])
1217 AC_CHECK_DECLS([TCP_MD5SIG], [], [], MD5_INCLUDES)])
1218fi
1219
60060acc
RW
1220dnl ----------------------------------------------------------------------------
1221dnl figure out if domainname is available in the utsname struct (GNU extension).
1222dnl ----------------------------------------------------------------------------
1223AC_CHECK_MEMBERS([struct utsname.domainname], [], [], [#include <sys/utsname.h>])
1224
fa3232e1 1225dnl ------------------
1226dnl IPv6 header checks
1227dnl ------------------
24f5e2fc 1228AC_CHECK_HEADERS([netinet6/in6.h netinet/in6_var.h \
6f0e3f6e 1229 netinet6/in6_var.h netinet6/nd6.h], [], [],
8e4da10b 1230 FRR_INCLUDES)
fa3232e1 1231
8e4da10b
DL
1232m4_define([FRR_INCLUDES],dnl
1233FRR_INCLUDES
6f0e3f6e
PJ
1234[#if HAVE_NETINET6_IN6_H
1235#include <netinet6/in6.h>
1236#endif
1237#if HAVE_NETINET_IN6_VAR_H
1238#include <netinet/in6_var.h>
1239#endif
24f5e2fc 1240#include <netinet/icmp6.h>
6f0e3f6e
PJ
1241#if HAVE_NETINET6_IN6_VAR_H
1242# include <netinet6/in6_var.h>
1243#endif
1244#if HAVE_NETINET6_ND6_H
fbf24544 1245# include <netinet6/nd6.h>
6f0e3f6e
PJ
1246#endif
1247])dnl
1248
cbcd9bfc
JT
1249dnl disable doc check
1250if test "${enable_doc}" = "no";then
1251 DOC=""
1252else
1253 DOC="doc"
1254fi
1255
7ea487bc 1256dnl --------------------
1257dnl Daemon disable check
1258dnl --------------------
64d44794 1259AM_CONDITIONAL(ZEBRA, test "${enable_zebra}" != "no")
7ea487bc 1260
1261if test "${enable_bgpd}" = "no";then
1262 BGPD=""
1263else
1264 BGPD="bgpd"
1265fi
f027d331 1266AM_CONDITIONAL(BGPD, test "x$BGPD" = "xbgpd")
7ea487bc 1267
7f269117 1268AM_CONDITIONAL(RIPD, test "${enable_ripd}" != "no")
afca0690 1269AM_CONDITIONAL(OSPFD, test "${enable_ospfd}" != "no")
30237d29 1270AM_CONDITIONAL(LDPD, test "${enable_ldpd}" != "no")
7ea487bc 1271
30237d29 1272AS_IF([test "${enable_ldpd}" != "no"], [
87ab4aec 1273 AC_DEFINE(HAVE_LDPD, 1, ldpd)
30237d29 1274])
eac6e3f0 1275
42350cfc 1276NHRPD=""
ddfeb486
DL
1277case "$host_os" in
1278 linux*)
1279 if test "${enable_nhrpd}" != "no"; then
1280 NHRPD="nhrpd"
1281 fi
1282 ;;
1283 *)
1284 if test "${enable_nhrpd}" = "yes"; then
1285 AC_MSG_ERROR([nhrpd requires kernel APIs that are only present on Linux.])
1286 fi
1287 ;;
1288esac
2fb975da
TT
1289AM_CONDITIONAL(NHRPD, test "x$NHRPD" = "xnhrpd")
1290
b6f5781c 1291AM_CONDITIONAL(EIGRPD, test "${enable_eigrpd}" != "no")
7f57883e 1292
9473e340
DS
1293if test "${enable_watchfrr}" = "no";then
1294 WATCHFRR=""
d0199430 1295else
9473e340 1296 WATCHFRR="watchfrr"
d0199430 1297fi
9473e340 1298AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
d0199430 1299
1ef74ef7 1300OSPFCLIENT=""
cd66cd4c 1301if test "${enable_ospfapi}" != "no";then
9a569848 1302 AC_DEFINE(SUPPORT_OSPF_API,,OSPFAPI)
1ef74ef7 1303
cd66cd4c 1304 if test "${enable_ospfclient}" != "no";then
1ef74ef7 1305 OSPFCLIENT="ospfclient"
1ef74ef7 1306 fi
7ea487bc 1307fi
cd66cd4c 1308
f027d331 1309AM_CONDITIONAL(OSPFCLIENT, test "x$OSPFCLIENT" = "xospfclient")
7f269117 1310AM_CONDITIONAL(RIPNGD, test "${enable_ripngd}" != "no")
b6f5781c 1311AM_CONDITIONAL(BABELD, test "${enable_babeld}" != "no")
afca0690 1312AM_CONDITIONAL(OSPF6D, test "${enable_ospf6d}" != "no")
86e463cf 1313AM_CONDITIONAL(ISISD, test "${enable_isisd}" != "no")
35a3c3c1 1314AM_CONDITIONAL(PIMD, test "${enable_pimd}" != "no")
12e41d03 1315
7ea487bc 1316if test "${enable_bgp_announce}" = "no";then
750e8146
PJ
1317 AC_DEFINE(DISABLE_BGP_ANNOUNCE,1,Disable BGP installation to zebra)
1318else
1319 AC_DEFINE(DISABLE_BGP_ANNOUNCE,0,Disable BGP installation to zebra)
7ea487bc 1320fi
1321
65efcfce
LB
1322if test "${with_rfp_path}" = "yes" || test x"${with_rfp_path}" = x""; then
1323 with_rfp_path="bgpd/rfp-example"
1324fi
1325if test "${with_rfp_path}" != "no"; then
1326 VNC_RFP_PATH="${with_rfp_path}"
1327 AC_SUBST(VNC_RFP_PATH)
1328fi
1329
f95f2ad9 1330if test "${enable_bgp_vnc}" != "no";then
65efcfce
LB
1331 AC_DEFINE(ENABLE_BGP_VNC,1,Enable BGP VNC support)
1332 RFPTEST="${with_rfp_path}/rfptest"
1333 LIBRFP="${with_rfp_path}/librfp"
1334 RFPINC="${with_rfp_path}/librfp"
1335else
1336 RFPTEST=
1337 LIBRFP=
1338 RFPINC="bgpd/rfp-example/librfp"
1339fi
1340# set
f95f2ad9 1341AM_CONDITIONAL([ENABLE_BGP_VNC], [test x${enable_bgp_vnc} != xno])
65efcfce 1342
cbcd9bfc 1343AC_SUBST(DOC)
65efcfce
LB
1344AC_SUBST(RFPTEST)
1345AC_SUBST(LIBRFP)
1346AC_SUBST(RFPINC)
7ea487bc 1347AC_SUBST(BGPD)
97cee877 1348AC_SUBST(SOLARIS)
7ea487bc 1349AC_SUBST(VTYSH)
7ea487bc 1350AC_SUBST(CURSES)
f9e75524
JAG
1351AC_CHECK_LIB(crypt, crypt, [],
1352 [AC_CHECK_LIB(crypto, DES_crypt)])
7ea487bc 1353AC_CHECK_LIB(resolv, res_init)
7ea487bc 1354
25f45887
JJ
1355dnl ---------------------------
1356dnl check system has PCRE regexp
1357dnl ---------------------------
1358if test "x$enable_pcreposix" = "xyes"; then
ad9a0825
DL
1359 AC_CHECK_LIB(pcreposix, regexec, [], [
1360 AC_MSG_ERROR([--enable-pcreposix given but unable to find libpcreposix])
1361 ])
25f45887 1362fi
25f45887 1363AC_SUBST(HAVE_LIBPCREPOSIX)
7ea487bc 1364
2fb975da
TT
1365dnl ------------------
1366dnl check C-Ares library
1367dnl ------------------
42350cfc 1368if test "${NHRPD}" != ""; then
92e50261
DL
1369 PKG_CHECK_MODULES([CARES], [libcares], , [
1370 AC_MSG_ERROR([trying to build nhrpd, but libcares not found. install c-ares and its -dev headers.])
1371 ])
2fb975da
TT
1372fi
1373
1374
7ea487bc 1375dnl ------------------
b1fc9acb 1376dnl check Net-SNMP library
7ea487bc 1377dnl ------------------
53b99735 1378if test "${enable_snmp}" != "" -a "${enable_snmp}" != "no"; then
08d7f653
VB
1379 AC_PATH_TOOL([NETSNMP_CONFIG], [net-snmp-config], [no])
1380 if test x"$NETSNMP_CONFIG" = x"no"; then
1381 AC_MSG_ERROR([--enable-snmp given but unable to find net-snmp-config])
1382 fi
46081234
DL
1383 SNMP_LIBS="`${NETSNMP_CONFIG} --agent-libs`"
1384 SNMP_CFLAGS="`${NETSNMP_CONFIG} --base-cflags`"
08d7f653 1385 AC_MSG_CHECKING([whether we can link to Net-SNMP])
92e50261 1386 AC_LINK_IFELSE_FLAGS([$SNMP_CFLAGS], [$SNMP_LIBS], [AC_LANG_PROGRAM([
08d7f653
VB
1387int main(void);
1388],
1389[
1390{
1391 return 0;
1392}
92e50261 1393])], [
08d7f653 1394 AC_MSG_ERROR([--enable-snmp given but not usable])])
d6be5fb9
VB
1395 case "${enable_snmp}" in
1396 yes)
1397 SNMP_METHOD=agentx
1398 ;;
1399 smux|agentx)
1400 SNMP_METHOD="${enable_snmp}"
1401 ;;
1402 *)
1403 AC_MSG_ERROR([--enable-snmp given with an unknown method (${enable_snmp}). Use smux or agentx])
1404 ;;
1405 esac
1406 AH_TEMPLATE([SNMP_SMUX], [Use SNMP SMUX to interface with snmpd])
1407 AH_TEMPLATE([SNMP_AGENTX], [Use SNMP AgentX to interface with snmpd])
1408 AC_DEFINE_UNQUOTED(AS_TR_CPP(SNMP_${SNMP_METHOD}),,SNMP method to interface with snmpd)
6cf9df08 1409fi
46081234
DL
1410AM_CONDITIONAL([SNMP], [test "x${SNMP_METHOD}" != "x"])
1411AC_SUBST(SNMP_LIBS)
1412AC_SUBST(SNMP_CFLAGS)
6cf9df08 1413
4db0cff1
QY
1414dnl ---------------
1415dnl math
1416dnl ---------------
1417AC_SEARCH_LIBS([sqrt], [m])
1418
b249c083
DL
1419dnl ---------------
1420dnl dlopen & dlinfo
1421dnl ---------------
30771d65
DL
1422AC_SEARCH_LIBS(dlopen, [dl dld], [], [
1423 AC_MSG_ERROR([unable to find the dlopen()])
1424])
1425
b249c083
DL
1426AC_CHECK_HEADERS([link.h])
1427
1428AC_MSG_CHECKING([for dlinfo(RTLD_DI_ORIGIN)])
1429AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1430#include <stdlib.h>
1431#ifdef HAVE_LINK_H
1432#include <link.h>
1433#endif
1434#include <dlfcn.h>
1435]], [[
1436 char origin[1];
1437 dlinfo (NULL, RTLD_DI_ORIGIN, &origin);
1438]])], [
1439 AC_MSG_RESULT(yes)
1440 AC_DEFINE(HAVE_DLINFO_ORIGIN, 1, [Have dlinfo RTLD_DI_ORIGIN])
1441], [
1442 AC_MSG_RESULT(no)
1443])
1444
1445AC_MSG_CHECKING([for dlinfo(RTLD_DI_LINKMAP)])
1446AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1447#include <stdlib.h>
1448#ifdef HAVE_LINK_H
1449#include <link.h>
1450#endif
1451#include <dlfcn.h>
1452]], [[
1453 struct link_map *lm = NULL;
1454 dlinfo (NULL, RTLD_DI_LINKMAP, &lm);
1455]])], [
1456 AC_MSG_RESULT(yes)
1457 AC_DEFINE(HAVE_DLINFO_LINKMAP, 1, [Have dlinfo RTLD_DI_LINKMAP])
1458], [
1459 AC_MSG_RESULT(no)
1460])
1461
6cf9df08 1462
62ff928b
DS
1463AM_CONDITIONAL(SNMP, test "x$SNMP_METHOD" = "xagentx")
1464
7ea487bc 1465dnl ---------------------------
6f0e3f6e 1466dnl sockaddr and netinet checks
7ea487bc 1467dnl ---------------------------
24f5e2fc
DL
1468AC_CHECK_TYPES([
1469 struct sockaddr_dl,
1470 struct vifctl, struct mfcctl, struct sioc_sg_req,
12e41d03 1471 vifi_t, struct sioc_vif_req, struct igmpmsg,
6f0e3f6e
PJ
1472 struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1473 struct nd_opt_adv_interval, struct rt_addrinfo,
11770e10 1474 struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
8e4da10b 1475 [], [], FRR_INCLUDES)
6f0e3f6e
PJ
1476
1477AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1478 struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
ca3ccd87 1479 struct sockaddr_dl.sdl_len,
6f0e3f6e
PJ
1480 struct if6_aliasreq.ifra_lifetime,
1481 struct nd_opt_adv_interval.nd_opt_ai_type],
8e4da10b 1482 [], [], FRR_INCLUDES)
29c4c9bd 1483
6f0e3f6e 1484dnl ---------------------------
11770e10 1485dnl IRDP/pktinfo/icmphdr checks
6f0e3f6e 1486dnl ---------------------------
8dc1f7fc
DL
1487
1488AC_CHECK_TYPES([struct in_pktinfo], [
1489 AC_CHECK_TYPES([struct icmphdr], [
1490 IRDP=true
1491 ], [
1492 IRDP=false
1493 ], [FRR_INCLUDES])
1494], [
1495 IRDP=false
1496], [FRR_INCLUDES])
1497
1498case "${enable_irdp}" in
1499yes)
1500 $IRDP || AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1501 ;;
1502no)
1503 IRDP=false
1504 ;;
1505esac
1506
1507AM_CONDITIONAL(IRDP, $IRDP)
29c4c9bd 1508
12e41d03
DL
1509dnl -----------------------
1510dnl checking for IP_PKTINFO
1511dnl -----------------------
1512AC_MSG_CHECKING(for IP_PKTINFO)
1513AC_TRY_COMPILE([#include <netdb.h>], [
1514 int opt = IP_PKTINFO;
1515], [
1516 AC_MSG_RESULT(yes)
1517 AC_DEFINE(HAVE_IP_PKTINFO, 1, [Have IP_PKTINFO])
1518], [
1519 AC_MSG_RESULT(no)
1520])
1521
1522dnl ---------------------------
1523dnl checking for IP_RECVDSTADDR
1524dnl ---------------------------
1525AC_MSG_CHECKING(for IP_RECVDSTADDR)
1526AC_TRY_COMPILE([#include <netinet/in.h>], [
1527 int opt = IP_RECVDSTADDR;
1528], [
1529 AC_MSG_RESULT(yes)
1530 AC_DEFINE(HAVE_IP_RECVDSTADDR, 1, [Have IP_RECVDSTADDR])
1531], [
1532 AC_MSG_RESULT(no)
1533])
1534
1535dnl ----------------------
1536dnl checking for IP_RECVIF
1537dnl ----------------------
1538AC_MSG_CHECKING(for IP_RECVIF)
1539AC_TRY_COMPILE([#include <netinet/in.h>], [
1540 int opt = IP_RECVIF;
1541], [
1542 AC_MSG_RESULT(yes)
1543 AC_DEFINE(HAVE_IP_RECVIF, 1, [Have IP_RECVIF])
1544], [
1545 AC_MSG_RESULT(no)
1546])
1547
eac6e3f0
RW
1548dnl ----------------------
1549dnl checking for SO_BINDANY
1550dnl ----------------------
1551AC_MSG_CHECKING(for SO_BINDANY)
1552AC_TRY_COMPILE([#include <sys/socket.h>], [
1553 int opt = SO_BINDANY;
1554], [
1555 AC_MSG_RESULT(yes)
1556 AC_DEFINE(HAVE_SO_BINDANY, 1, [Have SO_BINDANY])
1557], [
1558 AC_MSG_RESULT(no)
1559])
1560
1561dnl ----------------------
1562dnl checking for IP_FREEBIND
1563dnl ----------------------
1564AC_MSG_CHECKING(for IP_FREEBIND)
1565AC_TRY_COMPILE([#include <netinet/in.h>], [
1566 int opt = IP_FREEBIND;
1567], [
1568 AC_MSG_RESULT(yes)
1569 AC_DEFINE(HAVE_IP_FREEBIND, 1, [Have IP_FREEBIND])
1570], [
1571 AC_MSG_RESULT(no)
1572])
1573
ba0cb3fe
DS
1574dnl --------------------------------------
1575dnl checking for be32dec existence or not
1576dnl --------------------------------------
1577AC_CHECK_DECLS([be32enc, be32dec], [], [],
1578 [#include <sys/endian.h>])
1579
c4376c9d
SH
1580dnl --------------------------------------
1581dnl checking for clock_time monotonic struct and call
1582dnl --------------------------------------
6511cab2
PJ
1583AC_CHECK_DECL(CLOCK_MONOTONIC,
1584 [AC_CHECK_LIB(rt, clock_gettime, [LIBS="$LIBS -lrt"])
9964fcfc 1585 AC_DEFINE(HAVE_CLOCK_MONOTONIC,, Have monotonic clock)
8e4da10b 1586], [AC_MSG_RESULT(no)], [FRR_INCLUDES])
c4376c9d 1587
bbf5ffa0
QY
1588dnl --------------------------------------
1589dnl checking for flex and bison
1590dnl --------------------------------------
4a06690f 1591
bbf5ffa0 1592AM_PROG_LEX
4a06690f 1593AC_MSG_CHECKING(version of flex)
1689cf7e
JAG
1594frr_ac_flex_version="$(eval $LEX -V | grep flex | head -n 1)"
1595frr_ac_flex_version="${frr_ac_flex_version##* }"
1596AC_MSG_RESULT([$frr_ac_flex_version])
1597AX_COMPARE_VERSION([$frr_ac_flex_version], [lt], [2.5.20], [
4a06690f
DL
1598 LEX="$SHELL $missing_dir/missing flex"
1599 if test -f "${srcdir}/lib/command_lex.c" -a -f "${srcdir}/lib/command_lex.h"; then
1600 AC_MSG_WARN([using pregenerated flex output files])
1601 else
1602 AC_MSG_ERROR([flex failure and pregenerated files not included (probably a git build)])
1603 fi
1604 AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
1605 AC_SUBST([LEXLIB], [''])
1606])
0d37f9f3 1607
bbf5ffa0 1608AC_PROG_YACC
0d37f9f3
DL
1609dnl thanks GNU bison for this b*llshit...
1610AC_MSG_CHECKING(version of bison)
1689cf7e
JAG
1611frr_ac_bison_version="$(eval $YACC -V | grep bison | head -n 1)"
1612frr_ac_bison_version="${frr_ac_bison_version##* }"
1613frr_ac_bison_missing="false"
1614case "x${frr_ac_bison_version}" in
0d37f9f3
DL
1615 x2.7*)
1616 BISON_OPENBRACE='"'
1617 BISON_CLOSEBRACE='"'
05dbb7df 1618 BISON_VERBOSE=''
1689cf7e 1619 AC_MSG_RESULT([$frr_ac_bison_version - 2.7 or older])
0d37f9f3
DL
1620 ;;
1621 x2.*|x1.*)
1689cf7e 1622 AC_MSG_RESULT([$frr_ac_bison_version])
0d37f9f3 1623 AC_MSG_WARN([installed bison is too old. Please install GNU bison 2.7.x or newer.])
1689cf7e 1624 frr_ac_bison_missing="true"
0d37f9f3
DL
1625 ;;
1626 x)
1627 AC_MSG_RESULT([none])
1628 AC_MSG_WARN([could not determine bison version. Please install GNU bison 2.7.x or newer.])
1689cf7e 1629 frr_ac_bison_missing="true"
0d37f9f3
DL
1630 ;;
1631 *)
1632 BISON_OPENBRACE='{'
1633 BISON_CLOSEBRACE='}'
05dbb7df 1634 BISON_VERBOSE='-Dparse.error=verbose'
1689cf7e 1635 AC_MSG_RESULT([$frr_ac_bison_version - 3.0 or newer])
0d37f9f3
DL
1636 ;;
1637esac
1638AC_SUBST(BISON_OPENBRACE)
1639AC_SUBST(BISON_CLOSEBRACE)
05dbb7df 1640AC_SUBST(BISON_VERBOSE)
0d37f9f3 1641
1689cf7e 1642if $frr_ac_bison_missing; then
0d37f9f3
DL
1643 YACC="$SHELL $missing_dir/missing bison -y"
1644 if test -f "${srcdir}/lib/command_parse.c" -a -f "${srcdir}/lib/command_parse.h"; then
1645 AC_MSG_WARN([using pregenerated bison output files])
1646 else
1647 AC_MSG_ERROR([bison failure and pregenerated files not included (probably a git build)])
1648 fi
1649fi
bbf5ffa0 1650
edd7c245 1651dnl -------------------
1652dnl capabilities checks
1653dnl -------------------
41d3fc96 1654if test "${enable_capabilities}" != "no"; then
1655 AC_MSG_CHECKING(whether prctl PR_SET_KEEPCAPS is available)
1656 AC_TRY_COMPILE([#include <sys/prctl.h>],[prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);],
1657 [AC_MSG_RESULT(yes)
1658 AC_DEFINE(HAVE_PR_SET_KEEPCAPS,,prctl)
8e4da10b 1659 frr_ac_keepcaps="yes"],
41d3fc96 1660 AC_MSG_RESULT(no)
edd7c245 1661 )
8e4da10b 1662 if test x"${frr_ac_keepcaps}" = x"yes"; then
41d3fc96 1663 AC_CHECK_HEADERS(sys/capability.h)
1664 fi
1665 if test x"${ac_cv_header_sys_capability_h}" = x"yes"; then
1666 AC_CHECK_LIB(cap, cap_init,
1667 [AC_DEFINE(HAVE_LCAPS,1,Capabilities)
1668 LIBCAP="-lcap"
8e4da10b 1669 frr_ac_lcaps="yes"]
41d3fc96 1670 )
ceacedba 1671 else
1672 AC_CHECK_HEADERS(priv.h,
1673 [AC_MSG_CHECKING(Solaris style privileges are available)
1674 AC_TRY_COMPILE([#include <priv.h>],[getpflags(PRIV_AWARE);],
1675 [AC_MSG_RESULT(yes)
1676 AC_DEFINE(HAVE_SOLARIS_CAPABILITIES,1,getpflags)
8e4da10b 1677 frr_ac_scaps="yes"],
ceacedba 1678 AC_MSG_RESULT(no)
1679 )
1680 ]
1681 )
1682 fi
8e4da10b
DL
1683 if test x"${frr_ac_scaps}" = x"yes" \
1684 -o x"${frr_ac_lcaps}" = x"yes"; then
ceacedba 1685 AC_DEFINE(HAVE_CAPABILITIES,1,capabilities)
41d3fc96 1686 fi
edd7c245 1687fi
1688AC_SUBST(LIBCAP)
1689
fb2d1502 1690dnl ---------------------------
1691dnl check for glibc 'backtrace'
1692dnl ---------------------------
8c99b4c1
DL
1693if test x"${enable_backtrace}" != x"no" ; then
1694 backtrace_ok=no
1695 AC_CHECK_HEADER([execinfo.h], [
1696 AC_SEARCH_LIBS([backtrace], [execinfo], [
1697 AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
1698 AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
1699 backtrace_ok=yes
1700 ],, [-lm])
eda3529e 1701 ])
8c99b4c1
DL
1702
1703 if test x"${enable_backtrace}" = x"yes" -a x"${backtrace_ok}" = x"no"; then
1704 dnl user explicitly requested backtrace but we failed to find support
1705 AC_MSG_FAILURE([failed to find backtrace support])
1706 fi
1707fi
fb2d1502 1708
41be32bf
PJ
1709dnl -----------------------------------------
1710dnl check for malloc mallinfo struct and call
1711dnl this must try and link using LIBS, in
1712dnl order to check no alternative allocator
1713dnl has been specified, which might not provide
1714dnl mallinfo, e.g. such as Umem on Solaris.
1715dnl -----------------------------------------
6f0e3f6e 1716AC_CHECK_HEADER([malloc.h],
41be32bf
PJ
1717 [AC_MSG_CHECKING(whether mallinfo is available)
1718 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <malloc.h>]],
1719 [[struct mallinfo ac_x; ac_x = mallinfo ();]])],
1720 [AC_MSG_RESULT(yes)
1721 AC_DEFINE(HAVE_MALLINFO,,mallinfo)],
1722 AC_MSG_RESULT(no)
1723 )
8e4da10b 1724 ], [], FRR_INCLUDES)
41be32bf 1725
b6116506
DL
1726dnl ------
1727dnl ZeroMQ
1728dnl ------
1729if test "x$enable_zeromq" != "xno"; then
1730 PKG_CHECK_MODULES(ZEROMQ, [libzmq >= 4.0.0], [
1731 AC_DEFINE(HAVE_ZEROMQ, 1, [Enable ZeroMQ support])
1732 ZEROMQ=true
1733 ], [
1734 if test "x$enable_zeromq" = "xyes"; then
1735 AC_MSG_ERROR([configuration specifies --enable-zeromq but libzmq was not found])
1736 fi
1737 ])
1738fi
1739AM_CONDITIONAL([ZEROMQ], test "x$ZEROMQ" = "xtrue")
1740
408ad943 1741dnl ----------
1742dnl configure date
1743dnl ----------
1744CONFDATE=`date '+%Y%m%d'`
1745AC_SUBST(CONFDATE)
1746
7ea487bc 1747dnl ------------------------------
a159ed93 1748dnl set paths for state directory
23bd12c3 1749dnl ------------------------------
e84999d9 1750AC_MSG_CHECKING(directory to use for state file)
23bd12c3 1751if test "${prefix}" = "NONE"; then
b2f36157 1752 frr_statedir_prefix="";
23bd12c3 1753else
b2f36157 1754 frr_statedir_prefix=${prefix}
23bd12c3 1755fi
1756if test "${localstatedir}" = '${prefix}/var'; then
8e4da10b 1757 for FRR_STATE_DIR in ${frr_statedir_prefix}/var/run dnl
b2f36157
DL
1758 ${frr_statedir_prefix}/var/adm dnl
1759 ${frr_statedir_prefix}/etc dnl
a159ed93 1760 /var/run dnl
1761 /var/adm dnl
1762 /etc dnl
1763 /dev/null;
23bd12c3 1764 do
8e4da10b 1765 test -d $FRR_STATE_DIR && break
23bd12c3 1766 done
8e4da10b 1767 frr_statedir=$FRR_STATE_DIR
23bd12c3 1768else
b2f36157 1769 frr_statedir=${localstatedir}
a159ed93 1770fi
b2f36157 1771if test $frr_statedir = "/dev/null"; then
a159ed93 1772 AC_MSG_ERROR('STATE DIRECTORY NOT FOUND! FIX OR SPECIFY --localstatedir!')
1773fi
b2f36157
DL
1774AC_MSG_RESULT(${frr_statedir})
1775AC_SUBST(frr_statedir)
1776
b2f36157 1777AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
b2f36157 1778AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
b2f36157 1779AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
7ea487bc 1780
95c4aff2
DL
1781dnl autoconf does this, but it does it too late...
1782test "x$prefix" = xNONE && prefix=$ac_default_prefix
1783test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
1784
1785dnl get the full path, recursing through variables...
1786vtysh_bin="$bindir/vtysh"
1787for I in 1 2 3 4 5 6 7 8 9 10; do
1788 eval vtysh_bin="\"$vtysh_bin\""
1789done
1790AC_DEFINE_UNQUOTED(VTYSH_BIN_PATH, "$vtysh_bin",path to vtysh binary)
1791
a07169b1
DL
1792CFG_SYSCONF="$sysconfdir"
1793CFG_SBIN="$sbindir"
1794CFG_STATE="$frr_statedir"
30771d65 1795CFG_MODULE="$moduledir"
a07169b1
DL
1796for I in 1 2 3 4 5 6 7 8 9 10; do
1797 eval CFG_SYSCONF="\"$CFG_SYSCONF\""
1798 eval CFG_SBIN="\"$CFG_SBIN\""
1799 eval CFG_STATE="\"$CFG_STATE\""
30771d65 1800 eval CFG_MODULE="\"$CFG_MODULE\""
a07169b1
DL
1801done
1802AC_SUBST(CFG_SYSCONF)
1803AC_SUBST(CFG_SBIN)
1804AC_SUBST(CFG_STATE)
30771d65
DL
1805AC_SUBST(CFG_MODULE)
1806AC_DEFINE_UNQUOTED(MODULE_PATH, "$CFG_MODULE", path to modules)
a07169b1 1807
dabecd7c
MR
1808dnl ------------------------------------
1809dnl Enable RPKI and add librtr to libs
1810dnl ------------------------------------
1811if test "${enable_rpki}" = "yes"; then
1812 PKG_CHECK_MODULES(RTRLIB,[rtrlib >= 0.5.0],
1813 [AC_DEFINE(HAVE_RPKI,1,Enable RPKI prefix validation for BGP)
1814 RPKI=true],
1815 [RPKI=false
1816 AC_MSG_ERROR([rtrlib was not found on your system or is too old.])]
1817 )
1818fi
1819AM_CONDITIONAL([RPKI], test "x$RPKI" = "xtrue")
1820
1821dnl ------------------------------------------
1822dnl Check whether rtrlib was build with ssh support
1823dnl ------------------------------------------
1824AC_MSG_CHECKING([whether the RTR Library is compiled with SSH])
1825AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "rtrlib/rtrlib.h"]],
1826 [[struct tr_ssh_config config;]])],
1827 [AC_MSG_RESULT(yes)
1828 AC_DEFINE(FOUND_SSH,,found_ssh)],
1829 AC_MSG_RESULT(no)
1830)
1831
7ea487bc 1832dnl ---------------------------
1833dnl Check htonl works correctly
1834dnl ---------------------------
1835AC_MSG_CHECKING(for working htonl)
6f0e3f6e 1836AC_CACHE_VAL(ac_cv_htonl_works,
8e4da10b 1837 [AC_LINK_IFELSE([AC_LANG_PROGRAM([FRR_INCLUDES],[htonl (0);])],
6f0e3f6e
PJ
1838 [ac_cv_htonl_works=yes], [ac_cv_htonl_works=no])
1839 ]
1840)
7ea487bc 1841AC_MSG_RESULT($ac_cv_htonl_works)
1842
7f269117 1843AC_CONFIG_FILES([Makefile
bd354725 1844 bgpd/Makefile
30237d29 1845 vtysh/Makefile
afca0690 1846 doc/Makefile tests/Makefile
22ea387f 1847 bgpd/rfp-example/rfptest/Makefile bgpd/rfp-example/librfp/Makefile
22ea387f 1848 redhat/frr.spec
495feb8a 1849 debianpkg/Makefile
5eee7099 1850 debianpkg/changelog
3ab11ecc 1851 snapcraft/snapcraft.yaml
b7a97f82 1852 lib/version.h
8efe88ea 1853 tests/lib/cli/test_cli.refout
14c17fd8 1854 doc/defines.texi
461c7bee
DL
1855 doc/bgpd.8
1856 doc/isisd.8
1857 doc/ospf6d.8
1858 doc/ospfclient.8
1859 doc/ospfd.8
1860 doc/ldpd.8
1861 doc/ripd.8
6c85c081 1862 doc/eigrpd.8
461c7bee
DL
1863 doc/ripngd.8
1864 doc/pimd.8
caba6093 1865 doc/nhrpd.8
461c7bee 1866 doc/vtysh.1
9473e340 1867 doc/watchfrr.8
461c7bee 1868 doc/zebra.8
438f5286 1869 doc/frr.1
5309b14e 1870 doc/frr-args.8
cbd04084 1871 pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
7f57883e
DS
1872 pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh
1873 pkgsrc/eigrpd.sh])
65efcfce 1874
0953865f
LB
1875if test "${enable_bgp_vnc}" != "no"; then
1876 if test "${with_rfp_path}" != "bgpd/rfp-example" ; then
1877 AC_CONFIG_FILES([${with_rfp_path}/rfptest/Makefile ${with_rfp_path}/librfp/Makefile])
1878 fi
1879fi
65efcfce 1880
26275b05 1881AC_CONFIG_FILES([solaris/Makefile])
1882
670bbf19 1883AC_CONFIG_FILES([vtysh/extract.pl],[chmod +x vtysh/extract.pl])
65efcfce 1884
306ed681
DL
1885AC_CONFIG_COMMANDS([lib/route_types.h], [
1886 dst="${ac_abs_top_builddir}/lib/route_types.h"
1887 ${PERL} "${ac_abs_top_srcdir}/lib/route_types.pl" \
1888 < "${ac_abs_top_srcdir}/lib/route_types.txt" \
1889 > "${dst}.tmp"
1890 test -f "${dst}" \
1891 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1892 && rm "${dst}.tmp" \
1893 || mv "${dst}.tmp" "${dst}"
1894], [
1895 PERL="$PERL"
1896])
1897
1898AS_IF([test "x$with_pkg_git_version" = "xyes"], [
1899 AC_CONFIG_COMMANDS([lib/gitversion.h], [
1900 dst="${ac_abs_top_builddir}/lib/gitversion.h"
1901 ${PERL} "${ac_abs_top_srcdir}/lib/gitversion.pl" \
1902 "${ac_abs_top_srcdir}" \
1903 > "${dst}.tmp"
1904 test -f "${dst}" \
1905 && diff "${dst}.tmp" "${dst}" >/dev/null 2>/dev/null \
1906 && rm "${dst}.tmp" \
1907 || mv "${dst}.tmp" "${dst}"
1908 ], [
1909 PERL="$PERL"
1910 ])
1911])
1912
1689cf7e 1913## Hack, but working solution to avoid rebuilding of frr.info.
48577196 1914## It's already in CVS until texinfo 4.7 is more common.
14c17fd8 1915AC_OUTPUT
7ea487bc 1916
1917echo "
447a8fe9 1918FRRouting configuration
b2f36157
DL
1919------------------------------
1920FRR version : ${PACKAGE_VERSION}
1080c13f 1921host operating system : ${host_os}
7ea487bc 1922source code location : ${srcdir}
1923compiler : ${CC}
1924compiler flags : ${CFLAGS}
6f0e3f6e 1925make : ${MAKE-make}
6f0e3f6e 1926linker flags : ${LDFLAGS} ${LIBS} ${LIBCAP} ${LIBREADLINE} ${LIBM}
b2f36157 1927state file directory : ${frr_statedir}
dc7a2bf1 1928config file directory : `eval echo \`echo ${sysconfdir}\``
d6b72f7a 1929example directory : `eval echo \`echo ${exampledir}\``
30771d65 1930module directory : ${CFG_MODULE}
b2f36157
DL
1931user to run as : ${enable_user}
1932group to run as : ${enable_group}
1933group for vty sockets : ${enable_vty_group}
aa593d5e 1934config file mask : ${enable_configfile_mask}
1935log file mask : ${enable_logfile_mask}
dad253b4 1936zebra protobuf enabled : ${have_protobuf:-no}
dc7a2bf1 1937
1938The above user and group must have read/write access to the state file
105b8239 1939directory and to the config files in the config file directory."