#!/bin/sh
#
# Configuration script for Services.
#
# Anope (c) 2003-2007 Anope team
# Contact us at dev@anope.org
#
# This program is free but copyrighted software; see the file COPYING for
# details.
#
# Based on the original code of Epona by PegSoft.
# Based on the original code of Services by Andy Church.
#
###########################################################################

echo2 () {
    $ECHO2 "$*$ECHO2SUF"    # these are defined later
}

exists () {                     # because some shells don't have test -e
    if [ -f $1 -o -d $1 -o -p $1 -o -c $1 -o -b $1 ] ; then
        return 0
    else
        return 1
    fi
}

Load_Cache () {
    if [ -f config.cache -a -r config.cache -a ! "$IGNORE_CACHE" ] ; then
        echo "Using defaults from config.cache. To ignore, ./Config -nocache"
        echo ""
        . config.cache
        CAN_QUICK="yes"
    else
        CAN_QUICK="no"
    fi
}

Run_Configure () {
WITH_BIN=""
WITH_DATA=""
WITH_ENC=""
WITH_RUN=""
WITH_PERM=""
WITH_MYSQL=""

if [ "$BINDEST" != "" ] ; then
    WITH_BIN=" --with-bindir=$BINDEST"
    WITH_DATA=" --with-datadir=$DATDEST"
fi

if [ "$DATDEST" != "" ] ; then
    WITH_DATA=" --with-datadir=$DATDEST"
fi

if [ "$RUNGROUP" != "" ] ; then
    WITH_RUN="  --with-rungroup=$RUNGROUP"
fi

if [ "$UMASK" != "" ] ; then
    WITH_PERM=" --with-permissions=$UMASK"
fi

if [ "$MYSQL" != "yes" ] ; then
    WITH_MYSQL=" --without-mysql"
fi


echo "./configure $WITH_BIN $WITH_DATA $WITH_ENC $WITH_RUN $WITH_PERM $WITH_MYSQL"

./configure $WITH_BIN $WITH_DATA $WITH_ENC $WITH_RUN $WITH_PERM $WITH_MYSQL
}

ECHO2SUF=''
if [ "`echo -n a ; echo -n b`" = "ab" ] ; then
	ECHO2='echo -n'
elif [ "`echo 'a\c' ; echo 'b\c'`" = "ab" ] ; then
        ECHO2='echo' ; ECHO2SUF='\c'
elif [ "`printf 'a' 2>&1 ; printf 'b' 2>&1`" = "ab" ] ; then
        ECHO2='printf "%s"'
else
        # oh well...
        ECHO2='echo'
fi
export ECHO2 ECHO2SUF

###########################################################################
# Init values
###########################################################################

BINDEST=$HOME/services
DATDEST=$HOME/services
RUNGROUP=
UMASK=
IRCTYPE="no default"
CAN_QUICK="no"

###########################################################################
# Check out the options
###########################################################################
while [ $# -ge 1 ] ; do
        if [ $1 = "--help" ] ; then
                echo "Config utility for Anope"
                echo "------------------------"
                echo "Syntax: ./Config [options]"
                echo "-nocache     Ignore settings saved in config.cache"
                echo "-nointro     Skip intro (disclaimer, etc)"
                echo "-quick       Skip questions, go straight to configure"
                exit 0
        elif [ $1 = "-nocache" ] ; then
                IGNORE_CACHE="1"
        elif [ $1 = "-nointro" ] ; then
                NO_INTRO="1"
        elif [ $1 = "-quick" -o $1 = "-q" ] ; then
                Load_Cache
                if [ $CAN_QUICK = "yes" ] ; then
                    Run_Configure
                else
                    echo ""
                    echo "Can't find cache file (config.cache), aborting..."
                fi
                exit 0
        fi
        shift 1
done

###########################################################################
if [ ! "$NO_INTRO" ] ; then
        clear
		. ./version.log
        cat .BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | more
        echo ""
else
        echo ""
fi

echo "Beginning Services configuration."
echo ""

###########################################################################
# Load the cache
###########################################################################
if [ ! "$IGNORE_CACHE" ] ; then
        Load_Cache
fi

# Ask the user anything we need to know ahead of time.

export ok INPUT

####

ok=0
echo "Note: press Return for the default, or enter a new value."
echo "In what directory do you want the binaries to be installed?"
while [ $ok -eq 0 ] ; do
	echo2 "[$BINDEST] "
	if read INPUT ; then : ; else echo "" ; exit 1 ; fi
	if [ ! "$INPUT" ] ; then
		INPUT=$BINDEST
	fi
	if [ ! -d "$INPUT" ] ; then
		if exists "$INPUT" ; then
			echo "$INPUT exists, but is not a directory!"
		else
			echo "$INPUT does not exist.  Create it?"
			echo2 "[y] "
			read YN
			if [ "$YN" != "n" ] ; then
				if mkdir -p $INPUT ; then
					ok=1
				fi
			fi
		fi
	elif exists "$INPUT/include/services.h" ; then
		echo "You cannot use the Services source directory as a target directory."
	else
		ok=1
	fi
done
BINDEST=$INPUT
DATDEST=$INPUT
echo ""


####

ok=0
echo "Where do you want the data files to be installed?"
while [ $ok -eq 0 ] ; do
        echo2 "[$DATDEST] "
        if read INPUT ; then : ; else echo "" ; exit 1 ; fi
        if [ ! "$INPUT" ] ; then
                INPUT=$DATDEST
        fi
        if [ ! -d "$INPUT" ] ; then
                if exists "$INPUT" ; then
                        echo "$INPUT exists, but is not a directory!"
                else
                        echo "$INPUT does not exist.  Create it?"
                        echo2 "[y] "
                        read YN
                        if [ "$YN" != "n" ] ; then
                                if mkdir -p $INPUT ; then
                                        ok=1
                                fi
                        fi
                fi
        elif exists "$INPUT/include/services.h" ; then
                echo "You cannot use the Services source directory as a target directory."
        else
                ok=1
        fi
done
DATDEST=$INPUT
echo ""

####


OLD_RUNGROUP="$RUNGROUP"
if [ "$RUNGROUP" ] ; then
  echo "Which group should all Services data files be owned by?  (If Services"
  echo "should not force files to be owned by a particular group, type "\"none\"
  echo "(without the quotes) and press Return.)"
else
  echo "Which group should all Services data files be owned by?  (If Services"
  echo "should not force files to be owned by a particular group, just press"
  echo "Return.)"
fi
echo2 "[$RUNGROUP] "
if read INPUT ; then : ; else echo "" ; exit 1 ; fi
if [ "$INPUT" ] ; then
        if [ "$INPUT" = "none" ] ; then
                RUNGROUP=""
        else
                RUNGROUP="$INPUT"
        fi
fi
echo ""

####

if [ ! "$UMASK" -o "$RUNGROUP" != "$OLD_RUNGROUP" ] ; then
        if [ "$RUNGROUP" ] ; then
                UMASK=007
        else
                UMASK=077
        fi
fi

ok=0
echo "What should the default umask for data files be (in octal)?"
echo "(077 = only accessible by owner; 007 = accessible by owner and group)"
while [ $ok -eq 0 ] ; do
        echo2 "[$UMASK] "
        if read INPUT ; then : ; else echo "" ; exit 1 ; fi
        if [ ! "$INPUT" ] ; then
                INPUT=$UMASK
        fi
        if [ `echo "$INPUT" | grep -c '[^0-7]'` -gt 0 ] ; then
                echo "$UMASK is not a valid octal number!"
        else
                if [ "`echo $INPUT | cut -c1`" != "0" ] ; then
                        INPUT=0$INPUT
                fi
                ok=1
        fi
done
UMASK=$INPUT
echo ""

####

ok=0
DEF=yes
echo "Allow anope to automatically check for mysql libaries?"
echo "unless you get errors with make, there is no need to"
echo "change this setting."
while [ $ok -eq 0 ] ; do
        echo2 "[$DEF] "
        if read INPUT ; then : ; else echo "" ; exit 1 ; fi
        if [ ! "$INPUT" ] ; then
                INPUT=$DEF
        fi
        case $INPUT in
                n*|N*)
			MYSQL=
			ok=1
			;;
                y*|Y*)
			MYSQL="yes"
			ok=1
			;;
                *)
                        echo "Please enter 'yes' or 'no'."
                        ;;
        esac
done
echo ""

####


################################################################################
# Store values
################################################################################
echo2 "Saving configuration results in config.cache... "

cat <<EOT >config.cache
BINDEST="$BINDEST"
DATDEST="$DATDEST"
RUNGROUP="$RUNGROUP"
UMASK=$UMASK
IRCTYPE="$IRCTYPE"
IRCTYPE_DEF="$IRCTYPE_DEF"
MYSQL="$MYSQL"
EOT
echo "done."


################################################################################
# Build the configure string
################################################################################
Run_Configure
