Skip to content
Snippets Groups Projects
build.sh 3 KiB
Newer Older
#!/bin/bash
#
# for windows and Mac check the README
#
Massimiliano Adamo's avatar
Massimiliano Adamo committed
if ! which go &>/dev/null; then
    echo "Go is not installed or is not in \$PATH"
    echo "giving up..."
    exit
fi
Massimiliano Adamo's avatar
Massimiliano Adamo committed
unset GOBIN
Massimiliano Adamo's avatar
Massimiliano Adamo committed
BIN_NAME=acme-downloader
PATH=$PATH:$(go env GOPATH)/bin
GOPATH=$(go env GOPATH)
PROG_VERSION="1.0"
BUILDTIME=$(date -u '+%Y-%m-%d_%H:%M:%S')
REPO_DIR=$(dirname $0)
if [ "$REPO_DIR" = '.' ]; then
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    REPO_DIR=$(pwd)
Massimiliano Adamo's avatar
Massimiliano Adamo committed
test -L "${GOPATH}/src/${REPO_DIR}" || ln -sf "$REPO_DIR" "${GOPATH}/src/"
REPO_NAME=$(basename "$REPO_DIR")
cd "${GOPATH}/src/$REPO_NAME"

export PATH GOPATH

usage() {
    echo "Usage: $(basename $0)"
    echo "    -h | --help [Print this help and exit]"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    echo "    --os=OS     (Compile binary for this OS)"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    echo "    --arch=ARCH (Compile binary for this Architecture)"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    echo "    --upx       (Enable UPX compression)"
    echo "    --no-upx    (Disable UPX compression)"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    echo "    Below is a list of supported OS/Arch combinations:"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    echo "OS         ARCH"
    go tool dist list | column -t -s '/' --table-columns =======,=======
Massimiliano Adamo's avatar
Massimiliano Adamo committed
OPTS=$(getopt -o "h" --longoptions "help,os:,arch:,upx,no-upx" -- "$@")
eval set -- "$OPTS"

while true; do
    case "$1" in
    -h | --help)
        usage
        ;;
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    --os)
Massimiliano Adamo's avatar
Massimiliano Adamo committed
        OS="$1"
        ;;
    --arch)
        shift
        ARCH="$1"
        ;;
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    --upx)
        UPX='UPX'
        ;;
    --no-upx)
        NOUPX='NOUPX'
        ;;
Massimiliano Adamo's avatar
Massimiliano Adamo committed
if [ -z $OS ] || [ -z $ARCH ]; then
    echo -e "\nYou need to supply OS and Architecture\n"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
if [ "$OS" == "windows" ]; then
Massimiliano Adamo's avatar
Massimiliano Adamo committed
    BIN_NAME="${BIN_NAME}.exe"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
fi

Massimiliano Adamo's avatar
Massimiliano Adamo committed
# env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" .
Massimiliano Adamo's avatar
Massimiliano Adamo committed
env GOOS=$OS GOARCH=$ARCH go get -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" .
Massimiliano Adamo's avatar
Massimiliano Adamo committed
if [ $? -gt 0 ]; then
    echo -e "\nthere was an error while compiling the code\n"
    exit
fi

Massimiliano Adamo's avatar
Massimiliano Adamo committed
EXECUTABLE_PATH="${GOPATH}/bin/${OS}_${ARCH}/${BIN_NAME}"
Massimiliano Adamo's avatar
Massimiliano Adamo committed
[ -f $EXECUTABLE_PATH ] || EXECUTABLE_PATH="${GOPATH}/bin/${BIN_NAME}"

run_upx() {
    if ! which upx &>/dev/null; then
Massimiliano Adamo's avatar
Massimiliano Adamo committed
        echo "please download upx here: https://github.com/upx/upx/releases"
        echo "and store the executable within your \$PATH"
        exit
    fi
    upx --brute "$EXECUTABLE_PATH"
}

Massimiliano Adamo's avatar
Massimiliano Adamo committed
if [ -n $UPX ]; then
    run_upx
elif [ -n $NOUPX ]; then
    true
else
    while true; do
        echo -e "\nUPX degrades performances but in the case of acme-downloader it is not noticeable"
        echo -e "UPX does not work on some OS/Arch combination (I haven't tried them all)\n"
        read -p "Do you wish to run upx against ${BIN_NAME}? (y/n) " yn
        case $yn in
        [Yy]*)
            echo ""
            run_upx
            break
            ;;
        [Nn]*) break ;;
        *)
            echo "Please answer Y|y or N|n."
            ;;
        esac
    done
fi

echo -e "\nthe binary was compiled and it is avilable as:\n - \"$EXECUTABLE_PATH\"\n"