# Broadband Forum IEEE 1905.1/1a stack
# 
# Copyright (c) 2017, Broadband Forum
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 
# Subject to the terms and conditions of this license, each copyright
# holder and contributor hereby grants to those receiving rights under
# this license a perpetual, worldwide, non-exclusive, no-charge,
# royalty-free, irrevocable (except for failure to satisfy the
# conditions of this license) patent license to make, have made, use,
# offer to sell, sell, import, and otherwise transfer this software,
# where such license applies only to those patent claims, already
# acquired or hereafter acquired, licensable by such copyright holder or
# contributor that are necessarily infringed by:
# 
# (a) their Contribution(s) (the licensed copyrights of copyright holders
#     and non-copyrightable additions of contributors, in source or binary
#     form) alone; or
# 
# (b) combination of their Contribution(s) with the work of authorship to
#     which such Contribution(s) was added by such copyright holder or
#     contributor, if, at the time the Contribution is added, such addition
#     causes such combination to be necessarily infringed. The patent
#     license shall not apply to any other combinations which include the
#     Contribution.
# 
# Except as expressly stated above, no rights or licenses from any
# copyright holder or contributor is granted under this license, whether
# expressly, by implication, estoppel or otherwise.
# 
# DISCLAIMER
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.

# This is a simple "packaging" utility that executes Make and installs the
# output binaries in a "deployment" folder.
#
# Fell free to customize this to your own development/testing environment
#
# Usage:
#
#   ./release_compile.sh <type>
#
# ...where <type> can take any of the following values:
#
#  - "cvs"
#      The tools will be built and installed in "$RELEASE_FOLDER/<version_tag>",
#      but only if that folder did not already existed (otherwise, it won't do
#      anything)
#
#  - "VersionXXX" (ex: "VersionA7", "VersionB13", ...)
#      The tools will be built and installed in
#      "$RELEASE_FOLDER/VersionXXX/<version_tag>", wiping a previous folder with
#      the same name in case it existed.
#
# In both cases, "<version_tag>" is the value contained in the first line of
# file "version.txt" and it must have the following format:
#
#   lowercase "i" + monotonically increasing number
#
# Examples: i145, i146, i147, ....
#
# The last line of output produced by this script will always contain two words:
#   1. The HASH of the current git commit
#   2. The path to the folder where the release has been installed.
#

set -e

RELEASE_FOLDER="/external_dir/fs-rd-server/releases/Ieee1905Tools";

CURRENT_GIT_COMMIT=`git show | head -1 | cut -d" " -f2`

function help_and_quit
{
    echo "You must provide one (and only one) argument, wich must be either ";
    echo "the string 'cvs' or a string starting with 'Version' (examples: ";
    echo "'VersionA7', 'VersionB13', ...)"
    echo ""
    echo "$CURRENT_GIT_COMMIT <ERROR>"
    exit -1;
}


# Check validity of input arguments
#####################################################

echo ""

if [[ $# -ne 1 ]]; then
    help_and_quit;
fi

if [[ "$1" != "cvs" ]] && [[ "$1" != "CVS" ]] && ! [[ "$1" =~ "Version" ]]; then
    help_and_quit;
fi

version_tag=`cat version.txt | head -1`

if ! [[ "$version_tag" =~ ^i[0-9+]+$ ]]; then
    echo "Invalid version tag in file 'version.txt'";
    echo "Open that file and make sure the first line contains a valid ";
    echo "version tag, which looks like this: o+[number] (ex: 'o106')";
    echo ""
    echo "$CURRENT_GIT_COMMIT <ERROR>"
    exit -1;
fi


# Check if the requested version is already installed
#####################################################

echo "*************************************************************************"
echo "Setup..."
echo "*************************************************************************"

if [[ "$1" == "cvs" ]] || [[ "$1" == "CVS" ]]; then

    INSTALL_FOLDER=$RELEASE_FOLDER/$version_tag;

    if [[ -d $INSTALL_FOLDER ]]; then
        echo "The CVS version you are trying to generate is already installed "
        echo "in the 'releases' folder ($INSTALL_FOLDER)"
        echo "If you *really* want to regenerate it, first *manually* delete "
        echo "that folder and then re-execute this script"
        echo "Exiting..."
        echo ""
        echo "$CURRENT_GIT_COMMIT $INSTALL_FOLDER" 
        exit 0;
    fi

else

    INSTALL_FOLDER=$RELEASE_FOLDER/$1/$version_tag

    if [[ -d $INSTALL_FOLDER ]]; then
        echo "The destination folder where tools are going to be installed "
        echo "already existed ($INSTALL_FOLDER)"
        echo "We are going to wipe it out."
        echo ""
        
        rm -rf $INSTALL_FOLDER

    fi

    INSTALL_FOLDER_PARENT=$RELEASE_FOLDER/$1

    if ! [[ -d $INSTALL_FOLDER_PARENT ]]; then
        echo "Creating folder $INSTALL_FOLDER_PARENT ..."
        mkdir $INSTALL_FOLDER_PARENT;
    fi
fi

echo "Destination folder is: $INSTALL_FOLDER"


# Build Linux (X86 generic) tools
#####################################################

echo ""
echo "*************************************************************************"
echo "Building Linux (X86 generic) tools..."
echo "*************************************************************************"

PLATFORM=linux FLAVOUR=x86_generic make clean all
rm -rf linux_x86_generic
mkdir  linux_x86_generic
cp output/al_entity  linux_x86_generic
cp output/hle_entity linux_x86_generic


# Build Linux (ARM wrt1900acx) tools
#####################################################

echo ""
echo "*************************************************************************"
echo "Building Linux (ARM wrt1900acx) tools..."
echo "*************************************************************************"

PLATFORM=linux FLAVOUR=arm_wrt1900acx make clean all
rm -rf linux_arm_wrt1900acx
mkdir  linux_arm_wrt1900acx
cp output/al_entity  linux_arm_wrt1900acx
cp output/hle_entity linux_arm_wrt1900acx


# Build Linux (X86 Windows mingw cross-compilation) tools
#########################################################

echo ""
echo "*************************************************************************"
echo "Building Linux (X86 Windows mingw cross-compilation) tools..."
echo "*************************************************************************"

PLATFORM=linux FLAVOUR=x86_windows_mingw make clean all
rm -rf linux_x86_windows_mingw
mkdir  linux_x86_windows_mingw
cp output/hle_entity linux_x86_windows_mingw/hle_entity.exe


# Install 
#####################################################

echo ""
echo "*************************************************************************"
echo "Installing ..."
echo "*************************************************************************"

mkdir -p $INSTALL_FOLDER

echo "X86 generic binaries   --> $INSTALL_FOLDER/linux_x86_generic/*"
mv linux_x86_generic $INSTALL_FOLDER

echo "ARM wrt1900acx binaries --> $INSTALL_FOLDER/linux_arm_wrt1900acx/*"
mv linux_arm_wrt1900acx $INSTALL_FOLDER

echo "X86 windows mingw binaries --> $INSTALL_FOLDER/linux_x86_windows_mingw/*"
mv linux_x86_windows_mingw $INSTALL_FOLDER

make clean &>/dev/null
git archive --format=tar.gz --prefix=ieee1905/ HEAD > ieee1905_src.tgz
echo "Source code            --> $INSTALL_FOLDER/ieee1905_src.tgz"
mv ieee1905_src.tgz $INSTALL_FOLDER/

echo ""
echo $CURRENT_GIT_COMMIT $INSTALL_FOLDER