vxSDK/install.sh

198 lines
4.2 KiB
Bash
Executable File

#! /usr/bin/env bash
projdir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
prefix="$HOME/.local"
VERSION='0.12.0'
#
# Help screen
#
help() {
cat << OEF
Script used to manipulate the VxSDK, a set of tools for the Vhex Operating
System project.
Usage $0 [ACTION]
Actions:
bootstrap Try to bootstrap the vxSDK itself [default]
install Install the VxSDK
uninstall Uninstall the VxSDK
Options:
--force Force reinstallation
--prefix=<PREFIX> Installation prefix (default is ~/.local)
-h, --help Display this help
OEF
exit 0
}
#
# Parse arguments
#
target='install'
force_reinstall='false'
for arg; do case "$arg" in
--help | -h)
help;;
-v | --version)
echo "$VERSION"
exit 0;;
--force)
force_reinstall='true'
;;
install)
target='install';;
update)
target='update';;
uninstall)
target='uninstall';;
uninstall-cached)
target='uninstall-cached';;
*)
echo "error: unreconized argument '$arg', giving up." >&2
exit 1
esac; done
#
# Process
#
if [[ "$target" = "install" ]]
then
if [[ -d "$prefix/lib/vxsdk/vxsdk" ]]
then
echo 'warning : vxsdk is already installed !' >&2
read -n 1 -p 'Do you whant to re-install the vxSDK [y/N] ? ' -r reinstall
[[ "$reinstall" != 'y' ]] && exit 1
echo ''
"$projdir/install.sh" uninstall-cached
fi
install -d "$prefix/lib/vxsdk/vxsdk"
cp -r \
"$projdir/requirements.txt" \
"$projdir/assets" \
"$projdir/vxsdk" \
"$prefix/lib/vxsdk/"
install -d "$prefix/bin"
echo '#! /usr/bin/env bash' > "$prefix/bin/vxsdk"
echo '' >> "$prefix/bin/vxsdk"
echo "source $prefix/lib/vxsdk/venv/bin/activate" >> "$prefix/bin/vxsdk"
echo "python3 $prefix/lib/vxsdk/vxsdk \$@" >> "$prefix/bin/vxsdk"
echo 'deactivate' >> "$prefix/bin/vxsdk"
chmod +x "$prefix/bin/vxsdk"
build_date=$(date '+%Y-%m-%d')
build_hash=$(git rev-parse --short HEAD)
f="$prefix/lib/vxsdk/vxsdk/__main__.py"
sed \
-e "s*%VERSION%*$VERSION*" \
-e "s*%BUILD_HASH%*$build_hash*" \
-e "s*%BUILD_DATE%*$build_date*" \
"$projdir/vxsdk/__main__.py" \
> "$f"
mkdir -p "$prefix/share/vxsdk"
cd "$prefix/lib/vxsdk" || exit 1
if [[ ! -d venv ]] || [[ "$force_reinstall" == 'true' ]]
then
set -x; python3 -m venv venv; set +x
source venv/bin/activate
set -x
{ pip install --upgrade pip > /dev/null ; } 2>&1
pip install -r requirements.txt
set +x
deactivate
else
source venv/bin/activate
set -x; pip install -r requirements.txt; set +x
deactivate
fi
exit 0
fi
# same as uninstall but do not remove the venv
if [[ "$target" = 'uninstall-cached' ]]
then
set -x
rm "$prefix/bin/vxsdk"
rm -rf "$prefix/lib/vxsdk/vxsdk"
rmdir "$prefix/share/vxsdk" 2>/dev/null || exit 0
echo 'vxSDK has been partially removed'
exit 0
fi
if [[ "$target" = 'uninstall' ]]
then
# TODO : rm -rf dependencies too
# TODO : add confirmation input
rm "$prefix/bin/vxsdk"
rm -rf "$prefix/lib/vxsdk"
rmdir "$prefix/share/vxsdk" 2>/dev/null || exit 0
echo 'vxSDK has been removed'
exit 0
fi
#if [[ "$target" = "update" ]]
#then
#
# git \
# clone \
# git@github.com:Vhex-org/vxSDK.git \
# --depth=1 \
# /tmp/vxSDK \
# > /dev/null 2>&1 || exit 84
# cd /tmp/vxSDK
#
# if [[ "$(./install.sh --version)" == "$VERSION" ]]
# then
# rm -rf /tmp/vxSDK
# echo 'already up to date !'
# exit 0
# fi
#
# _check=$(echo -e "$(./install.sh --version)\n$VERSION" | sort -V | head -n1)
#
# if [[ "$_check" != "$VERSION" ]]; then
# rm -rf /tmp/vxSDK
# echo 'already up to date !'
# exit 0
# fi
#
# echo "update $VERSION -> $(./install.sh --version)"
#
# ./install.sh uninstall
# ./install.sh install
#
# rm -rf /tmp/vxSDK
#
#fi
#
#
#
#if [[ "$target" = "uninstall" ]]
#then
#
# rm $prefix/bin/vxsdk
# rm -rf $prefix/lib/vxsdk
# rmdir $prefix/share/vxsdk 2>/dev/null || exit 0
# echo 'note: repositories cloned by vxSDK have not been removed'
# exit 0
#
#fi