#!/bin/sh
#
# Simple configuration script to configure which drivers should
# be used.

function abort()
{
  rm -f .confignew
  exit 1
}

function setboolean ()
{
  optionname="$1"
  optionvalue="$2"

  default=$(eval echo "\${$optionname}")

  if [ "$default" = "" ]
  then default=n
       default_y=y
       default_n=N
  else default=y
       default_y=Y
       default_n=n
  fi

  if [ "$optionvalue" = "" ]
  then optionvalue=$default
  fi

  if [ "$optionvalue" = "y" -o "$optionvalue" = "yes" -o "$optionvalue" = "Y" -o "$optionvalue" = "Yes" ]
  then echo "$optionname=y" >>.confignew
  else echo "#$optionname is not set" >>.confignew
  fi

  export $optionname=$optionvalue
}


function boolean ()
{
  optionprompt="$1"
  optionname="$2"
  default=$(eval echo "\${$optionname}")

  if [ "$default" = "" ]
  then default=n
       default_y=y
       default_n=N
  else default=y
       default_y=Y
       default_n=n
  fi

  echo -n "$optionprompt ($default_n/$default_y)? "
  read answer

  if [ "$answer" = "" ]
  then answer=$default
  fi

  if [ "$answer" = "y" -o "$answer" = "yes" -o "$answer" = "Y" -o "$answer" = "Yes" ]
  then echo "$optionname=y" >>.confignew
  else echo "#$optionname is not set" >>.confignew
  fi

  export $optionname=$answer
}

function string ()
{
  optionprompt="$1"
  optionname="$2"
  default=$(eval echo "\${$optionname}")

  echo -n "$optionprompt [$default]: "
  read answer

  if [ "$answer" = "" ]
  then answer="$default"
  fi

  echo "$optionname=\"$answer\"" >>.confignew

  export $optionname="$answer"
}


trap abort SIGINT SIGHUP SIGTERM

if [ -f .config ]
then . .config
fi

echo "CONFIG_DMX4LINUX=y" >.confignew

echo "------------[ hardware  ]------------"

boolean "dummy driver" CONFIG_DMX4LINUX_DUMMY
boolean "parport drivers" CONFIG_DMX4LINUX_PARPORT
if [ "$CONFIG_DMX4LINUX_PARPORT" = "y" ]
then
  boolean "  Lighting Solutions lpr2dmx" CONFIG_DMX4LINUX_PARPORT_LPR2DMX
  if [ "$CONFIG_DMX4LINUX_PARPORT_LPR2DMX" = "y" ]
  then
    boolean "    Support for lpr2dmx3 buffered-transfer mode" CONFIG_DMX4LINUX_PARPORT_LPR2DMX3
  fi
  boolean "  Soundlight dmxpcp" CONFIG_DMX4LINUX_PARPORT_DMXPCP
  boolean "  LLG dmx30" CONFIG_DMX4LINUX_PARPORT_DMX30
  boolean "  LLG dmx43" CONFIG_DMX4LINUX_PARPORT_DMX43
  boolean "  avr dmx-512" CONFIG_DMX4LINUX_PARPORT_AVRDMX
  boolean "  oksid dmx" CONFIG_DMX4LINUX_PARPORT_OKDDMX
fi

boolean "ISA based drivers" CONFIG_DMX4LINUX_ISA
if [ "$CONFIG_DMX4LINUX_ISA" = "y" ]
then
  boolean "  EnLight" CONFIG_DMX4LINUX_ISA_ENLIGHT
  boolean "  Soundlight SLH1512 A/B/C" CONFIG_DMX4LINUX_ISA_SLH
fi

boolean "PCI based drivers" CONFIG_DMX4LINUX_PCI
if [ "$CONFIG_DMX4LINUX_PCI" = "y" ]
then
#  boolean "  Soundlight SLH1514" CONFIG_DMX4LINUX_PCI_SLH1514
  boolean "  Digimedia / Soundlight 1515/2514" CONFIG_DMX4LINUX_DGMPCI
fi

boolean "USB based drivers" CONFIG_DMX4LINUX_USB
if [ "$CONFIG_DMX4LINUX_USB" = "y" ]
then
  boolean "  Lighting Solutions USB2DMX" CONFIG_DMX4LINUX_USB_USB2DMX
  boolean "  Sunlite USBDMX2" CONFIG_DMX4LINUX_USB_DMXSUNLITE
  boolean "  Enttec / FTDI chip" CONFIG_DMX4LINUX_USB_FTDI2DMX
fi

boolean "PCMCIA based drivers" CONFIG_DMX4LINUX_PCMCIA
if [ "$CONFIG_DMX4LINUX_PCMCIA" = "y" ]
then
  boolean "  Digimedia PCMCIA / Soundlight 2512" CONFIG_DMX4LINUX_PCMCIA_DGM
  if [ "$CONFIG_DMX4LINUX_PCMCIA_DGM" = "n" ]
  then boolean "  alternative Digimedia PCMCIA / Soundlight 2512" CONFIG_DMX4LINUX_DGM_CS
  fi
fi

boolean "I2C based drivers" CONFIG_DMX4LINUX_I2C
if [ "$CONFIG_DMX4LINUX_I2C" = "y" ]
then
  boolean "  QLightControler" CONFIG_DMX4LINUX_I2C_QLC
fi

# dgm_cs and dgm_pci are based on dgm.
if [ "$CONFIG_DMX4LINUX_DGM_CS" = "y" -o "$CONFIG_DMX4LINUX_DGMPCI" = "y" ]
then
  setboolean "CONFIG_DMX4LINUX_DGM" "y"
else
  setboolean "CONFIG_DMX4LINUX_DGM" "n"
fi

echo "------------[ utilities ]------------"

boolean "Use LIRC (infrared) library in applications" CONFIG_HAVE_LIRC
boolean "X based applications" CONFIG_HAVE_X
boolean "Curses based applications" CONFIG_HAVE_CURSES
boolean "XMMS plugin" CONFIG_HAVE_XMMS

if [ "$CONFIG_HAVE_XMMS" = "y" ]
then
  if which xmms-config 2>&1 | grep "no xmms-config" >/dev/null
  then
    echo
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!!  unable to find xmms-config command.      !!"
    echo "!!  Did you install the development package? !!"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo
  fi
fi

echo "------------[ paths ]------------"

if [ -z "$CONFIG_PCMCIAPATH" ]
then CONFIG_PCMCIAPATH=/etc/pcmcia
fi
if [ "$CONFIG_DMX4LINUX_PCMCIA" = "y" ]
then
  string "PCMCIA configuration path" CONFIG_PCMCIAPATH
  string "path to PCMCIA include path" PCMCIAINCLUDEPATH
fi

if [ -z "$KERNEL_RELEASE" ]
then
  KERNEL_RELEASE=$(uname -r)
fi

# check for the location of the kernel includes
LPATH=/lib/modules/$KERNEL_RELEASE/build/include

if [ -z "$LINUXINCLUDEPATH" ]
then
  LINUXINCLUDEPATH="$LPATH"
  if [ ! -d "$LINUXINCLUDEPATH" ]
  then
    LINUXINCLUDEPATH=/usr/src/linux/include
  fi
elif [ "$LINUXINCLUDEPATH" != "$LPATH" ]
then LINUXINCLUDEPATH="$LPATH"
fi

string  "Linux kernel include path" LINUXINCLUDEPATH

#-- check if we need to add some cflags for the driver modules --
if [ -f "$LINUXINCLUDEPATH/linux/autoconf.h" ]
then
  BUILD_WITH_VERSIONS=$(cat $LINUXINCLUDEPATH/linux/autoconf.h | awk '/#define[ \t]+CONFIG_MODVERSIONS[ \t]+(.*)/ {print $3;}')
elif [ -f "$LINUXINCLUDEPATH/linux/config.h" ]
then
  BUILD_WITH_VERSIONS=$(cat $LINUXINCLUDEPATH/linux/config.h | awk '/#define[ \t]+CONFIG_MODVERSIONS[ \t]+(.*)/ {print $3;}')
else
  BUILD_WITH_VERSIONS="n"
  boolean  "Is linux kernel build with version information?" BUILD_WITH_VERSIONS
fi
BUILD_WITH_VERSIONS=$(echo $BUILD_WITH_VERSIONS | sed -e 's/1/y/g' -e 's/0/n/g')
if [ "$BUILD_WITH_VERSIONS" = "y" ]
then
  DRIVER_CFLAGS="-DMODVERSIONS -include $LINUXINCLUDEPATH/linux/modversions.h"
fi


if [ -z "$CFLAGS" ]
then CFLAGS="-O2 -Wall"
fi
string "Compilation flags" CFLAGS $CFLAGS

if [ -z "$LDFLAGS" ]
then LDFLAGS=-L/usr/X11R6/lib
fi
string "Linker flags" LDFLAGS $LDFLAGS

if [ -z "$HEADERINSTALLPATH" ]
then HEADERINSTALLPATH=/usr/local/include
fi
string "Header install path" HEADERINSTALLPATH

# check for location of modules
MPATH=/lib/modules/$KERNEL_RELEASE/misc/dmx
if [ -z "$MODULEINSTALLPATH" ]
then MODULEINSTALLPATH=$MPATH
fi
if [ "$MODULEINSTALLPATH" != "$MPATH" ]
then MODULEINSTALLPATH=$MPATH
fi
string "Modules install path" MODULEINSTALLPATH

if [ -z "$BININSTALLPATH" ]
then BININSTALLPATH=/usr/local/bin
fi
string "Binaries install path" BININSTALLPATH

if [ -z "$LIBINSTALLPATH" ]
then LIBINSTALLPATH=/usr/local/lib
fi
string "Libraries install path" LIBINSTALLPATH

if [ -z "$MANINSTALLPATH" ]
then MANINSTALLPATH=/usr/local/man
fi
string "Manual pages install path" MANINSTALLPATH

if [ -z "$LDCONFIG" ]
then
  if (which ldconfig 2>/dev/null >/dev/null) ; then
    LDCONFIG=$(which ldconfig)
  else
    for i in "/usr/local/sbin" "/usr/sbin" "/sbin" ; do
      if [ -x $i/ldconfig ] ; then
        LDCONFIG=$i/ldconfig
      fi
    done
  fi
fi

while [ -z "$LDCONFIG" -o ! -x "$LDCONFIG" ]
do
  string "Where the hell is your ldconfig" LDCONFIG
done


# finished
sed -e 's/"//g' < .confignew > config.mk
mv -f .confignew .config

# some more stuff
DMXROOT=`pwd`
echo "DMXROOT=$DMXROOT" >> config.mk

echo "VERSIONMAJOR=2" >> config.mk
echo "VERSIONMINOR=5" >> config.mk
echo "DMXVERSION=2.5" >> config.mk

echo "DMXOUTMINOR=223" >> config.mk
echo "DMXINMINOR=224" >> config.mk

echo "AS31=${DMXROOT}/tools/as31-unix/as31" >> config.mk

# CROSS=mipsel-unknown-linux-gnu-
if [ "$CROSS" ]
then
  echo "CROSS=$CROSS" >>config.mk
fi
echo "LINKER="$CROSS"ld -r" >> config.mk
echo "CC="$CROSS"gcc" >>config.mk
echo "CXX="$CROSS"g++" >>config.mk
echo "AS="$CROSS"as" >>config.mk
echo "AR="$CROSS"ar" >>config.mk
echo "LD="$CROSS"ld" >>config.mk
echo "OBJCOPY="$CROSS"objcopy" >>config.mk
echo "OBJDUMP="$CROSS"objdump" >>config.mk
echo "STRIP="$CROSS"strip" >>config.mk
echo "NM="$CROSS"nm" >>config.mk

echo "CFLAGS+=-I${DMXROOT}/include" >> config.mk
echo "LDFLAGS+=-L${DMXROOT}/libs" >> config.mk
echo "LDCONFIG=$LDCONFIG" >>config.mk
echo "DRIVER_CFLAGS=$DRIVER_CFLAGS" >>config.mk
