mirror of
https://github.com/wahyd4/gvm.git
synced 2026-08-09 04:46:19 +10:00
129 lines
3.6 KiB
Bash
Executable File
129 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
display_error() {
|
|
tput sgr0
|
|
tput setaf 1
|
|
echo "ERROR: $1"
|
|
tput sgr0
|
|
exit 1
|
|
}
|
|
|
|
download_source() {
|
|
GO_CACHE_PATH=$GVM_ROOT/archive/go
|
|
GO_SOURCE_URL=https://go.googlecode.com/hg/
|
|
[ -d $GO_CACHE_PATH ] && return
|
|
echo "Downloading Go source..."
|
|
hg clone $GO_SOURCE_URL $GO_CACHE_PATH &>> $GVM_ROOT/logs/go-download.log ||
|
|
display_error "Couldn't download Go source"
|
|
}
|
|
|
|
check_tag() {
|
|
version=`hg tags -R $GO_CACHE_PATH | awk '{print $1}' | grep $VERSION | head -n 1 | grep $VERSION`
|
|
}
|
|
|
|
update_source() {
|
|
echo "Updating Go source..."
|
|
hg pull -R $GO_CACHE_PATH &>> $GVM_ROOT/logs/go-download.log ||
|
|
display_error "Couldn't get latest Go version info"
|
|
}
|
|
|
|
copy_source() {
|
|
cp -r -T $GO_CACHE_PATH $GO_INSTALL_ROOT &>> $GVM_ROOT/logs/go-$version-install.log ||
|
|
display_error "Couldn't copy source to target folder"
|
|
}
|
|
|
|
|
|
compile_go() {
|
|
echo " * Compiling..."
|
|
unset GOARCH && unset GOOS && unset GOPATH && unset GOBIN && unset GOROOT &&
|
|
export GOBIN=$GO_INSTALL_ROOT/bin &&
|
|
export PATH=$GOBIN:$PATH &&
|
|
export GOROOT=$GO_INSTALL_ROOT &&
|
|
cd $GO_INSTALL_ROOT/src && ./all.bash &> $GVM_ROOT/logs/go-$version-compile.log ||
|
|
(rm -rf $GO_INSTALL_ROOT && display_error "Failed to compile")
|
|
}
|
|
|
|
create_enviroment() {
|
|
new_env_file=$GVM_ROOT/environments/$version
|
|
echo "export gvm_go_name; gvm_go_name=\"$version\"" > $new_env_file
|
|
echo "unset gvm_pkgset_name" >> $new_env_file
|
|
echo "export GOROOT; GOROOT=\"\$GVM_ROOT/gos/$version\"" >> $new_env_file
|
|
echo "export GOPATH; GOPATH=\"\$GVM_ROOT/pkgsets/$version/global\"" >> $new_env_file
|
|
echo "export PATH; PATH=\"\$GVM_ROOT/pkgsets/$version/global/bin:\$GVM_ROOT/gos/$version/bin:\$GVM_ROOT/bin:\$PATH\"" >> $new_env_file
|
|
. $GVM_ROOT/scripts/env/use
|
|
gvm_use $version
|
|
gvm pkgset create global
|
|
. $GVM_ROOT/scripts/env/pkgset-use
|
|
gvm_pkgset_use global
|
|
}
|
|
|
|
install_go() {
|
|
GO_INSTALL_ROOT=$GVM_ROOT/gos/$version
|
|
trap 'rm -rf $GO_INSTALL_ROOT; display_error "Canceled!"' INT
|
|
|
|
# Check for existing install
|
|
[ -d $GO_INSTALL_ROOT ] &&
|
|
display_error "Already installed!"
|
|
|
|
echo "Installing $version..."
|
|
|
|
# Create the target folder
|
|
mkdir -p $GO_INSTALL_ROOT &>> $GVM_ROOT/logs/go-$version-install.log ||
|
|
display_error "Couldn't create target folder"
|
|
# Create the global package set folder
|
|
mkdir -p $GVM_ROOT/pkgsets/$version &>> $GVM_ROOT/logs/go-$version-install.log ||
|
|
display_error "Couldn't create global package set folder"
|
|
|
|
# Copy the source and checkout the version
|
|
copy_source
|
|
hg checkout $version -R $GO_INSTALL_ROOT &>> $GVM_ROOT/logs/go-$version-install.log ||
|
|
(rm -rf $GO_INSTALL_ROOT && display_error "Couldn't checkout version")
|
|
|
|
compile_go
|
|
create_enviroment
|
|
}
|
|
|
|
install_gb() {
|
|
echo " * Installing gb..."
|
|
goinstall github.com/skelterjohn/go-gb/gb
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Failed to install gb"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
install_goprotobuf() {
|
|
echo " * Installing goprotobuf..."
|
|
if [[ "$version" == "release.r60.3" ]]; then
|
|
goinstall goprotobuf.googlecode.com/hg/proto
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Failed to install goprotobuf"
|
|
exit 1
|
|
fi
|
|
cd $GVM_ROOT/pkgsets/$version/global/src/goprotobuf.googlecode.com/hg/compiler
|
|
make install > $GVM_ROOT/logs/$version-pb-compiler.log 2>&1
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Failed to install goprotobuf compiler"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo " Don't know how to install goprotobuf for $version"
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
VERSION=$1
|
|
trap 'display_error "Canceled!"' INT
|
|
# GREEN!
|
|
tput sgr0
|
|
tput setaf 2
|
|
[ -z $VERSION ] && display_error "No version specified"
|
|
download_source
|
|
check_tag || (update_source && check_tag) || display_error "Unrecognized Go version"
|
|
install_go
|
|
install_gb
|
|
install_goprotobuf
|
|
}
|
|
|
|
main $@
|
|
|