342
344
enable_logfile_mask=${enable_logfile_mask:-0600}
343
345
AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
349
349
case "${enable_multipath}" in
351
351
MULTIPATH_NUM="${enable_multipath}"
356
echo "Please specify digit to --enable-multipath ARG."
356
AC_MSG_FAILURE([Please specify digit to enable multipath ARG])
363
360
AC_SUBST(MULTIPATH_NUM)
365
dnl -------------------
366
dnl Check header files.
367
dnl -------------------
362
dnl ------------------------------------
363
dnl Check C keywords and standard types
364
dnl ------------------------------------
369
AC_CHECK_HEADERS([string.h stropts.h sys/conf.h sys/ksym.h sys/time.h \
370
sys/times.h sys/select.h sys/sysctl.h sys/sockio.h \
371
sys/types.h linux/version.h kvm.h netdb.h asm/types.h \
372
sys/param.h libutil.h limits.h stdint.h])
374
AC_CHECK_HEADERS([sys/socket.h netinet/in_systm.h netinet/in.h \
375
net/if_dl.h net/netopt.h inet/nd.h net/route.h \
376
net/if.h net/if_var.h netinet/in_var.h])
378
dnl V6 headers are checked below, after we check for v6
382
372
dnl AC_TYPE_PID_T
379
dnl -------------------------
380
dnl Check other header files.
381
dnl -------------------------
382
AC_CHECK_HEADERS([stropts.h sys/ksym.h sys/times.h sys/select.h \
383
sys/types.h linux/version.h netdb.h asm/types.h \
384
sys/param.h limits.h signal.h libutil.h \
385
sys/socket.h netinet/in.h])
387
dnl Utility macro to avoid retyping includes all the time
388
m4_define([QUAGGA_INCLUDES],
391
#define __EXTENSIONS__
403
# include <sys/types.h>
405
/* sys/conf.h depends on param.h on FBSD at least */
407
# include <sys/param.h>
409
/* Required for MAXSIG */
413
#if HAVE_SYS_SOCKET_H
414
# include <sys/socket.h>
416
#if HAVE_NETINET_IN_H
417
# include <netinet/in.h>
421
AC_CHECK_HEADERS([sys/un.h net/if.h netinet/in_systm.h netinet/in_var.h \
422
net/if_dl.h net/if_var.h net/netopt.h net/route.h \
423
inet/nd.h arpa/inet.h netinet/ip_icmp.h \
424
fcntl.h stddef.h sys/ioctl.h syslog.h wchar.h wctype.h \
425
sys/sysctl.h sys/sockio.h kvm.h sys/conf.h],
426
[], [], QUAGGA_INCLUDES)
428
AC_CHECK_HEADERS([ucontext.h], [], [],
431
#endif /* __USE_GNU */
435
m4_define([QUAGGA_INCLUDES],
443
#if HAVE_NETINET_IN_SYSTM_H
444
# include <netinet/in_systm.h>
446
#if HAVE_NETINET_IN_VAR_H
447
# include <netinet/in_var.h>
450
# include <net/if_dl.h>
452
#if HAVE_NET_IF_VAR_H
453
# include <net/if_var.h>
455
#if HAVE_NET_NETOPT_H
456
# include <net/netopt.h>
459
# include <net/route.h>
462
# include <inet/nd.h>
465
# include <arpa/inet.h>
467
/* Required for IDRP */
468
#if HAVE_NETINET_IP_ICMP_H
469
# include <netinet/ip_icmp.h>
473
dnl V6 headers are checked below, after we check for v6
385
475
dnl Some systems (Solaris 2.x) require libnsl (Network Services Library)
483
573
if test "$with_libpam" = "yes"; then
484
AC_CHECK_HEADER(security/pam_misc.h)
485
if test "$ac_cv_header_security_pam_misc_h" = yes; then
486
AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
487
AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
488
pam_conv_func="misc_conv"
490
AC_CHECK_HEADER(security/openpam.h)
491
if test "$ac_cv_header_security_openpam_h" = yes; then
492
AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
493
AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
494
pam_conv_func="openpam_ttyconv"
574
AC_CHECK_HEADER([security/pam_misc.h],
575
[AC_DEFINE(HAVE_PAM_MISC_H,,Have pam_misc.h)
576
AC_DEFINE(PAM_CONV_FUNC,misc_conv,Have misc_conv)
577
pam_conv_func="misc_conv"
580
AC_CHECK_HEADER([security/openpam.h],
581
[AC_DEFINE(HAVE_OPENPAM_H,,Have openpam.h)
582
AC_DEFINE(PAM_CONV_FUNC,openpam_ttyconv,Have openpam_ttyconv)
583
pam_conv_func="openpam_ttyconv"
496
586
if test -z "$ac_cv_header_security_pam_misc_h$ac_cv_header_security_openpam_h" ; then
497
587
AC_MSG_WARN([*** pam support will not be built ***])
546
636
dnl ----------------------------
547
637
dnl check existance of functions
548
638
dnl ----------------------------
549
AC_CHECK_FUNCS(memset memcpy strerror inet_aton daemon snprintf vsnprintf \
550
strlcat strlcpy if_nametoindex if_indextoname getifaddrs \
551
fcntl strnlen strndup)
648
AC_FUNC_SELECT_ARGTYPES
650
dnl Avoid AC_FUNC_STRNLEN because it pulls in AC_SYSTEM_EXTENSIONS which
651
dnl can lead to strange side effects. So we just check for strnlen
652
dnl directly, see below.
653
dnl AC_FUNC_STRNLENdnl
656
dnl -------------------------------
657
dnl bgpd needs pow() and hence libm
658
dnl -------------------------------
660
AC_CHECK_HEADER([math.h],
661
[AC_CHECK_LIB([m], [pow],
664
AC_DEFINE(HAVE_LIBM,, Have libm)
665
AC_CHECK_FUNCS(pow,[],[LIBM=""])
668
if test x"$LIBM" = x ; then
669
AC_MSG_WARN([Unable to find working pow function - bgpd may not link])
677
AC_CHECK_FUNCS([dup2 ftruncate getcwd gethostbyname getpagesize gettimeofday \
678
inet_ntoa inet_aton strnlen \
679
memchr memmove memset select socket \
680
strcasecmp strchr strcspn strdup strerror \
681
strncasecmp strndup strrchr strspn strstr \
682
strtol strtoul strlcat strlcpy \
683
daemon snprintf vsnprintf \
684
if_nametoindex if_indextoname getifaddrs \
552
687
AC_CHECK_FUNCS(setproctitle, ,
553
688
[AC_CHECK_LIB(util, setproctitle,
554
689
[LIBS="$LIBS -lutil"
1047
1239
AC_SUBST(SNMP_INCLUDES)
1050
dnl ----------------------------
1051
dnl check sa_len of sockaddr
1052
dnl ----------------------------
1053
AC_MSG_CHECKING(whether struct sockaddr has a sa_len field)
1054
AC_TRY_COMPILE([#include <sys/types.h>
1055
#include <sys/socket.h>
1056
],[static struct sockaddr ac_i;int ac_j = sizeof (ac_i.sa_len);],
1058
AC_DEFINE(HAVE_SA_LEN,,sa_len)],
1061
dnl ----------------------------
1062
dnl check sin_len of sockaddr_in
1063
dnl ----------------------------
1064
AC_MSG_CHECKING(whether struct sockaddr_in has a sin_len field)
1065
AC_TRY_COMPILE([#include <sys/types.h>
1066
#include <netinet/in.h>
1067
],[static struct sockaddr_in ac_i;int ac_j = sizeof (ac_i.sin_len);],
1069
AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
1072
dnl ----------------------------
1073
dnl check sun_len of sockaddr_un
1074
dnl ----------------------------
1075
AC_MSG_CHECKING(whether struct sockaddr_un has a sun_len field)
1076
AC_TRY_COMPILE([#include <sys/types.h>
1078
],[static struct sockaddr_un ac_i;int ac_j = sizeof (ac_i.sun_len);],
1080
AC_DEFINE(HAVE_SUN_LEN,,sun_len)],
1083
dnl -----------------------------------
1084
dnl check sin6_scope_id of sockaddr_in6
1085
dnl -----------------------------------
1086
if test "$zebra_cv_ipv6" = yes; then
1087
AC_MSG_CHECKING(whether struct sockaddr_in6 has a sin6_scope_id field)
1088
AC_TRY_COMPILE([#include <sys/types.h>
1089
#include <netinet/in.h>
1090
],[static struct sockaddr_in6 ac_i;int ac_j = sizeof (ac_i.sin6_scope_id);],
1092
AC_DEFINE(HAVE_SIN6_SCOPE_ID,,scope id)],
1096
dnl ----------------------------
1097
dnl check socklen_t exist or not
1098
dnl ----------------------------
1099
AC_MSG_CHECKING(whther socklen_t is defined)
1100
AC_TRY_COMPILE([#include <sys/types.h>
1101
#include <sys/socket.h>
1102
#include <netinet/in.h>
1103
],[socklen_t ac_x;],
1105
AC_DEFINE(HAVE_SOCKLEN_T,,socklen_t)],
1108
dnl ------------------------
1109
dnl check struct sockaddr_dl
1110
dnl ------------------------
1111
AC_MSG_CHECKING(whether struct sockaddr_dl exist)
1112
AC_EGREP_HEADER(sockaddr_dl,
1115
AC_DEFINE(HAVE_SOCKADDR_DL,,sockaddr_dl)],
1118
dnl --------------------------
1119
dnl check structure ifaliasreq
1120
dnl --------------------------
1121
AC_MSG_CHECKING(whether struct ifaliasreq exist)
1122
AC_EGREP_HEADER(ifaliasreq,
1125
AC_DEFINE(HAVE_IFALIASREQ,,ifaliasreq)],
1128
dnl ----------------------------
1129
dnl check structure in6_aliasreq
1130
dnl ----------------------------
1131
AC_MSG_CHECKING(whether struct in6_aliasreq exist)
1132
AC_EGREP_HEADER(in6_aliasreq,
1135
AC_DEFINE(HAVE_IN6_ALIASREQ,,in6_aliasreq)],
1138
dnl -----------------------------------
1139
dnl check ifra_lifetime of in6_aliasreq
1140
dnl -----------------------------------
1141
AC_MSG_CHECKING(whether in6_aliasreq.ifra_lifetime exist)
1142
AC_TRY_COMPILE([#include <sys/types.h>
1143
#include <netinet6/in6_var.h>
1144
],[static struct if6_aliasreq ac_i;int ac_j = sizeof (ac_i.ifra_lifetime);],
1146
AC_DEFINE(HAVE_IFRA_LIFETIME,,Have in6_aliasreq.ifra_lifetime)],
1149
dnl ---------------------------
1150
dnl check structure rt_addrinfo
1151
dnl ---------------------------
1152
AC_MSG_CHECKING(whether struct rt_addrinfo exist)
1153
AC_EGREP_HEADER(rt_addrinfo,
1156
AC_DEFINE(HAVE_RT_ADDRINFO,,rt_addrinfo)],
1159
dnl --------------------------
1160
dnl check structure in_pktinfo
1161
dnl --------------------------
1162
AC_MSG_CHECKING(whether struct in_pktinfo exist)
1163
AC_TRY_COMPILE([#include <netinet/in.h>
1164
],[struct in_pktinfo ac_x;],
1166
AC_DEFINE(HAVE_INPKTINFO,,in_pktinfo)],
1169
dnl ----------------------------------
1170
dnl check struct nd_opt_homeagent_info
1171
dnl ----------------------------------
1172
AC_MSG_CHECKING(whether struct nd_opt_homeagent_info exist)
1173
AC_EGREP_HEADER(nd_opt_homeagent_info,
1176
AC_DEFINE(HAVE_ND_OPT_HOMEAGENT_INFO,,nd_opt_homeagent_info)],
1179
dnl --------------------------------
1180
dnl check struct nd_opt_adv_interval
1181
dnl --------------------------------
1182
AC_MSG_CHECKING(whether struct nd_opt_adv_interval exist)
1183
AC_EGREP_HEADER(nd_opt_adv_interval,
1186
AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL,,nd_opt_adv_interval)],
1189
dnl ------------------------------------
1190
dnl check fields in nd_opt_adv_interval
1191
dnl ------------------------------------
1192
AC_MSG_CHECKING(whether nd_opt_ai_type field exist)
1193
AC_EGREP_HEADER(nd_opt_ai_type,
1196
AC_DEFINE(HAVE_ND_OPT_ADV_INTERVAL_AI_FIELDS,,nd_opt_ai_type)],
1242
dnl ---------------------------
1243
dnl sockaddr and netinet checks
1244
dnl ---------------------------
1245
AC_CHECK_TYPES([struct sockaddr, struct sockaddr_in,
1246
struct sockaddr_in6, struct sockaddr_un, struct sockaddr_dl,
1248
struct ifaliasreq, struct if6_aliasreq, struct in6_aliasreq,
1249
struct nd_opt_adv_interval, struct rt_addrinfo,
1250
struct nd_opt_homeagent_info, struct nd_opt_adv_interval],
1251
[], [], QUAGGA_INCLUDES)
1253
AC_CHECK_MEMBERS([struct sockaddr.sa_len,
1254
struct sockaddr_in.sin_len, struct sockaddr_un.sun_len,
1255
struct sockaddr_in6.sin6_scope_id,
1256
struct if6_aliasreq.ifra_lifetime,
1257
struct nd_opt_adv_interval.nd_opt_ai_type],
1258
[], [], QUAGGA_INCLUDES)
1260
dnl ---------------------------
1261
dnl IRDP/pktinfo/icmphdr checks
1262
dnl ---------------------------
1263
AC_CHECK_TYPES([struct in_pktinfo],
1264
[AC_CHECK_TYPES([struct icmphdr],
1265
[if test "${enable_irdp}" != "no"; then
1266
AC_DEFINE(HAVE_IRDP,, IRDP)
1268
[if test "${enable_irdp}" = "yes"; then
1269
AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1270
fi], [QUAGGA_INCLUDES])],
1271
[if test "${enable_irdp}" = "yes"; then
1272
AC_MSG_ERROR(['IRDP requires in_pktinfo at the moment!'])
1273
fi], [QUAGGA_INCLUDES])
1199
1275
dnl --------------------------------------
1200
1276
dnl checking for getrusage struct and call