#!/bin/bash
#
# Copyright © 2014 Jesse 'Jeaye' Wilkerson
# See licensing in LICENSE file, or at:
#   http://www.opensource.org/licenses/MIT
#
# File: configure
# Author: Jesse 'Jeaye' Wilkerson

# Re-invoke the configure script
# and keep the output at bay.
if [ "$1" != "quiet" ];
then
  $0 "quiet" $@ > /dev/null
  exit $?
fi
shift

set -o errexit
set -o nounset

# Determine system
UNAME_LINUX=0
UNAME_CYGWIN=0
UNAME_OSX=0
UNAME=$(uname)
if [ "$UNAME" = "Linux" ];
then
  UNAME_LINUX=1
elif [ "$UNAME" = "Darwin" ];
then
  UNAME_OSX=1
elif [ "$(uname -o)" = "Cygwin" ];
then
  UNAME_CYGWIN=1
else
  echo "Invalid uname ($UNAME): Unsuppported platform" 1>&2
  exit 1
fi

log() { echo "$@" 1>&2; }
log_start() { printf "$@" 1>&2; }
log_end() { echo "$@" 1>&2; }

PROJECT=stdman
log "Configuring ${PROJECT}"

PREFIX=/usr/local
DATAROOTDIR=$PREFIX/share
MANDIR=$DATAROOTDIR/man
REFERENCE=./reference/en/cpp
TMP_MAN=./man
THREADS=8
CXX_PLATFORM_FLAGS=
LD_PLATFORM_LIBS=
if [ "1" -eq "$UNAME_LINUX" ];
then
  log "Platform: Linux"
elif [ "1" -eq "$UNAME_OSX" ];
then
  log "Platform: OS X"
  CXX_PLATFORM_FLAGS="-stdlib=libc++ -I /opt/local/include"
  LD_PLATFORM_LIBS="-lc++"
elif [ "1" -eq "$UNAME_CYGWIN" ];
then
  log "Platform: Cygwin (NOT TESTED)"
fi

# Parse params
for i in "$@"
do
  case $i in
    --prefix)
      shift
      PREFIX="$1"
      DATAROOTDIR=$PREFIX/share
      MANDIR=$DATAROOTDIR/man
      shift
      ;;
    --prefix=*)
      PREFIX="${i#*=}"
      DATAROOTDIR=$PREFIX/share
      MANDIR=$DATAROOTDIR/man
      shift
      ;;

    --datarootdir)
      shift
      DATAROOTDIR="$1"
      MANDIR=$DATAROOTDIR/man
      shift
      ;;
    --datarootdir=*)
      DATAROOTDIR="${i#*=}"
      MANDIR=$DATAROOTDIR/man
      shift
      ;;

    --mandir)
      shift
      MANDIR="$1"
      shift
      ;;
    --mandir=*)
      MANDIR="${i#*=}"
      shift
      ;;

    --reference)
      shift
      REFERENCE="$1"
      shift
      ;;
    --reference=*)
      REFERENCE="${i#*=}"
      shift
      ;;

    --tmp-man)
      shift
      TMP_MAN="$1"
      shift
      ;;
    --tmp-man=*)
      TMP_MAN="${i#*=}"
      shift
      ;;

    --threads)
      shift
      THREADS=$1
      shift
      ;;
    --threads=*)
      THREADS=${i#*=}
      shift
      ;;

    --help*)
      log "Usage: ./configure [OPTION...]"
      log
      log "  --help                              Show this help message"
      log "  --prefix=[/usr/local]               Set installation prefix"
      log "  --datarootdir=[/usr/local/share]    Set data root prefix"
      log "  --mandir=[/usr/local/share/man]     Set man prefix"
      log "  --reference=[./reference/en/cpp]    Set input prefix"
      log "  --tmp-man=[./man]                   Set temporary output prefix"
      log "  --threads=[8]                       Set number of threads to use"
      log
      exit 0
      ;;
    *)
      # Unknown option
      ;;
  esac
done

# Update after params
log
log "Reference location: $REFERENCE"
log "Install prefix: $PREFIX"
log "Install data prefix: $DATAROOTDIR"
log "Install man prefix: $MANDIR"
log "Temporary man location: $TMP_MAN"
log "Generation will be on $THREADS threads"
log

# Configure the makefile
log "Populating Makefile"
rm -f Makefile
sed "s#%CXX_PLATFORM_FLAGS%#${CXX_PLATFORM_FLAGS}#" ./Makefile.in |\
sed "s#%LD_PLATFORM_LIBS%#${LD_PLATFORM_LIBS}#" |\
sed "s#%PREFIX%#${PREFIX}#" |\
sed "s#%DATAROOTDIR%#${DATAROOTDIR}#" |\
sed "s#%MANDIR%#${MANDIR}#" |\
sed "s#%REFERENCE%#${REFERENCE}#" |\
sed "s#%TMP_MAN%#${TMP_MAN}#" |\
sed "s#%THREADS%#${THREADS}#" > Makefile

log "Done configuring ${PROJECT}"
log
log "To install, use \`make install\` with the appropriate permissions for your prefix"
