Newer
Older
#!/bin/bash
#
# for windows and Mac check the README
#
PATH=$PATH:$(go env GOPATH)/bin
GOPATH=$(go env GOPATH)
PROG_VERSION="1.0"
BUILDTIME=$(date -u '+%Y-%m-%d_%H:%M:%S')
export BIN_NAME PATH GOPATH PROG_VERSION BUILDTIME
REPO_DIR=$(dirname $0)
if [ "$REPO_DIR" = '.' ]; then
REPO_DIR=`pwd`
fi
ln -sf "$REPO_DIR" "${GOPATH}/src/"
REPO_NAME=$(basename "$REPO_DIR")
cd "${GOPATH}/src/$REPO_NAME"
usage() {
echo "Usage: $(basename $0)"
echo " -h | --help [Print this help and exit]"
echo " --os=OS (Compile binary for this OS)"
echo " --arch=ARCH (Compile binary for this architecture)"
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
echo ""
echo " Below is a list of supported combinations (1st column: OS / 2nd column: Arch):"
go tool dist list|awk -F'/' '{printf "OS: "$1"\011=> Arch: "$2"\n"}'
exit
}
OPTS=$(getopt -o "h" --longoptions "help,platform:,arch:" -- "$@")
eval set -- "$OPTS"
while true; do
case "$1" in
-h | --help)
usage
;;
--platform)
shift
PLATFORM="$1"
;;
--arch)
shift
ARCH="$1"
;;
--)
shift
break
;;
esac
shift
done
if [ -z $PLATFORM -o -z $ARCH ]; then
echo -e "\nYou need to supply platform and architecture\n"
usage
fi
if [ "$PLATFORM" == "windows" ]; then
$BIN_NAME = "${BIN_NAME}.exe"
fi
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
EXECUTABLE_PATH="${GOPATH}/bin/${PLATFORM}_${ARCH}/${BIN_NAME}"
run_upx() {
if ! which upx &>/dev/null; then
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"
}
# env GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" .
env GOOS=$PLATFORM GOARCH=$ARCH go get -ldflags "-s -w -X main.appVersion=${PROG_VERSION} -X main.buildTime=${BUILDTIME}" .
if [ $? -gt 0 ]; then
echo -e "\nthere was an error while compiling the code\n"
exit
fi
while true; do
echo -e "\nUPX degrades performances but in the case of acme-downloader it is not noticeable"
echo -e "UPX may or may not work for a specific platform (I haven't tried them)\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
echo -e "\nthe binary was compiled and it is avilable as:\n - \"$EXECUTABLE_PATH\"\n"