#!/bin/sh
# bpp-compile replace Ports.mk. @2002 by Antonio Gallo

# include bpp library
. /usr/libexec/bpp-functions

# Init vars
[ "$BPPROOT" = "" ] && BPPROOT=/badpenguin

# First of all try to guess about which package we are talking about :-)
if [ -f "$1/install/INFO" ]; then
  PKGROOT="$1"
elif [ -f "`pwd`/install/INFO" ]; then
  PKGROOT="`pwd`"
elif [ -f "$BPPROOT/$1/install/INFO" ]; then
  PKGROOT="$BPPROOT/$1"
else
  echoc RED "bpp-make: it was impossibile to find the directory where is"
  echoc RED "          the package to install. Use it as option"
  exit 1
fi

# Set system variable
PKGINFO=${PKGROOT}/install/INFO
WORKDIR=${PKGROOT}/workdir

# Load package settings
if [ ! -f "$PKGINFO" ]; then
  echoc RED "bpp-make: info file not found ($PKGINFO)"
  exit 1
fi
. "$PKGINFO"

# Set other variables
BPPFILE=${BPPROOT}/packages/${SECTION}/${PACKAGE}_${VERSION}.bpp

# export
export BPPROOT PKGROOT PKGINFO WORKDIR
export PACKAGE VERSION KVERSION EVERSION SECTION SOURCE_DIR


# DOWNLOAD SOURCE CODE
if [ "$SOURCE_FILES" = "" ]; then
  echoc YELLOW "bpp-compile: package does not use any source file"
else
  for i in $SOURCE_FILES ; do
    [ "$i" = "" ] && continue
    TARBALL=$BPPROOT/sources/$i
    if [ -f $TARBALL ]; then
      echo "- $i already downloaded"
      continue
    fi
    for j in $SOURCE_SITES ; do
      [ "$j" = "" ] && continue
      if [ "$SOURCE_SITES_SUBDIR" = "" ]; then
        RDIR="$j/$SOURCE_SITES_SUBDIR"
      else
        RDIR="$j"
      fi
      RFILE="$RDIR/$i"
      echo "> downloading $i from $RDIR"
      wget -c "$RFILE" --output-document="$TARBALL" -nd
      if [ $? -ne 0 ]; then
        echoc GREEN "- $RFILE has been downloaded."
        break
      fi
      rm -f $TARBALL
      echoc YELLOW "! unable to download $TARBALL"
    done
  done
fi
# end download source


mkdir -p $WORKDIR



# UNPACK SOURCE CODE
if [ -f $WORKDIR/.unpacked ]; then
  echo "- source code already unpacked"
else
  for i in $SOURCE_FILES ; do
    [ "$i" = "" ] && continue
    TARBALL=$BPPROOT/sources/$i
    echo "> extracing $i ..."
    untar "$TARBALL"  "$WORKDIR/" 1>/dev/null
    ASSERT "$?" "problem extracting $TARBALL"
  done
  touch $WORKDIR/.unpacked
fi
# end unpack



# CONFIGURING THE SOURCE
if [ -f $WORKDIR/.configured ]; then
  echo "- source code already configured"
else
  if [ "$NO_CONFIGURE" = "1" ]; then
    echo "- no configuration is needed"
  else
    if [ "$CONFIGURE" = "" ] ; then
      echoc CYAN "- GNU configure ..."
      cd $WORKDIR/$SOURCE_DIR
      ./configure --prefix=/usr --sysconfdir=/etc $CONFIGURE_FLAGS 1>/dev/null
      ASSERT "$?" "error while running GNU configure"
    else
      echoc CYAN "- custom configure ..."
      $CONFIGURE $CONFIGURE_FLAGS
      ASSERT "$?" "error while running custom configure"
    fi
    touch $WORKDIR/.configured
  fi
fi
# end configure



# COMPILE THE SOURCE
if [ -f $WORKDIR/.compiled ]; then
  echo "- source code already compiled"
else
  if [ "$PRE_MAKE" != "" ]; then
    echoc CYAN "- doing PRE_MAKE ..."
    $PRE_MAKE
    ASSERT "$?" "error while running PRE_MAKE"
  fi
  if [ "$NO_MAKE" != "1" ]; then
    echoc CYAN "- compiling ..."
    make -C $WORKDIR/$SOURCE_DIR  $MAKE_FLAGS  $MAKE_TARGET 1>/dev/null
    ASSERT "$?" "error while running MAKE"
  fi
  if [ "$POST_MAKE" != "" ]; then
    echoc CYAN "- doing POST_MAKE ..."
    $POST_MAKE
    ASSERT "$?" "error while running POST_MAKE"
  fi
  touch $WORKDIR/.compiled
fi
# end compile



# PRE INSTALL
if [ ! -f $WORKDIR/.flag-installed ]; then
  echoc CYAN "- touching pre-install file ..."
  touch $WORKDIR/.flag-installed
fi


if [ "$MAKE_INSTALL_FLAGS" = "" ]; then
  MAKE_INSTALL_FLAGS=install
fi

# INSTALLING
if [ -f $WORKDIR/.installed ]; then
  echo "- source code already installed"
else
  if [ "$PRE_MAKE_INSTALL" != "" ]; then
    echoc CYAN "- doing PRE_MAKE_INSTALL ..."
    su root -c "$PRE_MAKE_INSTALL" 
    ASSERT "$?" "error running PRE_MAKE_INSTALL"
  fi
  if [ "$NO_MAKE_INSTALL" = "1" ]; then
    echo "- no 'make install' is needed"
  else
    echoc CYAN "- installing ..."
    su root -c "make -C \"$WORKDIR/$SOURCE_DIR\"  $MAKE_INSTALL_FLAGS 1>/dev/null"
    ASSERT "$?" "error running MAKE_INSTALL"
  fi
  if [ "$POST_MAKE_INSTALL" != "" ]; then
    echoc CYAN "- doing POST_MAKE_INSTALL ..."
    su root -c "$POST_MAKE_INSTALL" 
    ASSERT "$?" "error running POST_MAKE_INSTALL"
  fi
  touch $WORKDIR/.installed
fi
# end install



# MANIFEST
if [ -f $PKGROOT/install/MANIFEST ]; then
  echo "- changed files already scanned"
else
  echoc CYAN "- scanning installed files"
  sync ; sleep 5 ; sync
# $1: package root dir
# $2: touchfile or milestone
# $3: change file to generate
  CHANGETEMP="$WORKDIR/.changelist"
  MANIFEST="$PKGROOT/install/MANIFEST"
  MILESTONE="$WORKDIR/.flag-installed"
  echo -n "- scaveging: : "
  echo -n " boot "  ; find /boot -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " var "   ; find /var  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " bin "   ; find /bin  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " etc "   ; find /etc  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " lib "   ; find /lib  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " root "  ; find /root -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " sbin "  ; find /sbin -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " usr "   ; find /usr  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " opt "   ; find /opt  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo ", sorting... "
  cat $CHANGETEMP | sort > $MANIFEST
  rm -f $CHANGETEMP

  echo
  echoc YELLOW "Please edit the list of touched files removing all the files that have been modified by the system during the installation phase. Press ENTER to continue"
  read x
  edit $MANIFEST
  ASSERT "$?" "scanning aborted!"
  echoc GREEN "- scanning done."
fi
# end manifest



# REPACK
if [ -f $WORKDIR/.repacked ]; then
  echo "- package has been already repacked"
else
  echoc CYAN "- re-packing files ..."
  bpp-repack "$PKGROOT" "$PKGROOT/install/MANIFEST" 
  ASSERT "$?" "error while repacking!"
  touch $WORKDIR/.repacked
fi

echoc GREEN "`basename $0`: done"
exit 0

