summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--INSTALL3
-rw-r--r--Makefile5
-rwxr-xr-xconfigure245
4 files changed, 254 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index e46b817..bde10bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,9 @@ fuzzing/
# Ignore if someone adapts Makefile
Makefile
+# Ignore build config generated by configure
+Config
+
# Other documentation ignores
*.md
*.ps
diff --git a/INSTALL b/INSTALL
index 6fb3eb3..32c93eb 100644
--- a/INSTALL
+++ b/INSTALL
@@ -55,8 +55,9 @@ repository root directory:
$ cd netsniff-ng/
-The installation (deinstallation) process done by make is fairly simple:
+The installation (deinstallation) process is fairly simple:
+ $ ./configure
$ make
# make install
diff --git a/Makefile b/Makefile
index 8a8b76b..9ad9db5 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,8 @@
# Copyright 2012 - 2013 Daniel Borkmann <borkmann@gnumaniacs.org>
# Subject to the GNU GPL, version 2.
+include Config
+
VERSION = 0
PATCHLEVEL = 5
SUBLEVEL = 8
@@ -14,7 +16,7 @@ TOOLS ?= netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn
PREFIX ?=
# Disable if you don't want it
-CCACHE ?= ccache
+CCACHE ?= $(CONFIG_CCACHE)
# Location of installation paths.
SBINDIR = $(PREFIX)/usr/sbin
@@ -203,6 +205,7 @@ install_all: $(foreach tool,$(TOOLS),$(tool)_install)
install_allbutcurvetun: $(foreach tool,$(filter-out curvetun,$(TOOLS)),$(tool)_install)
install_allbutmausezahn: $(foreach tool,$(filter-out mausezahn,$(TOOLS)),$(tool)_install)
clean mostlyclean: $(foreach tool,$(TOOLS),$(tool)_clean)
+ $(Q)$(call RM,Config)
realclean distclean clobber: $(foreach tool,$(TOOLS),$(tool)_distclean)
$(Q)$(call RMDIR,$(ETCDIRE))
mrproper: clean distclean
diff --git a/configure b/configure
new file mode 100755
index 0000000..a5e8e21
--- /dev/null
+++ b/configure
@@ -0,0 +1,245 @@
+#!/bin/bash
+# This isn't a configure generated by autoconf!
+
+MISSING_PKG_CONFIG=0
+MISSING_DEFS=0
+MISSING_NACL=0
+
+[ -z $CC ] && CC=cc
+
+TMPDIR=$(mktemp -d config.XXXXXX)
+trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM
+
+check_pkg_config()
+{
+ echo -n "[*] Checking pkg-config ... "
+
+ if [ "x$(which pkg-config)" == "x" ] ; then
+ echo "[NO]"
+ MISSING_PKG_CONFIG=1
+ else
+ echo "[YES]"
+ fi
+}
+
+check_ccache()
+{
+ echo -n "[*] Checking ccache ... "
+
+ if [ "x$(which ccache)" == "x" ] ; then
+ echo "[NO]"
+ echo "CONFIG_CCACHE=" >> Config
+ else
+ echo "[YES]"
+ echo "CONFIG_CCACHE=ccache" >> Config
+ fi
+}
+
+check_nacl()
+{
+ echo -n "[*] Checking nacl ... "
+
+ cat > $TMPDIR/nacltest.c << EOF
+#include "crypto_hash_sha512.h"
+#include "crypto_verify_32.h"
+#include "crypto_hash_sha512.h"
+#include "crypto_box_curve25519xsalsa20poly1305.h"
+#include "crypto_scalarmult_curve25519.h"
+#include "crypto_auth_hmacsha512256.h"
+
+int main(void) { }
+EOF
+
+ if [ -z $NACL_INC_DIR ] ; then
+ NACL_INC_DIR="/usr/include/nacl"
+ fi
+
+ if [ -z $NACL_LIB_DIR ] ; then
+ NACL_LIB_DIR="/usr/lib"
+ fi
+
+ LDFLAGS="-L $NACL_LIB_DIR"
+ CFLAGS="-I $NACL_INC_DIR"
+
+ $CC $CFLAGS $LDFLAGS -o $TMPDIR/nacltest $TMPDIR/nacltest.c >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/nacltest ] ; then
+ echo "[NO]"
+ MISSING_NACL=1
+ else
+ echo "[YES]"
+ echo "CONFIG_NACL_INC_DIR:=$NACL_INC_DIR" >> Config
+ echo "CONFIG_NACL_LIB_DIR:=$NACL_LIB_DIR" >> Config
+ fi
+
+}
+
+check_libnl()
+{
+ echo -n "[*] Checking libnl ... "
+
+ cat > $TMPDIR/libnltest.c << EOF
+#include <libnl3/netlink/genl/genl.h>
+#include <libnl3/netlink/genl/family.h>
+#include <libnl3/netlink/genl/ctrl.h>
+#include <libnl3/netlink/msg.h>
+#include <libnl3/netlink/attr.h>
+#include <libnl3/netlink/version.h>
+
+#if LIBNL_VER_NUM < LIBNL_VER(3,0)
+# error incompatible libnl version
+#endif
+
+void main(void)
+{
+ struct nl_sock *sock = nl_socket_alloc();
+ struct nl_cache *nl_cache;
+ int ret = genl_connect(sock);
+
+ ret = genl_ctrl_alloc_cache(sock, &nl_cache);
+}
+EOF
+
+ $CC -W -Wall \
+ $(pkg-config --cflags libnl-3.0) \
+ $(pkg-config --cflags libnl-genl-3.0) \
+ -o $TMPDIR/libnltest \
+ $TMPDIR/libnltest.c \
+ $(pkg-config --libs libnl-3.0) \
+ $(pkg-config --libs libnl-genl-3.0) \
+ >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/libnltest ] ; then
+ echo "[NO]"
+ MISSING_DEFS=1
+ else
+ echo "[YES]"
+ fi
+}
+
+check_tpacket()
+{
+ echo -n "[*] Checking tpacket ... "
+
+ cat > $TMPDIR/tpackettest.c << EOF
+#include <stdio.h>
+#include <linux/if_packet.h>
+
+struct tpacket3_hdr *hdr;
+
+void main(void)
+{
+ printf("%d\n", hdr->tp_status);
+}
+EOF
+
+ $CC -o $TMPDIR/tpackettest $TMPDIR/tpackettest.c >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/tpackettest ] ; then
+ echo "[NO]"
+ MISSING_DEFS=1
+ else
+ echo "[YES]"
+ fi
+}
+
+check_ncurses()
+{
+ echo -n "[*] Checking ncurses ... "
+
+ cat > $TMPDIR/ncursestest.c << EOF
+#include <curses.h>
+
+void main(void)
+{
+ WINDOW *screen = initscr();
+}
+EOF
+
+ $CC $(pkg-config --cflags ncurses) -o $TMPDIR/ncursestest $TMPDIR/ncursestest.c $(pkg-config --libs ncurses) >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/ncursestest ] ; then
+ echo "[NO]"
+ MISSING_DEFS=1
+ else
+ echo "[YES]"
+ fi
+}
+
+check_libgeoip()
+{
+ echo -n "[*] Checking libGeoIP ... "
+
+ cat > $TMPDIR/geoiptest.c << EOF
+#include <GeoIP.h>
+#include <GeoIPCity.h>
+
+void main(void)
+{
+ GeoIP *geoip;
+}
+EOF
+
+ $CC -o $TMPDIR/geoiptest $TMPDIR/geoiptest.c >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/geoiptest ] ; then
+ echo "[NO]"
+ MISSING_DEFS=1
+ else
+ echo "[YES]"
+ fi
+
+}
+
+check_libnf_ct()
+{
+ echo -n "[*] Checking libnetfilter-conntrack ... "
+
+ cat > $TMPDIR/nfcttest.c << EOF
+#include <libnetfilter_conntrack/libnetfilter_conntrack.h>
+#include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h>
+#include <libnetfilter_conntrack/libnetfilter_conntrack_dccp.h>
+#include <libnetfilter_conntrack/libnetfilter_conntrack_sctp.h>
+
+void main(void)
+{
+ struct nfconntrack *ct;
+}
+EOF
+
+ $CC -o $TMPDIR/nfcttest $TMPDIR/nfcttest.c >> $TMPDIR/config.log 2>&1
+ if [ ! -x $TMPDIR/nfcttest ] ; then
+ echo "[NO]"
+ MISSING_DEFS=1
+ else
+ echo "[YES]"
+ fi
+
+}
+echo "# This file is autogenerated by the configure script" > Config
+check_pkg_config
+
+if [ "$MISSING_PKG_CONFIG" == "1" ] ; then
+ echo "[!] pkg-config is not installed on your system or not in the PATH"
+ exit 1
+fi
+
+check_ccache
+check_nacl
+check_libnl
+check_tpacket
+check_ncurses
+check_libgeoip
+
+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
+fi
+
+if [ "$MISSING_NACL" == "1" ] ; then
+ echo "[!] The NaCl crypto library is currently not present on your"
+ echo " system or could not be found. Either install it from your"
+ 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
+
+exit 0