240 lines
6.2 KiB
Plaintext
Executable File
240 lines
6.2 KiB
Plaintext
Executable File
dnl Process this file with autoconf to produce a configure script.
|
|
AC_INIT(dhcp6c.c)
|
|
|
|
dnl Checks for programs.
|
|
AC_PROG_INSTALL
|
|
AC_PROG_MAKE_SET
|
|
AC_PROG_CC
|
|
AC_PROG_CPP
|
|
AC_PROG_YACC
|
|
AC_PROG_LEX
|
|
|
|
dnl Checks for libraries.
|
|
dnl AC_CHECK_LIB(c, kvm_open, [], [AC_CHECK_LIB(kvm, kvm_open)])
|
|
dnl AC_CHECK_LIB(mld, nlist)
|
|
|
|
dnl pcap library
|
|
dnl CFLAGS="-I. $CFLAGS"
|
|
dnl AC_MSG_CHECKING(for pcap library/header)
|
|
dnl for dir in /usr/local/libpcap /usr/local/v6 /usr/local \
|
|
dnl ../libpcap* ../../libpcap*; do
|
|
dnl ac_cv_pcap_lib=no
|
|
dnl ac_cv_pcap_include=no
|
|
dnl if test -d $dir -a -f $dir/libpcap.a; then
|
|
dnl ac_cv_pcap_lib="$dir"
|
|
dnl elif test -d $dir/lib -a -f $dir/lib/libpcap.a; then
|
|
dnl ac_cv_pcap_lib="$dir/lib"
|
|
dnl fi
|
|
dnl if test -d $dir -a -f $dir/pcap.h; then
|
|
dnl ac_cv_pcap_include="$dir"
|
|
dnl elif test -d $dir/include -a -f $dir/include/pcap.h; then
|
|
dnl ac_cv_pcap_include="$dir/include"
|
|
dnl fi
|
|
dnl if test "$ac_cv_pcap_lib" != "no" -a "$ac_cv_pcap_include" != "no"; then
|
|
dnl LIBS="-L$ac_cv_pcap_lib $LIBS"
|
|
dnl CFLAGS="-I$ac_cv_pcap_include $CFLAGS"
|
|
dnl break
|
|
dnl fi
|
|
dnl done
|
|
dnl if test "$ac_cv_pcap_lib" = "no" -a "$ac_cv_pcap_include" = "no"; then
|
|
dnl AC_MSG_RESULT(no)
|
|
dnl else
|
|
dnl AC_MSG_RESULT($ac_cv_pcap_lib and $ac_cv_pcap_include)
|
|
dnl fi
|
|
dnl AC_CHECK_LIB(pcap, pcap_lookupdev, [],
|
|
dnl [echo "Fatal: libpcap.a not found"
|
|
dnl exit 1])
|
|
dnl AC_TRY_COMPILE([#include <pcap.h>], [], [], [dnl
|
|
dnl echo "Fatal: pcap.h not found"
|
|
dnl exit 1])
|
|
|
|
CFLAGS="$CFLAGS -I\$(srcdir)"
|
|
|
|
dnl On Sun systems, we need to use the standards-compliant 3XNET functions
|
|
if test -x /usr/bin/sun && /usr/bin/sun; then
|
|
CFLAGS="$CFLAGS -D_XOPEN_SOURCE=500 -D__EXTENSIONS__"
|
|
LDFLAGS="-lxnet -ldevinfo -lnsl -lsocket -lrt"
|
|
fi
|
|
|
|
AC_MSG_CHECKING(for sys/queue.h)
|
|
AC_TRY_COMPILE([#include <sys/queue.h>],
|
|
[TAILQ_HEAD(test, none);],
|
|
[AC_MSG_RESULT(yes)],
|
|
[AC_MSG_RESULT(no)
|
|
CFLAGS="$CFLAGS -I\$(srcdir)/missing"])
|
|
|
|
AC_EGREP_CPP(yes,
|
|
[#include <netinet/in.h>
|
|
#ifdef __KAME__
|
|
yes
|
|
#endif], [result=kame], [result=regular])
|
|
AC_MSG_CHECKING(for getaddrinfo/getnameinfo library)
|
|
AC_MSG_RESULT($result)
|
|
case $result in
|
|
kame) AC_DEFINE(INET6)
|
|
o_LIBS="$LIBS"
|
|
LIBS="$LIBS -L/usr/local/v6/lib"
|
|
AC_CHECK_LIB(inet6, getaddrinfo, [], [LIBS="$o_LIBS"])
|
|
;;
|
|
*) ;;
|
|
esac
|
|
|
|
AC_REPLACE_FUNCS(getaddrinfo)
|
|
AC_REPLACE_FUNCS(getnameinfo)
|
|
AC_REPLACE_FUNCS(getifaddrs)
|
|
AC_CHECK_FUNCS(if_nametoindex)
|
|
AC_REPLACE_FUNCS(strlcpy strlcat)
|
|
AC_REPLACE_FUNCS(daemon)
|
|
AC_REPLACE_FUNCS(warnx)
|
|
|
|
dnl Checks for header files.
|
|
AC_HEADER_STDC
|
|
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h syslog.h unistd.h ifaddrs.h)
|
|
AC_MSG_CHECKING(for socklen_t)
|
|
AC_TRY_COMPILE([#include <sys/types.h>
|
|
#include <sys/socket.h>],
|
|
[socklen_t x; x = 1; return x;],
|
|
[AC_MSG_RESULT(yes)],
|
|
[AC_MSG_RESULT(no)
|
|
AC_CHECK_TYPE(socklen_t, int)])
|
|
|
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_TYPE_SIZE_T
|
|
AC_HEADER_TIME
|
|
AC_STRUCT_TM
|
|
AC_STRUCT_TIMEZONE
|
|
AC_CHECK_TYPES([sig_atomic_t], , [AC_DEFINE(sig_atomic_t, u_long)], [#include <sys/types.h>
|
|
#include <signal.h>])
|
|
|
|
|
|
dnl Checks for library functions.
|
|
AC_FUNC_GETPGRP
|
|
AC_PROG_GCC_TRADITIONAL
|
|
AC_FUNC_SETPGRP
|
|
AC_TYPE_SIGNAL
|
|
AC_CHECK_FUNCS(mktime select socket)
|
|
AC_CHECK_FUNCS(clock_gettime)
|
|
|
|
dnl configure local DB directory
|
|
AC_MSG_CHECKING(for local DB directory)
|
|
AC_ARG_WITH(localdbdir,
|
|
[ --with-localdbdir=VALUE where to put local DB files],
|
|
localdbdir="$withval", localdbdir="/var/db")
|
|
AC_MSG_RESULT($localdbdir)
|
|
AC_SUBST(localdbdir)
|
|
|
|
dnl Checks for arc4random
|
|
AC_REPLACE_FUNCS(arc4random)
|
|
|
|
AC_MSG_CHECKING(if --enable-pedant option is specified)
|
|
AC_ARG_ENABLE(pedant, [ --enable-pedant pedantic compilation],
|
|
[if test "$enableval" = "yes"; then
|
|
CFLAGS="-Wall -Werror $CFLAGS"
|
|
fi], [enableval=no])
|
|
AC_MSG_RESULT($enableval);
|
|
|
|
dnl Checks predeclared identifers of function names
|
|
AC_MSG_CHECKING(ANSI predeclared __func__)
|
|
AC_TRY_COMPILE([],
|
|
[void func(void) {printf("%s\n", __func__);}],
|
|
[AC_MSG_RESULT(yes)
|
|
pred_func_id=ansi],
|
|
[AC_MSG_RESULT(no)
|
|
pred_func_id=no])
|
|
if test $pred_func_id = no; then
|
|
AC_MSG_CHECKING(gcc predelcared __FUNCTION__)
|
|
AC_TRY_COMPILE([],
|
|
[void func(void) {printf("%s\n", __FUNCTION__);}],
|
|
[AC_MSG_RESULT(yes)
|
|
pred_func_id=gcc],
|
|
[AC_MSG_RESULT(no)
|
|
pred_func_id=no])
|
|
fi
|
|
case $pred_func_id in
|
|
ansi)
|
|
AC_DEFINE(HAVE_ANSI_FUNC)
|
|
;;
|
|
gcc)
|
|
AC_DEFINE(HAVE_GCC_FUNCTION)
|
|
;;
|
|
esac
|
|
|
|
dnl DHCP option type values not officially defined
|
|
dnl (no such option now)
|
|
|
|
dnl Checks the existence of TAILQ_FOREACH_REVERSE
|
|
AC_MSG_CHECKING(checking the existence TAILQ_FOREACH_REVERSE)
|
|
AC_EGREP_CPP(yes,
|
|
[#include <sys/queue.h>
|
|
#ifdef TAILQ_FOREACH_REVERSE
|
|
yes
|
|
#endif], [result=yes], [result=no])
|
|
AC_MSG_RESULT($result)
|
|
case $result in
|
|
yes) tailq_foreach=yes
|
|
;;
|
|
*) tailq_foreach=no
|
|
;;
|
|
esac
|
|
|
|
dnl Checks the argument order of TAILQ_FOREACH_REVERSE if it exists
|
|
if test $tailq_foreach = yes ; then
|
|
AC_MSG_CHECKING(argument order of TAILQ_FOREACH_REVERSE)
|
|
AC_TRY_COMPILE([],
|
|
[
|
|
#include <stdio.h>
|
|
#include <sys/queue.h>
|
|
|
|
TAILQ_HEAD(tailhead, entry) head = TAILQ_HEAD_INITIALIZER(head);
|
|
struct entry {
|
|
TAILQ_ENTRY(entry) entries;
|
|
} *p;
|
|
|
|
int i;
|
|
struct tailhead *headp;
|
|
|
|
TAILQ_FOREACH_REVERSE(p, headp, tailhead, entries) {
|
|
}
|
|
],
|
|
[AC_MSG_RESULT(new)
|
|
AC_DEFINE(HAVE_TAILQ_FOREACH_REVERSE)],
|
|
[AC_MSG_RESULT(old)
|
|
AC_DEFINE(HAVE_TAILQ_FOREACH_REVERSE_OLD)]);
|
|
fi
|
|
|
|
dnl Checks for other features
|
|
AC_MSG_CHECKING(if you have a length field in struct sockaddr*)
|
|
AC_CACHE_VAL(ts_cv_sa_len, [dnl
|
|
AC_TRY_COMPILE([
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
], [
|
|
struct sockaddr a;
|
|
a.sa_len = 1;
|
|
], [ts_cv_sa_len="yes"], [ts_cv_sa_len="no"])])
|
|
AC_MSG_RESULT($ts_cv_sa_len);
|
|
if test "$ts_cv_sa_len" = yes; then
|
|
AC_DEFINE([HAVE_SA_LEN], 1, [Define to 1 if you have a length field in struct sockaddr])
|
|
fi
|
|
|
|
dnl configure the ownership of the programs
|
|
AC_MSG_CHECKING(the owner of the programs)
|
|
AC_ARG_WITH(user,
|
|
[ --with-user=USER set the owner of the programs],
|
|
user="$withval", user="bin")
|
|
AC_MSG_RESULT($user)
|
|
AC_SUBST(user)
|
|
|
|
dnl configure the group ownership of the programs
|
|
AC_MSG_CHECKING(the group owner of the programs)
|
|
AC_ARG_WITH(group,
|
|
[ --with-group=GROUP set the group owner of the programs],
|
|
group="$withval", group="bin")
|
|
AC_MSG_RESULT($group)
|
|
AC_SUBST(group)
|
|
|
|
AC_CHECK_HEADERS(stdarg.h)
|
|
|
|
AC_OUTPUT(Makefile)
|