From 3b88c76df6ef9d183125defd802a8625bb61b6e5 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Mon, 8 Jul 2013 16:27:36 +0200 Subject: configure, Makefile: Conditionally build tools Instead of halting out the entire build build if one dependency is not available, only exclude the tools that link against it from building. The configure script will now print a list of all tools that will be built -- and in case some libaries are not available -- that will not be built. Also add checks for libcli and libnet which mausezahn depends on. Signed-off-by: Tobias Klauser --- Makefile | 1 + configure | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 102 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index dc39aa4..36ec443 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,7 @@ SUBLEVEL = 8 EXTRAVERSION = -rc0 NAME = Ziggomatic +TOOLS ?= $(CONFIG_TOOLS) TOOLS ?= netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn # For packaging purposes, prefix can define a different path. diff --git a/configure b/configure index 4ebe013..9884233 100755 --- a/configure +++ b/configure @@ -5,11 +5,34 @@ MISSING_PKG_CONFIG=0 MISSING_DEFS=0 MISSING_NACL=0 +TOOLS="netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn" +TOOLS_NOBUILD="" + [ -z $CC ] && CC=cc TMPDIR=$(mktemp -d config.XXXXXX) trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM +tools_remove() +{ + local _tools=$TOOLS + TOOLS="" + for tool in $_tools ; do + case "$tool" in + $1) + m=`expr match \"$TOOLS_NOBUILD\" '$1'` + if [ "$m" == "0" ] ; then + TOOLS_NOBUILD="$TOOLS_NOBUILD $tool" + fi + ;; + *) TOOLS="$TOOLS $tool" ;; + esac + done + + TOOLS=${TOOLS# } + TOOLS_NOBUILD=${TOOLS_NOBUILD# } +} + check_pkg_config() { echo -n "[*] Checking pkg-config ... " @@ -65,6 +88,7 @@ EOF if [ ! -x $TMPDIR/nacltest ] ; then echo "[NO]" MISSING_NACL=1 + tools_remove "curvetun" else echo "[YES]" echo "CONFIG_NACL_INC_DIR:=$NACL_INC_DIR" >> Config @@ -109,6 +133,7 @@ EOF if [ ! -x $TMPDIR/libnltest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "trafgen" else echo "[YES]" fi @@ -134,6 +159,8 @@ EOF if [ ! -x $TMPDIR/tpackettest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "netsniff-ng" + tools_remove "trafgen" else echo "[YES]" fi @@ -160,6 +187,8 @@ EOF if [ ! -x $TMPDIR/ncursestest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "flowtop" + tools_remove "ifpps" else echo "[YES]" fi @@ -175,7 +204,6 @@ check_libgeoip() void main(void) { - GeoIP *geoip; int dbs[] = { GEOIP_CITY_EDITION_REV1, GEOIP_CITY_EDITION_REV1_V6, @@ -184,8 +212,7 @@ void main(void) GEOIP_ASNUM_EDITION, GEOIP_ASNUM_EDITION_V6, }; - - geoip = GeoIP_new(0); + GeoIP *geoip = GeoIP_new(0); } EOF @@ -193,6 +220,9 @@ EOF if [ ! -x $TMPDIR/geoiptest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "netsniff-ng" + tools_remove "astraceroute" + tools_remove "flowtop" else echo "[YES]" fi @@ -211,7 +241,6 @@ check_libnf_ct() void main(void) { struct nf_conntrack *ct; - const uint32_t id = nfct_get_attr_u32(ct, ATTR_ID); } EOF @@ -220,6 +249,7 @@ EOF if [ ! -x $TMPDIR/nfcttest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "libnetfilter-conntrack" else echo "[YES]" fi @@ -234,9 +264,7 @@ check_zlib() void main(void) { - gzFile fp; - - fp = gzopen("foo.gz", "rb"); + gzFile fp = gzopen("foo.gz", "rb"); } EOF @@ -244,6 +272,9 @@ EOF if [ ! -x $TMPDIR/ztest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "netsniff-ng" + tools_remove "astraceroute" + tools_remove "flowtop" else echo "[YES]" fi @@ -267,6 +298,7 @@ EOF if [ ! -x $TMPDIR/urcutest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "flowtop" else echo "[YES]" fi @@ -290,6 +322,55 @@ EOF if [ ! -x $TMPDIR/pcaptest ] ; then echo "[NO]" MISSING_DEFS=1 + tools_remove "netsniff-ng" + tools_remove "mausezahn" + else + echo "[YES]" + fi +} + +check_libcli() +{ + echo -n "[*] Checking libcli ... " + + cat > $TMPDIR/clitest.c << EOF +#include + +void main(void) +{ + struct cli_def *cli = cli_init(); +} +EOF + + $CC -o $TMPDIR/clitest $TMPDIR/clitest.c -lcli >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/clitest ] ; then + echo "[NO]" + MISSING_DEFS=1 + tools_remove "mausezahn" + else + echo "[YES]" + fi +} + +check_libnet() +{ + echo -n "[*] Checking libnet ... " + + cat > $TMPDIR/nettest.c << EOF +#include + +void main(void) +{ + char err_buf[LIBNET_ERRBUF_SIZE]; + libnet_t *l = libnet_init(LIBNET_LINK_ADV, "ethX", err_buf); +} +EOF + + $CC -o $TMPDIR/nettest $TMPDIR/nettest.c -lnet >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/nettest ] ; then + echo "[NO]" + MISSING_DEFS=1 + tools_remove "mausezahn" else echo "[YES]" fi @@ -313,12 +394,15 @@ check_libgeoip check_zlib check_urcu check_libpcap +# mausezahn dependencies +check_libcli +check_libnet if [ "$MISSING_DEFS" == "1" ] ; then echo "[!] Some libraries or header definitions are missing or too old." - echo " Please refer to the INSTALL file for the libraries needed to" - echo " build netsniff-ng." - exit 1 + echo " Thus certain tools will not be built (see below). Please" + echo " refer to the INSTALL file for the libraries needed to build" + echo " the complete netsniff-ng toolkit." fi if [ "$MISSING_NACL" == "1" ] ; then @@ -327,9 +411,15 @@ if [ "$MISSING_NACL" == "1" ] ; then echo " distro or build it manually using 'make nacl' and make sure" echo " that the NACL_INC_DIR and NACL_LIB_DIR variables are set" echo " appropriately." - exit 1 fi +if [ "x$TOOLS_NOBUILD" != "x" ] ; then + echo "[!] The following tools will *not* be built: $TOOLS_NOBUILD" +fi + +echo "[*] The following tools will be built: $TOOLS" + +echo "CONFIG_TOOLS=$TOOLS" >> Config echo "CONFIG_OK=1" >> Config exit 0 -- cgit v1.2.3-54-g00ecf