mirror of
https://github.com/wahyd4/gvm.git
synced 2026-08-10 21:36:40 +10:00
175 lines
4.0 KiB
Bash
Executable File
175 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
display_error() {
|
|
tput sgr0
|
|
tput setaf 1
|
|
echo "ERROR: $1"
|
|
tput sgr0
|
|
exit 1
|
|
}
|
|
|
|
show_usage() {
|
|
echo "Usage: gvm pkg install Package [options]"
|
|
echo " -v, --version=VERSION Set the package version to install."
|
|
echo " -s, --source=SORUCE Specify the source for this package."
|
|
echo " -a, --all Update all dependencies."
|
|
echo " -h, --help Display this message."
|
|
}
|
|
|
|
function read_command_line() {
|
|
[[ "$1" == "" ]] &&
|
|
display_error "Please specify package name"
|
|
|
|
# Get package name
|
|
package_name=$1
|
|
gvm_go_path=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name
|
|
cur_dir=`pwd`
|
|
cur_dirname=`pwd | awk '{ n=split($1,path,"/"); print path[n] }'`
|
|
cache_dir=$GVM_ROOT/pkgsets/$gvm_go_name/$gvm_pkgset_name/pkg.gvm/$package_name/src
|
|
source_dir=$GVM_ROOT/tmp/$package_name/src
|
|
build_dir=$GVM_ROOT/tmp/$package_name/build
|
|
source="git@github.com:moovweb"
|
|
shift
|
|
|
|
for i in $*; do
|
|
case $i in
|
|
-v=*|--version=*)
|
|
version=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
|
|
;;
|
|
-s=*|--source=*)
|
|
source=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
|
|
;;
|
|
-a|--all)
|
|
all_deps="true"
|
|
;;
|
|
-h|--help*)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Invalid option $i"
|
|
show_usage
|
|
exit 65 # Bad arguments
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function download_package() {
|
|
if [ ! -d "$cache_dir" ]; then
|
|
echo "Downloading $package_name..."
|
|
mkdir -p $cache_dir
|
|
git clone $source/$package_name $cache_dir > /dev/null 2>&1
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "ERROR: Could not find $package_name in any sources"
|
|
rm -rf $cache_dir
|
|
exit 1
|
|
fi
|
|
else
|
|
cd $cache_dir && git pull
|
|
fi
|
|
}
|
|
|
|
function select_version() {
|
|
if [ "$version" != "" ]; then
|
|
cd $source_dir && git pull &&
|
|
git checkout $version > /dev/null 2>&1
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Invalid version $version"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function setup_build_env() {
|
|
rm -rf $build_dir && mkdir -p $build_dir
|
|
rm -rf $source_dir
|
|
cp -r $cache_dir/ $source_dir/
|
|
select_version
|
|
if [[ -f $source_dir/VERSION ]]; then
|
|
SOURCE_VERSION=`cat $source_dir/VERSION`
|
|
else
|
|
SOURCE_VERSION="0.0"
|
|
fi
|
|
|
|
if [[ -n $BUILD_NUMBER ]]; then
|
|
BUILD_NUMBER="$SOURCE_VERSION.$BUILD_NUMBER"
|
|
else
|
|
BUILD_NUMBER="$SOURCE_VERSION.dev"
|
|
fi
|
|
}
|
|
|
|
function check_deps() {
|
|
export GOPATH=$build_dir
|
|
if [ -f "$source_dir/Package.gvm" ]; then
|
|
for line in `cat $source_dir/Package.gvm | grep ^pkg | awk '{ print $2 }'`; do
|
|
CUR_PKG=$gvm_go_path/pkg.gvm/$line/current
|
|
if [ -e "$CUR_PKG/BUILD_VERSION" ]; then
|
|
echo "$line: `cat $CUR_PKG/BUILD_VERSION`" >> $build_dir/manifest
|
|
else
|
|
gvm pkg install $line
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to install dependency $line"
|
|
exit 1
|
|
fi
|
|
#echo "ERROR: Couldnt find package: $line"
|
|
#exit 1
|
|
fi
|
|
export GOPATH=$GOPATH:$CUR_PKG
|
|
done
|
|
fi
|
|
echo ":complete" >> $build_dir/manifest
|
|
}
|
|
|
|
function copy_source() {
|
|
mkdir -p $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER
|
|
cp -rf $source_dir $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER/
|
|
}
|
|
|
|
function build_package() {
|
|
echo "Installing $package_name..."
|
|
echo "$BUILD_NUMBER" > $build_dir/BUILD_VERSION
|
|
cd $source_dir && gvmake > $build_dir/build.log 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: Failed to build"
|
|
cat "$build_dir/build.log"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function install_package() {
|
|
mkdir -p $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER &&
|
|
cp -r $build_dir/* $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER &&
|
|
rm -f $gvm_go_path/pkg.gvm/$package_name/current &&
|
|
ln -s $gvm_go_path/pkg.gvm/$package_name/$BUILD_NUMBER $gvm_go_path/pkg.gvm/$package_name/current &&
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: Failed to install"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -d $build_dir/bin ]; then
|
|
mkdir -p $gvm_go_path/bin &&
|
|
cp -f $build_dir/bin/* $gvm_go_path/bin/
|
|
fi
|
|
}
|
|
|
|
function cleanup() {
|
|
rm -rf $build_dir
|
|
rm -rf $source_dir
|
|
}
|
|
|
|
read_command_line $@
|
|
#if [ "$cur_dirname" == "$package_name" ]; then
|
|
# cache_dir=$cur_dir
|
|
# BUILD_NUMBER=src
|
|
# echo "Using local source"
|
|
#else
|
|
download_package
|
|
#fi
|
|
setup_build_env
|
|
check_deps
|
|
copy_source
|
|
build_package
|
|
install_package
|
|
cleanup
|
|
|