#! /usr/bin/env bash

# Create ODB compiler Linux distribution.
#
# -rebuild
# -arch
# -libexecdir
#
trap 'exit 1' ERR

function error ()
{
  echo "$*" 1>&2
}

rebuild=n

arch=x86_64-linux-gnu
libexecdir=lib
rebuild=n

while [ $# -gt 0 ]; do
  case $1 in
    -rebuild)
      rebuild=y
      shift
      ;;
    -arch)
      shift
      arch=$1
      shift
      ;;
    -libexecdir)
      shift
      libexecdir=$1
      shift
      ;;
    *)
      error "unknown option: $1"
      exit 1
      ;;
  esac
done

wd=`pwd`
cpu=`echo $arch | sed -e 's/^\([^-]*\)-.*$/\1/'`

cver=`echo libcutl-?.*.tar.gz | sed -e "s%libcutl-\(.*\).tar.gz%\1%"`
over=`echo odb-?.*.tar.gz | sed -e "s%odb-\(.*\).tar.gz%\1%"`
mver=`echo $over | sed -e 's%\([0-9]*\.[0-9]*\).*%\1%'`

install_root="/tmp/odb-$over-$cpu-linux-gnu"

export PATH=/$arch/bin:$PATH

# Clean everything up if we are rebuilding.
#
if [ $rebuild = y ]; then
  rm -rf libcutl
  rm -rf odb
  rm -rf $install_root
  rm -rf libodb
  rm -rf libodb-boost
  rm -rf libodb-qt

  if [ ! -d ../boost-binary ]; then
    error "no boost distribution in ../boost-binary"
    exit 1
  fi

  tar xfz libcutl-$cver.tar.gz
  mv libcutl-$cver libcutl

  tar xfz odb-$over.tar.gz
  mv odb-$over odb

  libodb=`echo libodb-$mver.*.tar.gz | sed -e 's%\(.*\)\.tar\.gz%\1%'`
  tar xfz $libodb.tar.gz
  mv $libodb libodb

  libodb_boost=`echo libodb-boost-$mver.*.tar.gz | sed -e 's%\(.*\)\.tar\.gz%\1%'`
  tar xfz $libodb_boost.tar.gz
  mv $libodb_boost libodb-boost

  libodb_qt=`echo libodb-qt-$mver.*.tar.gz | sed -e 's%\(.*\)\.tar\.gz%\1%'`
  tar xfz $libodb_qt.tar.gz
  mv $libodb_qt libodb-qt
fi

rm -f /tmp/odb-$over-$cpu-linux-gnu.tar.bz2

# Build libcutl
#
cd libcutl

if [ $rebuild = y ]; then
  ../libcutl-configure
fi

make
cd ..

# Build odb
#
cd odb

if [ $rebuild = y ]; then
  ../odb-configure $over $arch $install_root $libexecdir
fi

make
make install-strip
cd ..

# Build libodb
#
cd libodb

if [ $rebuild = y ]; then
  ../libodb-configure $install_root/$libexecdir/odb/$arch
fi

make
cd odb
make install-data
cd ../..

# Build libodb-boost
#
cd libodb-boost

if [ $rebuild = y ]; then
  ../libodb-boost-configure $install_root/$libexecdir/odb/$arch
fi

make
make install-data
cd ..

# Build libodb-qt
#
cd libodb-qt

if [ $rebuild = y ]; then
  ../libodb-qt-configure $install_root/$libexecdir/odb/$arch
fi

make
make install-data
cd ..

# Copy /$arch over to installation
#
cp -r /$arch $install_root/$libexecdir/odb/

# Copy the default options file.
#
mkdir -p $install_root/etc/odb
cp -L ./default.options $install_root/etc/odb/

f="$install_root/etc/odb/default.options"

echo ''                                                                  >>$f
echo '# Debian/Ubuntu new multiarch support places certain headers into' >>$f
echo '# /usr/include/<arch>. Add that path to the search list but use'   >>$f
echo '# -idirafter to make sure it is used as a last resort only.'       >>$f
echo '#'                                                                 >>$f
if [ "$arch" = "x86_64-linux-gnu" ]; then
  echo '-idirafter /usr/include/x86_64-linux-gnu' >> $f
else
  echo '-idirafter /usr/include/i386-linux-gnu' >> $f
fi

# Copy manifest and README.
#
cp -L manifest $install_root/$libexecdir/odb/$arch/
cp -L README $install_root/

# Move doc and man out of share/
#
rm -rf $install_root/doc $install_root/man
mv $install_root/share/man $install_root/
mv $install_root/share/doc/odb $install_root/doc
rm -r $install_root/share

# Clean some things up.
#
rm -f `find $install_root -name '*.la'`

# Remove features.h from include-fixed. This file causes trouble on newer
# distributions.
#
include_fixed=`find $install_root/$libexecdir/odb/$arch -type d -name include-fixed`
rm $include_fixed/features.h

# Pack it up.
#
cd /tmp
tar cfj $wd/test/odb-$over-$cpu-linux-gnu.tar.bz2 odb-$over-$cpu-linux-gnu
cd $wd