#!/usr/bin/env bash
# $Id$
# Author: Firstname Lastname <email>
# Location: Install location for script
# Scenario: Issue that needs to be resolved
# Resolution: General description of script functionality
# Notes: Any additional information
WORK_DIR=${HOME}
TBIRD_VERSION=2.0.0.6
ENIGMAIL_VERSION=0.95.3

WGET_CMD=/usr/bin/wget
CP_CMD=/bin/cp
TAR_CMD=/bin/tar
MAKE_CMD=/usr/bin/make
LSB_RELEASE_CMD=/usr/bin/lsb_release

TBIRD_SRC="thunderbird-${TBIRD_VERSION}-source.tar.bz2"
ENIGMAIL_SRC="enigmail-${ENIGMAIL_VERSION}.tar.gz"
TBIRD_URL=\
"http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/${TBIRD_VERSION}/source/${TBIRD_SRC}"
ENIGMAIL_URL=\
"http://www.mozilla-enigmail.org/downloads/src/${ENIGMAIL_SRC}"
ENIGMAIL_MOZCONFIG=$(cat <<EOF
. \$topsrcdir/mail/config/mozconfig
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --enable-crypto
ac_add_options --enable-optimize
ac_add_options --enable-static-mail
ac_add_options --enable-application=mail
mk_add_options MOZ_CO_PROJECT=mail
EOF)

function die()
{
    echo "${1}"
    exit ${2}
}

function extract_args()
{
    ARCHIVE=${1}
    if [ $(expr match "${ARCHIVE}" '.*\([gb]z[2]*$\)') == "bz2" ]
    then
        TAR_ARGS="xjpf"
    elif [ $(expr match "${ARCHIVE}" '.*\([gb]z[2]*$\)') == "gz" ]
    then
        TAR_ARGS="xzpf"
    else
        TAR_ARGS="xpf"
    fi
    return
}

function install_deps()
{
    if ${LSB_RELEASE_CMD} -i | grep -q "Ubuntu"
    then
        sudo apt-get -y build-dep thunderbird
        sudo apt-get -y install wget
    elif ${LSB_RELEASE_CMD} -i | grep -q "Fedora"
    then
        sudo yum -y install thunderbird-devel
    fi
    return
}

function fetch_tarballs()
{
    for url in "${TBIRD_URL} ${ENIGMAIL_URL}"
    do
        ${WGET_CMD} ${url} || die "Unable to fetch ${url}" 1
    done
    return
}

function unpack_tarballs()
{
    extract_args ${TBIRD_SRC}
    ${TAR_CMD} ${TAR_ARGS} ${TBIRD_SRC} -C ${WORK_DIR} || die "Unable to extract ${TBIRD_SRC}" 1
    extract_args ${ENIGMAIL_SRC}
    ${TAR_CMD} ${TAR_ARGS} ${ENIGMAIL_SRC} -C ${WORK_DIR}/mozilla/mailnews/extensions || die "Unable to extract ${ENIGMAIL_SRC}" 1
    return
}

function prep_tbird()
{
    [ -d ${WORK_DIR}/mozilla ] || die "No such directory ${WORK_DIR}/mozilla" 1
    cd ${WORK_DIR}/mozilla
    echo "${ENIGMAIL_MOZCONFIG}" > .mozconfig
    ${MAKE_CMD} -f client.mk export || die "Build failed." 1
    cd modules/libreg
    ${MAKE_CMD} || die "Build failed." 1
    cd ../../xpcom/string
    ${MAKE_CMD} || die "Build failed." 1
    cd ..
    ${MAKE_CMD} || die "Build failed." 1
    cd obsolete
    ${MAKE_CMD} || die "Build failed." 1
    return
}
    
function build_enigmail()
{
    [ -d ${WORK_DIR}/mozilla/mailnews/extensions/enigmail ] || die "No such directory ${WORK_DIR}/mailnews/extensions/enigmail" 1
    cd ${WORK_DIR}/mozilla/mailnews/extensions/enigmail
    ./makemake -r
    ${MAKE_CMD} || die "Build failed." 1
    ${MAKE_CMD} xpi || die "Build failed." 1
    ${CP_CMD} -v ${WORK_DIR}/mozilla/dist/bin/enigmail*.xpi ${WORK_DIR} || die "Unable to copy extension to ${WORK_DIR}" 1
    return
}

function cleanup()
{
    cd ${WORK_DIR}
    rm -rf mozilla ${TBIRD_SRC} ${ENIGMAIL_SRC}
    return
}


# Main
cd ${WORK_DIR}
install_deps
fetch_tarballs
unpack_tarballs
prep_tbird
build_enigmail
cleanup

exit 0

# vim:syntax=sh
# vim:sw=4:softtabstop=4:expandtab
