# mpk-build - Build packages.
# Copyright (C) 2008,2010 Cesar Strauss
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

build_source()
{
  : ${top_srcdir:=$name-$version}

  : ${pkg_builddir:=$builddir/$name-$version-$release/$top_srcdir}

  if [ -f $build_stamp ] ; then
    echo "Skipping build because stamp file $build_stamp exists"
    success
    exit 0
  fi

  if [ ! -d $pkg_builddir ]; then
    $mpk unpack $pkg
    if [ $? != 0 -o ! -d $pkg_builddir ]; then
      echo >&2 "$(basename $0) build: Could not unpack $pkg"
      exit 1
    fi
  fi
  
  cd $pkg_builddir

  src_build && success
}

src_build()
{
  do_build
}

src_configure()
{
  do_configure
}

src_compile()
{
  do_compile
}

src_install()
{
  do_install
}

do_build()
{
  src_configure || fail
  src_compile || fail
  src_install || fail
}

do_configure()
{
  setup_configure_options

  echo "Configuring $pkg..."
  mkdir -p ../logs
  logfile="../logs/configure.log"
  if test "X$MPK_VERBOSE" = "Xyes" ; then
    ( ( ( echo "$pkg_configure_opt" | xargs ./configure 2>&1 ; echo $? >&4) | \
	      tee ${logfile} 1>&3) 4>&1 | (read a ; exit $a)) 3>&1
  else
    echo "$pkg_configure_opt" | xargs ./configure 2>&1  > ${logfile}
  fi
}

do_compile()
{
  echo "Compiling $pkg..."
  mkdir -p ../logs
  logfile="../logs/make.log"
  if test "X$MPK_VERBOSE" = "Xyes" ; then
    ( ( ( ${MAKE} $default_make_opts $make_opts 2>&1 ; echo $? >&4) | \
	      tee ${logfile} 1>&3) 4>&1 | (read a ; exit $a)) 3>&1
  else
    ${MAKE} $default_make_opts $make_opts 2>&1 > ${logfile}
  fi

}

do_install()
{
  echo "Installing $pkg..."
  mkdir -p ../logs
  logfile="../logs/install.log"
  if test "X$MPK_VERBOSE" = "Xyes" ; then
    ( ( ( ${MAKE} install 2>&1 ; echo $? >&4) | \
	      tee ${logfile} 1>&3) 4>&1 | (read a ; exit $a)) 3>&1
  else
    ${MAKE} install 2>&1 > ${logfile}
  fi
}


fail()
{
  echo
  echo "================="
  echo "$pkg:"
  echo "  Build failed."
  echo "================="
  echo
  rm -f "$build_stamp"
  exit 1
}

success()
{
  echo
  echo "===================="
  echo "$pkg:"
  echo "  Build succeeded."
  echo "===================="
  echo
  echo "Success: `date`" > "$build_stamp"
}

if [ -z "$1" ]; then
  echo "Usage: $(basename $0) build package-name"
  exit 1
fi
pkg=$1

if [ -z "$pkg" ]; then
  echo "Usage: $(basename $0) build package-name ..."
  exit 1
fi

recipe=$(get_recipe_name $pkg) || exit 1

. $recipe

build_stamp="$builddir/${pkg}.done"

build_source

