#!/bin/bash
#
# Package script for OpenPTC development kits
#
# syntax: package [name] [version] [depth]
#
# default:
#   
#   name    = package
#   version = 1.0.0
#   depth   = 1
#


# file archive function: archive_files source destination pattern depth
function archive_files()
{
    find "$1" -name "$3" -maxdepth "$4" -type f -print -exec tar -rf $TARFILE {} \;
}

# archive function: archive source destination depth
function archive()
{
    # archive text files
    archive_files $1 $1 "*.java" $3
    archive_files $1 $2 "*.cpp"  $3
    archive_files $1 $2 "*.h"    $3
    archive_files $1 $2 "*.asm"  $3
    archive_files $1 $2 "*.s"    $3
    archive_files $1 $2 "*.mak"  $3
    archive_files $1 $2 "*.bat"  $3
    archive_files $1 $2 "*.txt"  $3
    
    # archive binary files
    archive_files $1 $2 "*.tga" $3
    archive_files $1 $2 "*.dat" $3
    archive_files $1 $2 "*.raw" $3
    archive_files $1 $2 "*.ico" $3
    archive_files $1 $2 "*.lib" $3
    archive_files $1 $2 "*.a"   $3
}

# strip tabs from file function: strip_tabs_files directory pattern
function strip_tabs_files()
{
    find "$1" -name "$2" -type f -exec "$script_directory"striptabs {} \;
}

# strip tabs from files: strip_tabs directory
function strip_tabs()
{
    # strip tabs from text files
    strip_tabs_files $1 "*.java"
    strip_tabs_files $1 "*.cpp"
    strip_tabs_files $1 "*.h"
    strip_tabs_files $1 "*.asm"
    strip_tabs_files $1 "*.s"
    strip_tabs_files $1 "*.mak"
    strip_tabs_files $1 "*.bat"
    strip_tabs_files $1 "*.txt"
}

# convert file to unix function: convert_dos_files directory pattern
function convert_dos_files()
{
    find "$1" -name "$2" -type f -print -exec unix2dos -k -q {} \;
}

# convert to unix function: convert_dos directory
function convert_dos
{
    # convert text files to dos
    convert_dos_files $1 "*.java"
    convert_dos_files $1 "*.cpp"
    convert_dos_files $1 "*.h"
    convert_dos_files $1 "*.asm"
    convert_dos_files $1 "*.s"
    convert_dos_files $1 "*.mak"
    convert_dos_files $1 "*.bat"
    convert_dos_files $1 "*.txt"
}

# convert file to unix function: convert_unix_files directory pattern
function convert_unix_files()
{
    find "$1" -name "$2" -type f -print -exec dos2unix -k -q {} \;
}

# convert to unix function: convert_unix directory
function convert_unix
{
    # convert text files to unix
    convert_unix_files $1 "*.java"
    convert_unix_files $1 "*.cpp"
    convert_unix_files $1 "*.h"
    convert_unix_files $1 "*.asm"
    convert_unix_files $1 "*.s"
    convert_unix_files $1 "*.mak"
    convert_unix_files $1 "*.bat"
    convert_unix_files $1 "*.txt"
}



# get script directory
script_directory=${0%/*}
if [ -n "$script_directory" ]; then
    script_directory="$script_directory/"
fi



# package name
NAME=${1:-package}

# package version
VERSION=${2:-1.0.0}

# package levels
LEVELS=${3:-1}



# setup package name
PACKAGE=$NAME-$VERSION
rm -rf $PACKAGE
mkdir $PACKAGE

# set tar archive file name
TARFILE="$PACKAGE/$PACKAGE.tar"

# archive
echo
echo "ARCHIVING [$PACKAGE]"
archive . $PACKAGE $LEVELS
echo



# change to package directory
cd $PACKAGE

# extract tarfile archive
mkdir $PACKAGE
mv $PACKAGE.tar $PACKAGE
cd $PACKAGE
tar -xf $PACKAGE.tar
rm -f $PACKAGE.tar
cd ..

# strip tabs from text files
echo STRIPPING TABS [striptabs]
strip_tabs $PACKAGE
echo

# convert text files to dos
echo CONVERTING [unix2dos]
convert_dos $PACKAGE
echo

# zip the files
echo "COMPRESSING [$PACKAGE.zip]"
cd $PACKAGE
find . -type f -exec zip -9gr $PACKAGE.zip {} \;
mv $PACKAGE.zip ..
cd ..
echo

# convert text files to unix
echo CONVERTING [dos2unix]
convert_unix $PACKAGE
echo

# convert *.txt files to unix names
echo RENAMING [*.txt]
find . -name "*.txt" -type f -exec "$script_directory"txt2unix {} \;
echo

# tar files again with base set to $PACKAGE
echo "ACHIVING [$PACKAGE.tar]"
tar -vcf $PACKAGE.tar $PACKAGE
rm -rf $PACKAGE
echo

# compress tar file
echo "COMPRESSING [$PACKAGE.tar.gz]"
gzip -9 $PACKAGE.tar
echo

# leave package directory
cd ..
