#!/bin/bash

notes_from=""

OUT_BASE=$STORM_ROOT/release/storm
if [[ $1 == "zip" ]]
then
    OUT_EXT=.zip
    add="7z a"
    exe=".exe"
    lib=".dll"
else
    OUT_EXT=.tar
    add="tar -rf"
    exe=""
    lib=".so"
    notes_from=$1
fi
OUT=$OUT_BASE$OUT_EXT

function add_rename {
    cp $1 $2
    eval $add $OUT $2 > /dev/null
    rm $2
}

function add_rename_custom {
    cp $2 $3
    eval $add $1 $3 > /dev/null
    rm $3
}

if [[ -e $OUT ]]
then
    rm $OUT
fi

cd $STORM_ROOT

echo "Packing release..."

# Documentation.
find doc/ -type f | xargs --delimiter='\n' $add $OUT > /dev/null

# Release notes.
if [[ -f $notes_from ]]
then
    unzip -p $notes_from doc/release_notes.md > doc/release_notes.md
else
    release-notes > doc/release_notes.md
fi

$add $OUT doc/release_notes.md > /dev/null
rm doc/release_notes.md

# Source code.
find root/ -type f -not -name "*$lib" | grep -v "server-tests/" | xargs --delimiter='\n' $add $OUT > /dev/null

# Rename and add dynamic libraries
IFS=$'\n'
for j in $(find root/ -name "Release*$lib")
do
    name=$(echo $j | sed 's/Release//')
    add_rename $j $name
done

# Add the Emacs plugin.
add_rename Plugin/emacs.el storm-mode.el

# Copy the file to two separate ones, one for each release:
cp $OUT ${OUT_BASE}_mps$OUT_EXT
mv $OUT ${OUT_BASE}_smm$OUT_EXT

# Add the main executables
add_rename_custom ${OUT_BASE}_mps$OUT_EXT release/Storm_mps$exe Storm$exe
add_rename_custom ${OUT_BASE}_smm$OUT_EXT release/Storm_smm$exe Storm$exe

if [[ $1 != "zip" ]]
then
    if [[ -e ${OUT_BASE}_mps.tar.gz ]]
    then
	rm ${OUT_BASE}_mps.tar.gz
    fi
    if [[ -e ${OUT_BASE}_smm.tar.gz ]]
    then
	rm ${OUT_BASE}_smm.tar.gz
    fi

    gzip ${OUT_BASE}_mps.tar
    gzip ${OUT_BASE}_smm.tar
fi

echo "Done!"
