8322ecde12
Restructure client/ subdir. Add two different flavors of client. The full featured birdc client code is in client/birdc/. The new light client birtcl is in client/birdcl/. Common sources of both clients are directly in client/. Rework on-line auto-completion in client/command.c to conditionally turn off ncurses-specific code. Add lightweight client without libreadline and ncurses dependencies - birdcl. The birdcl lacks support of history, on-line auto-completion and there are different implementations of "more" functionality and help on '?' press. New client operates in canonical terminal mode (apart from "more" display) and therefore all commands have to be executed by a return key including help commands (called by '?' character in the end of the line). Apart from these limitations the interaction style should be the same as for the full client - birdc. Build of birdcl is always on (independent on --enable-client parameter).
276 lines
8.4 KiB
Text
276 lines
8.4 KiB
Text
dnl ** This is a configure script template for BIRD
|
|
dnl ** Process it with autoconf to get ./configure
|
|
dnl ** (c) 1999--2000 Martin Mares <mj@ucw.cz>
|
|
|
|
AC_REVISION($Id$)
|
|
AC_INIT(conf/confbase.Y)
|
|
AC_CONFIG_AUX_DIR(tools)
|
|
|
|
AC_ARG_ENABLE(debug, [ --enable-debug enable internal debugging routines (default: disabled)],,enable_debug=no)
|
|
AC_ARG_ENABLE(memcheck, [ --enable-memcheck check memory allocations when debugging (default: enabled)],,enable_memcheck=yes)
|
|
AC_ARG_ENABLE(client, [ --enable-client enable building of BIRD client (default: enabled)],,enable_client=yes)
|
|
AC_ARG_ENABLE(ipv6, [ --enable-ipv6 enable building of IPv6 version (default: disabled)],,enable_ipv6=no)
|
|
AC_ARG_WITH(suffix, [ --with-suffix=STRING use specified suffix for BIRD files (default: 6 for IPv6 version)],[given_suffix="yes"])
|
|
AC_ARG_WITH(sysconfig, [ --with-sysconfig=FILE use specified BIRD system configuration file])
|
|
AC_ARG_WITH(protocols, [ --with-protocols=LIST include specified routing protocols (default: all)],,[with_protocols="all"])
|
|
AC_ARG_WITH(sysinclude, [ --with-sysinclude=PATH search for system includes on specified place])
|
|
AC_ARG_WITH(runtimedir, [ --with-runtimedir=PATH path for runtime files (default: $(localstatedir)/run)],[runtimedir="$with_runtimedir"],[runtimedir="\$(localstatedir)/run"])
|
|
AC_ARG_WITH(iproutedir, [ --with-iproutedir=PATH path to iproute2 config files (default: /etc/iproute2)],[given_iproutedir="yes"])
|
|
AC_ARG_VAR([FLEX], [location of the Flex program])
|
|
AC_ARG_VAR([BISON], [location of the Bison program])
|
|
AC_ARG_VAR([M4], [location of the M4 program])
|
|
|
|
|
|
if test "$srcdir" = . ; then
|
|
# Building in current directory => create obj directory holding all objects
|
|
objdir=obj
|
|
mkdir -p obj
|
|
srcdir_rel=..
|
|
makefiles="Makefile:tools/Makefile-top.in obj/Makefile:tools/Makefile.in obj/Rules:tools/Rules.in"
|
|
exedir=..
|
|
else
|
|
# Building in separate directory
|
|
objdir=.
|
|
srcdir_rel=$srcdir
|
|
makefiles="Makefile:tools/Makefile.in Rules:tools/Rules.in"
|
|
exedir=.
|
|
fi
|
|
case $srcdir_rel in
|
|
/*) srcdir_rel_mf=$srcdir_rel ;;
|
|
*) srcdir_rel_mf="\$(root-rel)$srcdir_rel" ;;
|
|
esac
|
|
AC_SUBST(objdir)
|
|
AC_SUBST(exedir)
|
|
AC_SUBST(srcdir_rel_mf)
|
|
AC_SUBST(runtimedir)
|
|
|
|
if test "$enable_ipv6" = yes ; then
|
|
ip=ipv6
|
|
SUFFIX=6
|
|
all_protocols=bgp,ospf,pipe,radv,rip,static
|
|
else
|
|
ip=ipv4
|
|
SUFFIX=""
|
|
all_protocols=bgp,ospf,pipe,rip,static
|
|
fi
|
|
|
|
if test "$given_suffix" = yes ; then
|
|
SUFFIX="$with_suffix"
|
|
fi
|
|
AC_SUBST(SUFFIX)
|
|
|
|
if test "$with_protocols" = all ; then
|
|
with_protocols="$all_protocols"
|
|
fi
|
|
|
|
if test "$enable_debug" = yes ; then
|
|
CONFIG_FILE="bird$SUFFIX.conf"
|
|
CONTROL_SOCKET="bird$SUFFIX.ctl"
|
|
else
|
|
CONFIG_FILE="\$(sysconfdir)/bird$SUFFIX.conf"
|
|
CONTROL_SOCKET="$runtimedir/bird$SUFFIX.ctl"
|
|
fi
|
|
AC_SUBST(CONFIG_FILE)
|
|
AC_SUBST(CONTROL_SOCKET)
|
|
|
|
AC_SEARCH_LIBS(clock_gettime,[c rt posix4])
|
|
|
|
AC_CANONICAL_HOST
|
|
|
|
# Store this value because ac_test_CFLAGS is overwritten by AC_PROG_CC
|
|
if test "$ac_test_CFLAGS" != set ; then
|
|
bird_cflags_default=yes
|
|
fi
|
|
|
|
AC_PROG_CC
|
|
if test -z "$GCC" ; then
|
|
AC_MSG_ERROR([This program requires the GNU C Compiler.])
|
|
fi
|
|
|
|
AC_MSG_CHECKING([what CFLAGS should we use])
|
|
if test "$bird_cflags_default" = yes ; then
|
|
BIRD_CHECK_GCC_OPTIONS
|
|
|
|
CFLAGS="$CFLAGS -Wall -Wstrict-prototypes -Wno-parentheses"
|
|
if test "$bird_cv_c_option_no_pointer_sign" = yes ; then
|
|
CFLAGS="$CFLAGS -Wno-pointer-sign"
|
|
fi
|
|
fi
|
|
AC_MSG_RESULT($CFLAGS)
|
|
|
|
|
|
AC_PROG_CPP
|
|
AC_PROG_INSTALL
|
|
AC_PROG_RANLIB
|
|
AC_CHECK_PROG(FLEX, flex, flex)
|
|
AC_CHECK_PROG(BISON, bison, bison)
|
|
AC_CHECK_PROGS(M4, gm4 m4)
|
|
|
|
test -z "$FLEX" && AC_MSG_ERROR([Flex is missing.])
|
|
test -z "$BISON" && AC_MSG_ERROR([Bison is missing.])
|
|
test -z "$M4" && AC_MSG_ERROR([M4 is missing.])
|
|
BIRD_CHECK_PROG_FLAVOR_GNU([$M4], , [AC_MSG_ERROR([Provided M4 is not GNU M4.])])
|
|
|
|
if test -n "$with_sysconfig" -a "$with_sysconfig" != no ; then
|
|
if test -f $with_sysconfig ; then
|
|
sysdesc=$with_sysconfig
|
|
else
|
|
sysdesc=$srcdir/sysdep/cf/$with_sysconfig
|
|
if ! test -f $sysdesc ; then
|
|
sysdesc=$sysdesc.h
|
|
fi
|
|
fi
|
|
elif test -f sysconfig.h ; then
|
|
sysdesc=sysconfig
|
|
else
|
|
case "$ip:$host_os" in
|
|
ipv6:linux*) sysdesc=linux-v6
|
|
default_iproutedir="/etc/iproute2"
|
|
;;
|
|
ipv4:linux*) sysdesc=linux
|
|
default_iproutedir="/etc/iproute2"
|
|
;;
|
|
ipv6:netbsd*) sysdesc=bsd-v6
|
|
CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
|
|
LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib"
|
|
;;
|
|
ipv4:netbsd*) sysdesc=bsd
|
|
CPPFLAGS="$CPPFLAGS -I/usr/pkg/include"
|
|
LDFLAGS="$LDFLAGS -L/usr/pkg/lib -R/usr/pkg/lib"
|
|
;;
|
|
ipv6:freebsd*) sysdesc=bsd-v6
|
|
;;
|
|
ipv4:freebsd*) sysdesc=bsd
|
|
;;
|
|
ipv6:dragonfly*) sysdesc=bsd-v6
|
|
;;
|
|
ipv4:dragonfly*) sysdesc=bsd
|
|
;;
|
|
ipv6:kfreebsd*) sysdesc=bsd-v6
|
|
;;
|
|
ipv4:kfreebsd*) sysdesc=bsd
|
|
;;
|
|
ipv6:openbsd*) sysdesc=bsd-v6
|
|
;;
|
|
ipv4:openbsd*) sysdesc=bsd
|
|
;;
|
|
*) AC_MSG_ERROR([Cannot determine correct system configuration. Please use --with-sysconfig to set it manually.])
|
|
;;
|
|
esac
|
|
sysdesc=$srcdir/sysdep/cf/$sysdesc.h
|
|
fi
|
|
AC_MSG_CHECKING([which OS configuration should we use])
|
|
AC_MSG_RESULT($sysdesc)
|
|
if ! test -f $sysdesc ; then
|
|
AC_MSG_ERROR([The system configuration file is missing.])
|
|
fi
|
|
sysname=`echo $sysdesc | sed 's/\.h$//'`
|
|
AC_DEFINE_UNQUOTED(SYSCONF_INCLUDE, "$sysdesc")
|
|
|
|
AC_MSG_CHECKING([system-dependent directories])
|
|
sysdep_dirs="`sed <$sysdesc '/^Link: /!d;s/^Link: \(.*\)$/\1/' | tr '\012' ' '` lib"
|
|
AC_MSG_RESULT($sysdep_dirs)
|
|
AC_SUBST(sysdep_dirs)
|
|
|
|
if test "$with_iproutedir" = no ; then with_iproutedir= ; fi
|
|
|
|
if test -n "$given_iproutedir"
|
|
then iproutedir=$with_iproutedir
|
|
else iproutedir=$default_iproutedir
|
|
fi
|
|
|
|
AC_SUBST(iproutedir)
|
|
|
|
AC_MSG_CHECKING([protocols])
|
|
protocols=`echo "$with_protocols" | sed 's/,/ /g'`
|
|
if test "$protocols" = no ; then protocols= ; fi
|
|
for a in $protocols ; do
|
|
if ! test -f $srcdir/proto/$a/Makefile ; then
|
|
AC_MSG_RESULT(failed)
|
|
AC_MSG_ERROR([Requested protocol $a not found.])
|
|
fi
|
|
AC_DEFINE_UNQUOTED(CONFIG_`echo $a | tr 'a-z' 'A-Z'`)
|
|
done
|
|
AC_MSG_RESULT(ok)
|
|
AC_SUBST(protocols)
|
|
|
|
case $sysdesc in
|
|
*/linux*|*/linux-v6*)
|
|
AC_CHECK_HEADER(linux/rtnetlink.h,,[AC_MSG_ERROR([Appropriate version of Linux kernel headers not found.])],[
|
|
#include <asm/types.h>
|
|
#include <sys/socket.h>
|
|
])
|
|
;;
|
|
esac
|
|
|
|
AC_CHECK_HEADER(syslog.h, [AC_DEFINE(HAVE_SYSLOG)])
|
|
AC_CHECK_HEADER(alloca.h, [AC_DEFINE(HAVE_ALLOCA_H)])
|
|
AC_MSG_CHECKING(whether 'struct sockaddr' has sa_len)
|
|
AC_TRY_COMPILE([#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
], [static struct sockaddr sa; int i = sizeof(sa.sa_len);],
|
|
[AC_MSG_RESULT(yes)
|
|
AC_DEFINE(HAVE_SIN_LEN,,sin_len)],
|
|
AC_MSG_RESULT(no))
|
|
|
|
AC_C_BIGENDIAN([AC_DEFINE(CPU_BIG_ENDIAN)], [AC_DEFINE(CPU_LITTLE_ENDIAN)],
|
|
[AC_MSG_ERROR([Cannot determine CPU endianity.])])
|
|
|
|
BIRD_CHECK_INTEGERS
|
|
BIRD_CHECK_STRUCT_ALIGN
|
|
BIRD_CHECK_TIME_T
|
|
BIRD_CHECK_STRUCT_IP_MREQN
|
|
|
|
if test "$enable_debug" = yes ; then
|
|
AC_DEFINE(DEBUGGING)
|
|
if test "$enable_memcheck" = yes ; then
|
|
AC_CHECK_LIB(dmalloc, dmalloc_debug)
|
|
if test $ac_cv_lib_dmalloc_dmalloc_debug != yes ; then
|
|
AC_CHECK_LIB(efence, malloc)
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
CLIENT=
|
|
CLIENT_LIBS=
|
|
if test "$enable_client" = yes ; then
|
|
CLIENT=birdc
|
|
AC_CHECK_LIB(history, add_history, CLIENT_LIBS="-lhistory")
|
|
AC_CHECK_LIB(ncurses, tgetent, USE_TERMCAP_LIB=-lncurses,
|
|
AC_CHECK_LIB(curses, tgetent, USE_TERMCAP_LIB=-lcurses,
|
|
AC_CHECK_LIB(tinfow, tgetent, USE_TERMCAP_LIB=-ltinfow,
|
|
AC_CHECK_LIB(tinfo, tgetent, USE_TERMCAP_LIB=-ltinfo
|
|
AC_CHECK_LIB(termcap, tgetent, USE_TERMCAP_LIB=-ltermcap)))))
|
|
AC_CHECK_LIB(readline, rl_callback_read_char, CLIENT_LIBS="-lreadline $CLIENT_LIBS $USE_TERMCAP_LIB",
|
|
AC_MSG_ERROR([[The client requires GNU readline library 2.1 or newer. Either install the library or use --disable-client to compile without the client.]]), $USE_TERMCAP_LIB)
|
|
AC_CHECK_LIB(readline, rl_crlf, AC_DEFINE(HAVE_RL_CRLF),,$USE_TERMCAP_LIB)
|
|
AC_CHECK_LIB(readline, rl_ding, AC_DEFINE(HAVE_RL_DING),,$USE_TERMCAP_LIB)
|
|
fi
|
|
AC_SUBST(CLIENT)
|
|
AC_SUBST(CLIENT_LIBS)
|
|
|
|
mkdir -p $objdir/sysdep
|
|
AC_CONFIG_HEADERS([$objdir/sysdep/autoconf.h:sysdep/autoconf.h.in])
|
|
AC_CONFIG_COMMANDS([merge],[[export CPP="$CPP"
|
|
$srcdir/tools/mergedirs $srcdir $srcdir_rel $objdir $sysdep_dirs]],
|
|
[[srcdir=$srcdir]
|
|
[srcdir_rel=$srcdir_rel]
|
|
[objdir=$objdir]
|
|
[sysdep_dirs="$sysdep_dirs"]])
|
|
AC_CONFIG_FILES($makefiles)
|
|
AC_OUTPUT
|
|
|
|
rm -f $objdir/sysdep/paths.h
|
|
|
|
cat >&AC_FD_MSG <<EOF
|
|
|
|
BIRD was configured with the following options:
|
|
Source directory: $srcdir
|
|
Object directory: $objdir
|
|
Iproute2 directory: $iproutedir
|
|
System configuration: $sysdesc
|
|
Debugging: $enable_debug
|
|
Routing protocols: $protocols
|
|
Client: $enable_client
|
|
EOF
|
|
rm -f $objdir/.*-stamp
|