clyde 0.4.0

A cross-platform package manager for prebuilt applications
Documentation
#!/bin/bash
set -euo pipefail

. $(dirname $0)/functions.sh

init_archive_vars() {
    if [ "$OS_NAME" = "windows" ] ; then
        ARCHIVE_EXT=.zip
        ARCHIVE_CMD=7z
        ARCHIVE_CMD_ARGS=a
    else
        ARCHIVE_EXT=.tar.gz
        ARCHIVE_CMD=tar
        ARCHIVE_CMD_ARGS=czf
    fi
}

init_checksum_cmd() {
    CHECKSUM_CMD=$(which sha256sum 2> /dev/null || true)
    if [ -n "$CHECKSUM_CMD" ] ; then
        return
    fi
    local openssl_cmd=$(which openssl 2> /dev/null || true)
    if [ -n "$openssl_cmd" ] ; then
        CHECKSUM_CMD="$openssl_cmd sha256 -r"
        return
    fi
    die "Neither sha256sum nor openssl are installed, can't compute sha256 sum"
}

define_version() {
    local describe=$(git describe)
    echo "git describe: $describe"
    case "$describe" in
        *-*-g*)
            echo "Building a snapshot"
            VERSION=${describe//-*/}+$(git show --no-patch --format=%cd-%h --date=format:%Y%m%dT%H%M%S)
            ;;
        *)
            echo "Building from a tag"
            VERSION=$describe
            ;;
    esac
    echo "VERSION=$VERSION"
}

cd $(dirname $0)/..

init_system_vars
init_archive_vars
init_checksum_cmd
echo "Checksum command: $CHECKSUM_CMD"

APP_NAME=clyde
DATA_FILES="README.md CHANGELOG.md LICENSE"

define_version

ARTIFACTS_DIR=$PWD/artifacts
ARCHIVE_DIR=$APP_NAME-$VERSION
ARCHIVE_NAME=$APP_NAME-$VERSION-$ARCH-$OS_NAME$ARCHIVE_EXT

# If $CARGO_BUILD_TARGET is defined it must be included in the exe dir
EXE_DIR=target/${CARGO_BUILD_TARGET:-}/release

rm -rf $ARTIFACTS_DIR
mkdir -p $ARTIFACTS_DIR/$ARCHIVE_DIR

echo "Copying and stripping binaries"
for name in clyde clydetools ; do
    cp $EXE_DIR/${name}${EXE_EXT} $ARTIFACTS_DIR/$ARCHIVE_DIR
    strip $ARTIFACTS_DIR/$ARCHIVE_DIR/${name}${EXE_EXT}
done

echo "Copying data files"
cp $DATA_FILES $ARTIFACTS_DIR/$ARCHIVE_DIR

echo "Creating archive $ARTIFACTS_DIR/$ARCHIVE_NAME"
cd $ARTIFACTS_DIR
$ARCHIVE_CMD $ARCHIVE_CMD_ARGS $ARCHIVE_NAME $ARCHIVE_DIR

echo "Computing checksum"
$CHECKSUM_CMD $ARCHIVE_NAME