#!/bin/sh
#
# roll.sh : build a release tarball
#
# USAGE: roll.sh SOURCE [SIGNING-USER]
#
#   The "signing user" is the name of the key that you'll be signing the
#   release with.
#

# Run tests to ensure that our requirements are met

RELEASECHECK="`echo $0 | sed 's/roll.sh$/releasecheck.sh/'`"
${RELEASECHECK} || exit 1

dirname="$1"
user="$2"
separate_deps="$3"

if test "$#" != 1 && test "$#" != 2 && test "$#" != 3; then
  echo "USAGE: $0 SOURCE [SIGNING-USER] [separate_dependencies]" >&2
  echo "  see the comments in this script for more info." >&2
  exit 1
fi


split="---------------------------------------------------------------------"

echo $split
echo ""

# make sure that the perms are good for the tarball
umask 022

echo "Eliminating unwanted files (e.g. .cvsignore) and generating initial"
echo "files via buildconf ..."
echo ""

find $dirname -name autom4te*.cache | xargs rm -rf
find $dirname -name STATUS | xargs rm -rf

(cd ${dirname} && ./buildconf) || exit 1

find $dirname -name autom4te*.cache | xargs rm -rf

echo ""
echo "Fixup the timestamps preventing remake of generated files."
touch $dirname/modules/ssl/ssl_expr_parse.c
touch $dirname/modules/ssl/ssl_expr_parse.h
touch $dirname/modules/ssl/ssl_expr_scan.c
echo ""

echo $split
echo ""
echo "Removing Manual Source Files."
echo ""
find $dirname/docs/manual -name \*.xml -o -name \*.xml.\* | xargs rm -rf 
find $dirname/docs/manual -name \*.xsl -o -name \*.xsl.\* | xargs rm -rf 

if test "${separate_deps}" = 1; then
    echo $split
    echo ""
    echo "Moving dependencies to their own tarball, .gz, and .bz2 files ..."
    echo ""
    depsdir="${dirname}-deps/${dirname}"
    mkdir -p ${depsdir}/srclib
    mv "${dirname}/srclib/apr" "${depsdir}/srclib"
    mv "${dirname}/srclib/apr-util" "${depsdir}/srclib"
    tar -C "${dirname}-deps" -cf ${dirname}-deps.tar ${dirname}
    gzip -9 --to-stdout ${dirname}-deps.tar > ${dirname}-deps.tar.gz
    bzip2 -9 ${dirname}-deps.tar
fi

echo $split
echo ""
echo "Building the tarball, .gz, and .bz2 files ..."
echo ""

tar cf ${dirname}.tar ${dirname}
gzip -9 --to-stdout ${dirname}.tar > ${dirname}.tar.gz
bzip2 -9 ${dirname}.tar

echo $split
echo ""
echo "Cleaning up and signing the files ..."
echo ""

md5sum="`which md5sum md5 2> /dev/null | head -1`"
if test -x "${md5sum}"; then
  ${md5sum} ${dirname}.tar.gz > ${dirname}.tar.gz.md5
  ${md5sum} ${dirname}.tar.bz2 > ${dirname}.tar.bz2.md5
  if test -f "${dirname}-deps.tar.gz"; then
    ${md5sum} ${dirname}-deps.tar.gz > ${dirname}-deps.tar.gz.md5
  fi
  if test -f "${dirname}-deps.tar.bz2"; then
    ${md5sum} ${dirname}-deps.tar.bz2 > ${dirname}-deps.tar.bz2.md5
  fi
fi

openssl="`which openssl 2> /dev/null | head -1`"
if test -x "${openssl}"; then
  ${openssl} sha1 ${dirname}.tar.gz > ${dirname}.tar.gz.sha1
  ${openssl} sha1 ${dirname}.tar.bz2 > ${dirname}.tar.bz2.sha1
  if test -f "${dirname}-deps.tar.gz"; then
    ${openssl} sha1 ${dirname}-deps.tar.gz > ${dirname}-deps.tar.gz.sha1
  fi
  if test -f "${dirname}-deps.tar.bz2"; then
    ${openssl} sha1 ${dirname}-deps.tar.bz2 > ${dirname}-deps.tar.bz2.sha1
  fi
fi

if test -x "`which pgp 2> /dev/null`"; then
  if test -n "${user}"; then
    args="-u ${user}"
  fi

  pgp -sba ${dirname}.tar.gz ${args}
  pgp -sba ${dirname}.tar.bz2 ${args}
  if test -f "${dirname}-deps.tar.gz"; then
    pgp -sba ${dirname}.tar.gz ${args}
  fi

  if test -f "${dirname}-deps.tar.bz2"; then
    pgp -sba ${dirname}.tar.bz2 ${args}
  fi
elif test -x "`which gpg 2> /dev/null`"; then
  if test -z "${user}"; then
    args="--default-key ${args}"
  else
    args="-u ${user} ${args}"
  fi

  gpg --armor ${args} --detach-sign ${dirname}.tar.gz
  gpg --armor ${args} --detach-sign ${dirname}.tar.bz2
  if test -f "${dirname}-deps.tar.gz"; then
    gpg --armor ${args} --detach-sign ${dirname}-deps.tar.gz
  fi
  if test -f "${dirname}-deps.tar.bz2"; then
    gpg --armor ${args} --detach-sign ${dirname}-deps.tar.bz2
  fi
else
  echo "PGP or GnuPG not found!  Not signing release!"
fi
