#!/bin/bash
#
#     Shorewall Packet Filtering Firewall RPM configuration program - V4.5
#
#     This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
#
#     (c) 2012 - Tom Eastep (teastep@shorewall.net)
#
#	Shorewall documentation is available at http://www.shorewall.net
#
#	This program is free software; you can redistribute it and/or modify
#	it under the terms of Version 2 of the GNU General Public License
#	as published by the Free Software Foundation.
#
#	This program is distributed in the hope that it will be useful,
#	but WITHOUT ANY WARRANTY; without even the implied warranty of
#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#	GNU General Public License for more details.
#
#	You should have received a copy of the GNU General Public License
#	along with this program; if not, write to the Free Software
#	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#       Usage: ./configure [ <option>=<setting> ] ...
#
#
################################################################################################
#
# Build updates this
#
VERSION=4.5.2.1

case "$BASH_VERSION" in
    [4-9].*)
	;;
    *)
	echo "ERROR: This program requires Bash 4.0 or later" >&2
	exit 1
	;;
esac

declare -A params
declare -A options

getfileparams() {
    while read option; do
	case $option in
	    \#*)
		;;
	    *)
		on=${option%=*}
		ov=${option#*=}
		ov=${ov%#*}
		[ -n "$on" ] && options[${on}]="${ov}"
		;;
	esac

    done

    return 0
}

for p in $@; do

    if [ -n "${p}" ]; then
	declare -u pn

	pn=${p%=*}
	pn=${pn#--}
	pv=${p#*=}

	if [ -n "${pn}" ]; then

	    case ${pn} in
		VENDOR)
		    pn=HOST
		    ;;
		SHAREDSTATEDIR)
		    pn=VARLIB
		    ;;
		DATADIR)
		    pn=SHAREDIR
		    ;;
	    esac

	    params[${pn}]="${pv}"
	else
	    echo "ERROR: Invalid option ($p)" >&2
	    exit 1
	fi
    fi
done

vendor=${params[HOST]}

if [ -z "$vendor" ]; then
    if [ -f /etc/os-release ]; then
	eval $(cat /etc/os-release | grep ^ID=)

	case $ID in
	    fedora)
		vendor=redhat
		;;
	    debian|ubuntu)
		vendor=debian
		;;
	    opensuse)
		vendor=suse
		;;
	    *)
		vendor="$ID"
		;;
	esac

	params[HOST]="$vendor"
    fi
fi

if [ -z "$vendor" ]; then
    case `uname` in
	Darwin)
	    params[HOST]=apple
	    rcfile=shorewallrc.apple
	    ;;

	cygwin*|CYGWIN*)
	    params[HOST]=cygwin
	    rcfile=shorewallrc.cygwin
	    ;;
	*)
	    if [ -f /etc/debian_version ]; then
		params[HOST]=debian
		rcfile=shorewallrc.debian
	    elif [ -f /etc/redhat-release ]; then
		params[HOST]=redhat
		rcfile=shorewallrc.redhat
	    elif [ -f /etc/slackware-version ] ; then
		params[HOST]=slackware
		rcfile=shorewallrc.slackware
	    elif [ -f /etc/SuSE-release ]; then
		params[HOST]=suse
		rcfile=shorewallrc.suse
	    elif [ -f /etc/arch-release ] ; then
		params[HOST]=archlinux
		rcfile=shorewallrc.archlinux
	    else
		params[HOST]=linux
		rcfile=shorewallrc.default
	    fi
	    ;;
    esac

    vendor=${params[HOST]}
elif [ $vendor = linux ]; then
    rcfile=shorewallrc.default;
else
    rcfile=shorewallrc.$vendor
    if [ ! -f $rcfile ]; then
	echo "ERROR: $vendor is not a recognized host type" >&2
	exit 1
    fi
fi

if [ $vendor = linux ]; then
    echo "INFO: Creating a generic Linux installation - " `date`;
else
    echo "INFO: Creating a ${vendor}-specific installation - " `date`;
fi

echo

getfileparams < $rcfile || exit 1

for p in ${!params[@]}; do
    options[${p}]="${params[${p}]}"
done

echo '#'                                                                 > shorewallrc
echo "# Created by Shorewall Core version $VERSION configure - " `date` >> shorewallrc
echo '#'                                                                >> shorewallrc

if [ $# -gt 0 ]; then
    echo "# Input: $@" >> shorewallrc
    echo '#'           >> shorewallrc
fi

if [ -n "${options[VARLIB]}" ]; then
    if [ -z "${options[VARDIR]}" ]; then
	options[VARDIR]='${VARLIB}/${PRODUCT}'
    fi
elif [ -n "${options[VARDIR]}" ]; then
    if [ -z "{$options[VARLIB]}" ]; then
	options[VARLIB]=${options[VARDIR]}
	options[VARDIR]='${VARLIB}/${PRODUCT}'
    fi
fi

for on in \
    HOST \
    PREFIX \
    SHAREDIR \
    LIBEXECDIR \
    PERLLIBDIR \
    CONFDIR \
    SBINDIR \
    MANDIR \
    INITDIR \
    INITSOURCE \
    INITFILE \
    AUXINITSOURCE \
    AUXINITFILE \
    SYSTEMD \
    SERVICEFILE \
    SYSCONFFILE \
    SYSCONFDIR \
    SPARSE \
    ANNOTATED \
    VARLIB \
    VARDIR
do
    echo "$on=${options[${on}]}"
    echo "$on=${options[${on}]}" >> shorewallrc
done