#! /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= 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