#!/bin/sh

PACKAGE=`grep "^PACKAGE = " .default | awk -F ' = ' '{print $2}'`
PREFIX=`grep "^PREFIX = " .default | awk -F ' = ' '{print $2}'`
DATADIR=`grep "^DATADIR = " .default | awk -F ' = ' '{print $2}'`
ETCDIR=`grep "^ETCDIR = " .default | awk -F ' = ' '{print $2}'`

BSD=0
UNAME="`uname`"
if [ "$UNAME" = "FreeBSD" -o "$UNAME" = "OpenBSD" -o "$UNAME" = "NetBSD" ]; then
	BSD=1
fi

GTK=gtk+-2.0

VERBOSITY=N
DEBUG=N
NLS=Y
SAFEMODE=Y
BACKGROUND=N
STRIP=N
GNOME_CONTROL_CENTER=Y

GTK_SPC=0
NLS_SPC=0
GNOME_CONTROL_CENTER_SPC=0

if [ -z "$CC" ]; then
  CC=gcc
fi

if [ -z "$CFLAGS" ]; then
  CFLAGS="-Wall -O -g"
fi

MAKE=`whereis "gmake" | tr -s ' ' '\n' | grep "bin/""gmake""$" | head -n 1`
if [ -z "$MAKE" ]; then
MAKE=`whereis "make" | tr -s ' ' '\n' | grep "bin/""make""$" | head -n 1`
else
  GMAKE="$MAKE"
fi
ECHO=`whereis "echo" | tr -s ' ' '\n' | grep "bin/""echo""$" | head -n 1`
PRINTF=`whereis "printf" | tr -s ' ' '\n' | grep "bin/""printf""$" | head -n 1`
WC=`whereis "wc" | tr -s ' ' '\n' | grep "bin/""wc""$" | head -n 1`

ERR()
{
  $PRINTF "\033[1;31m$*\033[0m" >&2
}

WARN()
{
  $PRINTF "\033[1;35m$*\033[0m"
}

INFO()
{
  $PRINTF "\033[1;36m$*\033[0m"
}

IMPORTANT()
{
  $PRINTF "\033[1;33m$*\033[0m"
}

NORMAL()
{
  $PRINTF "\033[1;32m$*\033[0m"
}

CHECK_MESSAGE()
{
  DOTS=30
  $ECHO -n "  Checking "
  NORMAL "$*"
  $ECHO -n " "
  total=$(($DOTS-`$ECHO "$*" | $WC -m`))
  while [ $total -ge 0 ]; do
    $ECHO -n "."
    total=$(($total-1))
  done
  $ECHO -n " "
}

PACKAGE_MESSAGE()
{
  ERR "\n\n  Please install "
  COUNT_PKG=1
  for PKG in $*; do
    if [ $COUNT_PKG -ge 2 ]; then
      if [ $COUNT_PKG -eq $# ]; then
	ERR " or "
      else
	ERR ", "
      fi
    fi
    ERR "\""
    WARN "$PKG"
    ERR "\""
  COUNT_PKG=$(($COUNT_PKG+1))
  done
  ERR " package. ABORT!\n\n"
}

VERSION_MESSAGE()
{
  ERR "$1  ERROR: "
  WARN "$2"
  ERR " > "
  WARN "$3"
  ERR " is needed to build $PACKAGE. ABORT!\n\n"
}

if [ "$1" = "-h" -o "$1" = "--help" -o "$1" = "-help" ]; then
  $ECHO ""
  WARN "Usage: $0 [OPTION]... [VAR=VALUE]...\n"
  $ECHO ""
  $ECHO "Installation directories:"
  $ECHO "  `INFO '--prefix=PREFIX'`     : install in PREFIX (e.g. /usr) `NORMAL '[default: /usr/local]'`"
  $ECHO "  `INFO '--sysconfdir=ETCDIR'` : system conf file install dir `NORMAL '[default: $PREFIX/etc/xdg]'`"
  $ECHO ""
  $ECHO "Optional Packages:"
  $ECHO "  `INFO '--with-gtk=2.0|3.0'`  : which gtk+ version to compile against `NORMAL '[default: 2.0]'`"
  $ECHO ""
  $ECHO "Optional Features:"
  $ECHO "  `INFO '--enable-verbosity'`  : enable verbosity output `NORMAL '[default: disable]'`"
  $ECHO "  `INFO '--enable-debug'`      : enable debug mode `NORMAL '[default: disable]'`"
  $ECHO "  `INFO '--disable-nls'`       : disable Native Language Support `NORMAL '[default: enable]'`"
  $ECHO "  `INFO '--disable-safe-mode'` : disable run in safe mode `NORMAL '[default: enable]'`"
  $ECHO "  `INFO '--enable-background'` : enable background for vte > 0.34.8 `NORMAL '[default: disable]'`"
  $ECHO ""
  $ECHO "run \``IMPORTANT 'make clean'`' to clean $PACKAGE builded files."
  $ECHO "run \``IMPORTANT 'make distclean'`' to clean $PACKAGE builded and configure files."
  $ECHO "run \``IMPORTANT 'make'`' to build $PACKAGE, include binary, data and translations."
  $ECHO "run \``IMPORTANT 'make install'`' to install $PACKAGE to your system."
  $ECHO "run \``IMPORTANT 'make uninstall'`' to unstall $PACKAGE in `NORMAL "$PREFIX"` from your system."
  $ECHO ""
  exit 0
fi

PKGCONFIG=`whereis "pkg-config" | tr -s ' ' '\n' | grep "bin/""pkg-config""$" | head -n 1`
if [ -z "$PKGCONFIG" ]; then
  ERR "\n  ERROR: \`"
  WARN "pkg-config"
  ERR "' package is needed to run this configure script. ABORT!\n\n"
  exit 1
fi

for opt do
  case "$opt" in
    --enable-verbosity)
      VERBOSITY=Y
      ;;
    --disable-verbosity)
      VERBOSITY=N
      ;;
    --enable-debug)
      DEBUG=Y
      ;;
    --disable-debug)
      DEBUG=N
      ;;
    --prefix=*)
      PREFIX=`$ECHO $opt | cut -d '=' -f 2`
      ;;
    --sysconfdir=*)
      ETCDIR=`$ECHO $opt | cut -d '=' -f 2`
      ;;
    --with-gtk=2.0)
      GTK_SPC=1
      ;;
    --with-gtk=3.0)
      GTK=gtk+-3.0
      GTK_SPC=1
      ;;
    --enable-nls)
      NLS_SPC=1
      ;;
    --disable-nls)
      NLS=N
      ;;
    --disable-safe-mode)
      SAFEMODE=N
      ;;
    --enable-background)
      BACKGROUND=Y
      ;;
    --enable-strip)
      STRIP=Y
      ;;
    --enable-gnome-control-center)
      GNOME_CONTROL_CENTER_SPC=1
      ;;
    --disable-gnome-control-center)
      GNOME_CONTROL_CENTER=N
      ;;
    *)
      WARN "\n  WARN: invalid option \""
      IMPORTANT "$opt"
      WARN "\" !!\n"
      ;;
  esac
done

$ECHO ""

# ---- Build Requirement ---- #

$PKGCONFIG --exists 'glib-2.0 >= 2.12' > /dev/null 2>&1
if [ $? != 0 ]; then
  VERSION_MESSAGE "" "Glib" "2.12"
  exit 1
fi

# ---- GTK ---- #

if [ "$GTK" = "gtk+-2.0" ]; then
  CHECK_MESSAGE 'GTK+2'
else
  CHECK_MESSAGE 'GTK+3'
fi

$PKGCONFIG --cflags $GTK > /dev/null 2>&1
if [ $? != 0 ]; then
  if [ "$GTK" = "gtk+-2.0" -a $GTK_SPC -eq 0 ]; then
    $ECHO "[NO]. Trying GTK+3 ..."
    GTK=gtk+-3.0
    CHECK_MESSAGE 'GTK+3'
    $PKGCONFIG --cflags $GTK > /dev/null 2>&1
    if [ $? != 0 ]; then
      ERR "[NG]"
      PACKAGE_MESSAGE "libgtk2.0-dev/libgtk-3-dev"
      exit 1
    else
      INFO "[OK] "
      WARN "(NOT RECOMMEND)\n"
    fi
  else
    if [ "$GTK" = "gtk+-2.0" ]; then
      ERR "[NG]"
      PACKAGE_MESSAGE "libgtk2.0-dev"
    else
      ERR "[NG]"
      PACKAGE_MESSAGE "libgtk-3-dev"
    fi
    exit 1
  fi
else
  if [ "$GTK" = gtk+-2.0 ]; then
    $PKGCONFIG --exists 'gtk+-2.0 >= 2.8' > /dev/null 2>&1
    if [ $? != 0 ]; then
      ERR "[NG]"
      VERSION_MESSAGE "\n\n" "Gtk+2" "2.8"
      exit 1
    fi

    $PKGCONFIG --exists 'gtk+-2.0 < 2.12' > /dev/null 2>&1
    if [ $? != 0 ]; then
      INFO "[OK]\n"
    else
      WARN "[OK]. But using Gtk+2 > 2.12 is recommended to build $PACKAGE.\n"
    fi
  else
    INFO "[OK].\n"
  fi
fi


# ---- VTE ---- #

if [ "$GTK" = 'gtk+-2.0' ]; then
  CHECK_MESSAGE 'VTE'
  VTE=vte
else
  CHECK_MESSAGE 'VTE 0.38'
  VTE=vte-2.91
fi

$PKGCONFIG --cflags $VTE > /dev/null 2>&1
if [ $? != 0 ]; then
  if [ "$GTK" = 'gtk+-2.0' ]; then
    ERR "[NG]"
    PACKAGE_MESSAGE "libvte-dev"
    exit 1
  else
    $ECHO "[NO]. Trying VTE 0.29 ..."
    VTE=vte-2.90
    CHECK_MESSAGE 'VTE 0.29'
    $PKGCONFIG --cflags $VTE > /dev/null 2>&1
    if [ $? != 0 ]; then
      ERR "[NG]"
      PACKAGE_MESSAGE "libvte-2.90-dev" "libvte-2.91-dev"
      exit 1
    else
      INFO "[OK]\n"
    fi
  fi
else
  if [ "$VTE" = 'vte' ]; then
    $PKGCONFIG --exists 'vte >= 0.12' > /dev/null 2>&1
    if [ $? != 0 ]; then
      ERR "[NG]"
      VERSION_MESSAGE "\n\n" "VTE" "0.12"
      exit 1
    fi
  fi

  INFO "[OK]\n"
fi

$PKGCONFIG --exists "$VTE < 0.34.8" > /dev/null 2>&1
if [ $? = 0 ]; then
  BACKGROUND=N
fi

$PKGCONFIG --exists "$VTE >= 0.38.0" > /dev/null 2>&1
if [ $? = 0 ]; then
  BACKGROUND=N
fi

# ---- NLS ---- #

if [ "$NLS" = 'Y' ]; then
  CHECK_MESSAGE 'Native Language Support'
  GETTEXT=`whereis "msgfmt" | tr -s ' ' '\n' | grep "bin/""msgfmt""$" | head -n 1`
  if [ -z "$GETTEXT" ]; then
    if [ $NLS_SPC -eq 1 ]; then
      ERR "[NG]"
      PACKAGE_MESSAGE "gettext"
      exit 1
    fi
    WARN "[NO]\n"
    NLS=N
  else
    INFO "[OK]\n"
  fi
fi


# ---- GNOME_CONTROL_CENTER ---- #

if [ "$GNOME_CONTROL_CENTER" = 'Y' ]; then
  GNOME_CONTROL_CENTER_DIR=`pkg-config --variable=defappsdir --define-variable=datadir='$(DATADIR)' gnome-default-applications 2>&1`
  if [ $? != 0 ]; then
    if [ $GNOME_CONTROL_CENTER_SPC -eq 1 ]; then
      CHECK_MESSAGE 'Gnome Control Center'
      ERR "[NG]"
      PACKAGE_MESSAGE "gnome-control-center-dev"
      exit 1
    fi
    GNOME_CONTROL_CENTER_DIR=
    GNOME_CONTROL_CENTER=N
  else
    CHECK_MESSAGE 'Gnome Control Center'
    INFO "[OK]\n"
  fi
fi

$ECHO ""

# ---- REPORT ---- #

INFO "=================================================\n"
IMPORTANT "  PREFIX     = $PREFIX\n"
IMPORTANT "  ETCDIR     = $ETCDIR\n"
if [ "$VERBOSITY" = 'Y' ]; then
  IMPORTANT "  VERBOSITY  = $VERBOSITY\n"
fi
if [ "$DEBUG" = 'Y' ]; then
  IMPORTANT "  DEBUG      = $DEBUG\n"
else
  $ECHO "  DEBUG      = $DEBUG"
fi
if [ "$NLS" = 'N' ]; then
  IMPORTANT "  NLS        = $NLS\n"
else
  $ECHO "  NLS        = $NLS"
fi
if [ "$SAFEMODE" = 'N' ]; then
  IMPORTANT "  SAFEMODE   = $SAFEMODE\n"
else
  $ECHO "  SAFEMODE   = $SAFEMODE"
fi
if [ "$BACKGROUND" = 'Y' ]; then
  IMPORTANT "  BACKGROUND = $BACKGROUND\n"
fi
if [ "$STRIP" = 'Y' ]; then
  IMPORTANT "  STRIP      = $STRIP\n"
fi
CHECK_CC=`whereis "$CC" | tr -s ' ' '\n' | grep "bin/""$CC""$" | head -n 1`
if [ -n "$CHECK_CC" ]; then
  if [ "$CC" != 'gcc' ]; then
    IMPORTANT "  CC         = $CC\n"
  fi
else
  ERR "  CC         = $CC\n"
fi
if [ -n "$CPPFLAGS" ]; then
  IMPORTANT "  CPPFLAGS   = $CPPFLAGS\n"
fi
if [ "$CFLAGS" != '-Wall -O -g' ]; then
  IMPORTANT "  CFLAGS     = $CFLAGS\n"
else
  $ECHO "  CFLAGS     = $CFLAGS"
fi
if [ -n "$LDFLAGS" ]; then
  IMPORTANT "  LDFLAGS    = $LDFLAGS\n"
fi

if [ -n "$GMAKE" ]; then
  IMPORTANT "  MAKE       = $MAKE\n"
else
if [ -z "$MAKE" ]; then
 ERR "  MAKE       = $MAKE\n"
fi
fi
$ECHO "  GTK        = $GTK"
$ECHO "  VTE        = $VTE"
if [ $BSD -eq 1 ]; then
  IMPORTANT "  MANDIR        = \$(PREFIX)/man/man1\n"
  IMPORTANT "  EXAMPLES_DIR  = \$(DATADIR)/examples/\$(BINARY)\n"
fi
if [ "$GNOME_CONTROL_CENTER" = 'Y' ]; then
  IMPORTANT "  GNOME_CONTROL_CENTER     = $GNOME_CONTROL_CENTER\n"
  IMPORTANT "  GNOME_CONTROL_CENTER_DIR = $GNOME_CONTROL_CENTER_DIR\n"
fi
INFO "=================================================\n"
$ECHO ""
if [ -n "$GMAKE" ]; then
  WARN "Please be sure to use \`"
  IMPORTANT "gmake"
  WARN "' instead of \`"
  IMPORTANT "make"
  WARN "' to compile $PACKAGE\!\!\n\n"
fi

$ECHO "BSD = $BSD" > .config
$ECHO "PREFIX = $PREFIX" >> .config
$ECHO "ETCDIR = $ETCDIR" >> .config
if [ $BSD -eq 1 ]; then
	$ECHO "MANDIR = \$(PREFIX)/man/man1" >> .config
	$ECHO "EXAMPLES_DIR = \$(DATADIR)/examples/\$(BINARY)" >> .config
fi
$ECHO "NLS = $NLS" >> .config
$ECHO "VERBOSITY = $VERBOSITY" >> .config
$ECHO "DEBUG = $DEBUG" >> .config
$ECHO "NLS = $NLS" >> .config
$ECHO "SAFEMODE = $SAFEMODE" >> .config
$ECHO "FORCE_ENABLE_VTE_BACKGROUND = $BACKGROUND" >> .config
$ECHO "STRIP = $STRIP" >> .config
$ECHO "CC = $CC" >> .config
$ECHO "CPPFLAGS = $CPPFLAGS" >> .config
$ECHO "CFLAGS = $CFLAGS" >> .config
$ECHO "LDFLAGS = $LDFLAGS" >> .config
$ECHO "MAKE = $MAKE" >> .config
$ECHO "GTK = $GTK" >> .config
$ECHO "VTE = $VTE" >> .config
$ECHO "GNOME_CONTROL_CENTER = $GNOME_CONTROL_CENTER" >> .config
$ECHO "GNOME_CONTROL_CENTER_DIR = $GNOME_CONTROL_CENTER_DIR" >> .config

