#!/bin/sh
#
# Adapted from the pcmcia-cs/Configure file, license statement below:
#
# Configure 1.110 1999/06/24 17:37:36
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.0 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and
# limitations under the License.
#
# The initial developer of the original code is David A. Hinds
# <dhinds@hyper.stanford.edu>.  Portions created by David A. Hinds
# are Copyright (C) 1998 David A. Hinds.  All Rights Reserved.
#-------------------------------------------------------------------------
# linux-wlan-ng/Configure
#
# TODO: Since we're dependent on configured pcmcia source, we should change 
#       this such that it will ask for the pcmcia source dir and then read
#       all our stuff from pcmcia/config.mk.  Would simplify alot of things.
# 

fail ()
{
	echo ""
	echo "Configuration failed"
	echo ""
	exit 1
}


if [ -r config.out ]; then
	. ./config.out 2> /dev/null
else
	if [ ! -r config.in ]; then
		echo "config.in does not exist!"
		fail
	fi
	. ./config.in
fi


PROMPT=y

arg () {
    VALUE="`echo X"$2" | sed -e 's/^X--[a-zA-Z_]*=//'`"
    eval $1=\"$VALUE\"
}

usage () {
    echo "usage: $0 "
    exit 1
}

#=======================================================================

CONFIG=config.new
CONFIG_MK=config.mk
rm -f .prereq.ok $CONFIG $CONFIG_MK $MODVER

cat << 'EOF' > $CONFIG
#
# Automatically generated by 'make config' -- don't edit!
#
EOF

write_bool() {
    value=`eval echo '$'$1`
    if [ "$value" = "y" ] ; then
	echo "$1=y" >> $CONFIG
	echo "$1=y" >> $CONFIG_MK
    else
	echo "# $1 is not defined" >> $CONFIG
	echo "# $1 is not defined" >> $CONFIG_MK
    fi
}

write_str () {
    value=`eval echo '$'$1`
    echo "$1"=\"$value\" >> $CONFIG
    echo "$1=$value" >> $CONFIG_MK
}

prompt () {
    eval $3=\"$2\"
    if [ "$PROMPT" = "y" ] ; then
	/bin/echo "$1 [$2]: \c"
	read tmp
	if [ -n "$tmp" ] ; then eval $3=\"$tmp\" ; fi
    else
	/bin/echo "$1 [$2]"
    fi
}

ask_bool () {
    default=`eval echo '$'$2`
    if [ ! "$default" ] ; then default=n ; fi
    answer=""
    while [ "$answer" != "n" -a "$answer" != "y" ] ; do
	prompt "$1 (y/n)" "$default" answer
    done
    eval "$2=$answer"
    write_bool $2
}

ask_str () {
    default=`eval echo '$'$2`
    prompt "$1" "`echo $default`" answer
    eval $2=\"$answer\"
    write_str $2
}

#=======================================================================

echo ""
echo "---------------- Linux WLAN Configuration Script -------------"
echo ""
echo "The default responses are correct for most users."
echo ""

# Collect the kernel source tree and test for sanity

ask_str "Linux source directory" LINUX_SRC

if [ ! -f $LINUX_SRC/Makefile ] ; then
    echo "Linux source tree $LINUX_SRC is incomplete or missing!"
    if [ -d $LINUX_SRC/include/linux ] ; then
	echo "    The kernel header files are present, but not " \
	     "the full source code."
    fi
    echo "    See the HOWTO for a list of FTP sites for current" \
	 "kernel sources."
    fail
fi

# What kernel are we compiling for?

version () {
    expr $1 \* 65536 + $2 \* 256 + $3
}

echo ""
for TAG in VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION ; do
    eval `sed -ne "/^$TAG/s/[ 	]//gp" $LINUX_SRC/Makefile`
done
SRC_RELEASE=$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION
VERSION_CODE=`version $VERSION $PATCHLEVEL $SUBLEVEL`
echo "The kernel source tree is version $SRC_RELEASE."
if [ $VERSION_CODE -lt `version 2 0 0` ] ; then
    echo "This package requires at least a 2.0 series kernel."
    fail
fi
CUR_RELEASE=`uname -r`
if [ "$SRC_RELEASE" != "$CUR_RELEASE" ] ; then
    echo "WARNING: the current kernel is actually version $CUR_RELEASE."
fi

BUILD_ARCH=`uname -m | sed -e 's/i.86/i386/'`

# Check for consistent kernel build dates

CUR_D=`uname -v | sed -e 's/^#[0-9]* //;s/SMP //'`
CUR_D=`echo $CUR_D | sed -e 's/\(:[0-9][0-9]\) .* \([12][90]\)/\1 \2/'`
echo "The current kernel build date is $CUR_D."
UTS_VERSION="unknown";
if [ -f $LINUX_SRC/include/linux/compile.h ] ; then
    UTS_VERSION=`grep UTS_VERSION $LINUX_SRC/include/linux/compile.h |
	sed -e 's/.*"\(.*\)"/\1/'`
    SRC_D=`echo $UTS_VERSION | sed -e 's/^#[0-9]* //;s/SMP //'`
    SRC_D=`echo $SRC_D | sed -e 's/\(:[0-9][0-9]\) .* \([12][90]\)/\1 \2/'`
    if [ $SRC_RELEASE = $CUR_RELEASE -a "$SRC_D" != "$CUR_D" ] ; then
	echo "WARNING: the source tree has a build date of $SRC_D."
	if [ `date -d "$SRC_D" +%s` -gt `date -d "$CUR_D" +%s` ] ; then
	    echo "   Did you forget to install your new kernel?!?"
	fi
    fi
fi
echo ""

# PCMCIA Source dir
PCMCIA_SRC=`/sbin/cardctl -V 2>&1 | sed -e 's/cardctl version //'`
PCMCIA_SRC=/usr/src/pcmcia-cs-$PCMCIA_SRC
ask_str "pcmcia-cs source dir" PCMCIA_SRC

# Alternate install dir 
ask_str "Alternate target install directory" PREFIX
DESTDIR=$PREFIX
write_str DESTDIR

# Start looking for the destination module dir
MODDIR=$MODULES_DIR
if [ ! "$MODDIR" ] ; then
    if [ -d /lib/modules/preferred ] ; then
	MODDIR=/lib/modules/preferred
    else
	MODDIR=/lib/modules/$SRC_RELEASE
    fi
else
    MODDIR=`echo $MODDIR | \
        sed -e "s/[0-9]\.[0-9]\.[0-9]*\(-[A-Za-z0-9]*\)*/$SRC_RELEASE/"`
fi
ask_str "  Module install directory" MODDIR
MODULES_DIR=$MODDIR
write_str MODULES_DIR

# PCMCIA script dir
ask_str "PCMCIA script directory" PCMCIA_DIR

# Just write some out (we're not prompting right now)
write_str INST_EXEDIR

#=======================================================================

# How should the startup scripts be configured?

echo ""

if [ "$PREFIX" = "" ] ; then
    if [ -d /etc/rc.d/init.d -o -d /etc/init.d -o -d /sbin/init.d ] ; then
	echo "It looks like you have a System V init file setup."
	SYSV_INIT=y
	if [ -d /etc/rc.d/init.d ] ; then
	    echo "RC_DIR=/etc/rc.d" >> $CONFIG
	    echo "RC_DIR=/etc/rc.d" >> $CONFIG_MK
	elif [ -d /sbin/init.d ] ; then
	    echo "RC_DIR=/sbin" >> $CONFIG
	    echo "RC_DIR=/sbin" >> $CONFIG_MK
	else
	    echo "RC_DIR=/etc" >> $CONFIG
	    echo "RC_DIR=/etc" >> $CONFIG_MK
	fi
    else
	echo "It looks like you have a BSD-ish init file setup."
	if ! grep rc.wlan /etc/rc.d/rc.S >/dev/null ; then
	    echo "    You'll need to edit /etc/rc.d/rc.S to invoke" \
		 "/etc/rc.d/rc.wlan (for ISA/PCMCIA cards)"
	    echo "    so that wlan cards will be started at boot time."
	fi
	SYSV_INIT=
    fi
    write_bool SYSV_INIT
else
    ask_bool "System V init script layout" SYSV_INIT
    if [ "$SYSV_INIT" = "y" ] ; then
	ask_str "Top-level directory for RC scripts" RC_DIR
    fi
fi
if [ ! -x /sbin/depmod ] ; then INSTALL_DEPMOD=n ; fi
write_bool INSTALL_DEPMOD

echo ""

#=======================================================================
# Make sure our target architecture is the same as our build architecture.

WLAN_INSTALL_TYPE=sta
ask_str "Install drivers as (sta or ap)" WLAN_INSTALL_TYPE

#=======================================================================
# Make sure our target architecture is the same as our build architecture.

WLAN_TARGET_ARCH=$BUILD_ARCH
ask_str "Target Architecture?(only change if cross-compiling)" WLAN_TARGET_ARCH

#=======================================================================
# Make sure our target architecture is the same as our build architecture.

ask_bool "Build for debugging (see doc/config.debug)" WLAN_DEBUG

#=======================================================================

mv $CONFIG config.out

touch .prereq.ok

echo ""
echo "Configuration successful."
echo ""
