b05eb71adf
As of I think go1.8 GOPATH is by default $HOME/go so it is incorrect to assume that it is set. If not set, then the Makefile assumes gometalinter will be in /bin/gometalinter, which it likely is not, and thus fails. We could change configure to set GOPATH in the .env, however then we would be assuming that GOPATH is a single entry - whereas like other paths, it can contain more than one value. So instead this commit stops trying to install gometalinter, and like dep, it assumes that it is installed prior. (and since the current behaviour of the Makefile is affecting state external to the project, that seems more logical)
144 lines
2.8 KiB
Bash
Executable File
144 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
declare -A tools=()
|
|
declare -A desired=()
|
|
|
|
for arg in "$@"; do
|
|
case ${arg%%=*} in
|
|
"--with-go")
|
|
desired[go]="${arg##*=}"
|
|
;;
|
|
"--with-dep")
|
|
desired[dep]="${arg##*=}"
|
|
;;
|
|
"--help")
|
|
printf "${GREEN}$0${NC}\n"
|
|
printf " available options:\n"
|
|
printf " --with-dep=${BLUE}<path_to_dep_binary>${NC}\n"
|
|
printf " --with-go=${BLUE}<path_to_go_binary>${NC}\n"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $arg"
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
vercomp () {
|
|
if [[ $1 == $2 ]]
|
|
then
|
|
return 0
|
|
fi
|
|
local IFS=.
|
|
local i ver1=($1) ver2=($2)
|
|
# fill empty fields in ver1 with zeros
|
|
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
|
|
do
|
|
ver1[i]=0
|
|
done
|
|
for ((i=0; i<${#ver1[@]}; i++))
|
|
do
|
|
if [[ -z ${ver2[i]} ]]
|
|
then
|
|
# fill empty fields in ver2 with zeros
|
|
ver2[i]=0
|
|
fi
|
|
if ((10#${ver1[i]} > 10#${ver2[i]}))
|
|
then
|
|
return 1
|
|
fi
|
|
if ((10#${ver1[i]} < 10#${ver2[i]}))
|
|
then
|
|
return 2
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
check_for() {
|
|
echo -n "Checking for $1... "
|
|
if ! [ -z "${desired[$1]}" ]; then
|
|
TOOL_PATH="${desired[$1]}"
|
|
else
|
|
TOOL_PATH=$(command -v $1)
|
|
fi
|
|
if ! [ -x "$TOOL_PATH" -a -f "$TOOL_PATH" ]; then
|
|
printf "${RED}not found${NC}\n"
|
|
cd -
|
|
exit 1
|
|
else
|
|
printf "${GREEN}found${NC}\n"
|
|
tools[$1]=$TOOL_PATH
|
|
fi
|
|
}
|
|
|
|
check_go_version() {
|
|
echo -n "Checking go version... "
|
|
GO_VERSION=$(${tools[go]} version | ${tools[awk]} '{where = match($0, /[0-9]\.[0-9]+\.[0-9]*/); if (where != 0) print substr($0, RSTART, RLENGTH)}')
|
|
vercomp $GO_VERSION 1.11
|
|
case $? in
|
|
0) ;&
|
|
1)
|
|
printf "${GREEN}"
|
|
echo $GO_VERSION
|
|
printf "${NC}"
|
|
;;
|
|
2)
|
|
printf "${RED}"
|
|
echo "$GO_VERSION < 1.11"
|
|
exit 1
|
|
;;
|
|
esac
|
|
VERSION=$(${tools[go]} version | ${tools[awk]} '{print $3}')
|
|
tools["go_version"]="${VERSION}"
|
|
}
|
|
|
|
check_docker_version() {
|
|
echo -n "Checking docker version... "
|
|
DOCKER_VERSION=$(${tools[docker]} version | ${tools[awk]})
|
|
}
|
|
|
|
check_go_env() {
|
|
echo -n "Checking \$GOPATH... "
|
|
GOPATH="$(go env GOPATH)"
|
|
if [ -z "$GOPATH" ]; then
|
|
printf "${RED}invalid${NC} - GOPATH not set\n"
|
|
exit 1
|
|
fi
|
|
printf "${GREEN}valid${NC} - $GOPATH\n"
|
|
}
|
|
|
|
cd ${0%/*}
|
|
|
|
if [ ! -f .env ]; then
|
|
rm .env
|
|
fi
|
|
|
|
check_for make
|
|
check_for awk
|
|
check_for go
|
|
check_go_version
|
|
check_go_env
|
|
check_for dep
|
|
check_for gometalinter
|
|
|
|
echo
|
|
|
|
cat <<- EOF > .env
|
|
MAKE := "${tools[make]}"
|
|
GO := "${tools[go]}"
|
|
GO_VERSION := ${tools[go_version]}
|
|
DEP := "${tools[dep]}"
|
|
GOMETALINTER := "${tools[gometalinter]}"
|
|
EOF
|
|
|
|
echo "Environment configuration written to .env"
|
|
|
|
cd - > /dev/null
|