bird/configure.in
Tomas Hlavacek 8322ecde12 Add lightweight client - birdcl
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).
2013-03-19 18:03:49 +01:00

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