#!/bin/bash

# set -e

kconfig() {
	file=$1/net/ipv4/netfilter/Kconfig
	if [ "`grep 'config IP_NF_SET' $file`" ]; then
		return
	fi
	mv $file $file.orig
	grep -v endmenu $file.orig > $file
	cat Kconfig.ipset >> $file
	echo "endmenu" >> $file
}

config() {
	file=$1/net/ipv4/netfilter/Config.in
	if [ "`grep 'CONFIG_IP_NF_SET' $file`" ]; then
		return
	fi
	mv $file $file.orig
	grep -v endmenu $file.orig > $file
	cat Config.in.ipset >> $file
	echo "endmenu" >> $file
}

makefile() {
	file=$1/net/ipv4/netfilter/Makefile
	if [ "`grep CONFIG_IP_NF_SET $file`" ]; then
		return
	fi
	cp $file $file.orig
	cat Makefile.ipset >> $file
}

oldmakefile() {
	file=$1/net/ipv4/netfilter/Makefile
	if [ "`grep CONFIG_IP_NF_SET $file`" ]; then
		return
	fi
	lineno=`grep -n Rules.make $file | cut -f1 -d:`
	lineno=$((lineno-1))
	head -n $lineno $file > $file.head
	lineno=$((lineno+1))
	tail +$lineno $file > $file.tail
	cp $file $file.orig
	cat $file.head Makefile.ipset Makefile.export.ipset $file.tail > $file
}

tree() {
	cp include/linux/netfilter_ipv4/* $1/include/linux/netfilter_ipv4/
	cp *.c $1/net/ipv4/netfilter/
}

if [ -z "$1" ]; then
	echo "Error: missing kernel directory parameter."
	exit 1
fi
if [ -f $1/net/ipv4/netfilter/Kconfig ]; then
	tree $1
	kconfig $1
	makefile $1
elif [ -f $1/net/ipv4/netfilter/Config.in ]; then
	tree $1
	config $1
	oldmakefile $1
else
	echo "Error: The directory $1 doesn't look like a Linux 2.4/2.6 kernel source tree."
	exit 1
fi
