Files
scwrypts/zsh/system/packages/install
T

92 lines
2.2 KiB
Bash
Raw Normal View History

2022-08-15 18:30:37 -06:00
#!/bin/zsh
2023-02-21 18:44:27 -07:00
DEPENDENCIES+=()
REQUIRED_ENV+=()
use system/packages/git
CHECK_ENVIRONMENT
2022-08-15 18:30:37 -06:00
#####################################################################
INSTALL() {
local USAGE="
usage: [...options...]
options
-t, --target-url <string> target URL; required for first-time download
-n, --local-name <string> local name for package (optional)
-u, --update if package exists, update without prompt
-b, --only-build if package exists, skip update step and only build
-p, --only-pull skip the automated build step
-c, --clean for make, run make clean before build
-h, --help print this message and exit
"
local NAME
local TARGET
local SKIP_BUILD=0
local SKIP_PULL=0
local UPDATE=0
local CLEAN=0
while [[ $# -gt 0 ]]
do
case $1 in
-t | --target-url ) TARGET="$2"; shift 1 ;;
-n | --local-name ) NAME="$2"; shift 1 ;;
-u | --update ) UPDATE=1 ;;
-b | --only-build ) SKIP_PULL=1 ;;
-p | --only-pull ) SKIP_BUILD=1 ;;
-c | --clean ) CLEAN=1 ;;
2023-02-21 18:44:27 -07:00
-h | --help ) USAGE; exit 0 ;;
2022-08-15 18:30:37 -06:00
2023-02-21 18:44:27 -07:00
-* ) ERROR "unknown argument '$1'" ;;
2022-08-15 18:30:37 -06:00
* ) [ ! $TARGET ] && TARGET="$1" \
2023-02-21 18:44:27 -07:00
|| ERROR "extra positional argument '$1'" \
2022-08-15 18:30:37 -06:00
;
;;
esac
shift 1
done
2023-02-21 18:44:27 -07:00
[[ $SKIP_PULL -eq 1 ]] && [[ $SKIP_BUILD -eq 1 ]] && ERROR 'only one of [-b | -p] can be specified'
2022-08-15 18:30:37 -06:00
[ ! $TARGET ] && [ ! $NAME ] && {
[[ $SKIP_BUILD -eq 1 ]] && {
2023-02-21 18:44:27 -07:00
ERROR 'cannot skip build without specifying package local-name'
2022-08-15 18:30:37 -06:00
} || {
UPDATE=1
2023-02-21 18:44:27 -07:00
NAME=$(ls "$PACKAGE_INSTALL_DIR" | FZF 'select a package to update')
[ ! $NAME ] && ERROR 'target-url required'
2022-08-15 18:30:37 -06:00
}
}
2023-06-27 05:00:06 -06:00
CHECK_ERRORS
2022-08-15 18:30:37 -06:00
####################################################
[ ! $NAME ] && {
NAME=$(echo $TARGET | sed 's/.*\///; s/\.git$//')
2023-02-21 18:44:27 -07:00
INFO "using default name '$NAME'"
2022-08-15 18:30:37 -06:00
}
[ -d "$PACKAGE_INSTALL_DIR/$NAME" ] && [[ $SKIP_PULL -eq 0 ]] && {
2023-02-21 18:44:27 -07:00
[[ $UPDATE -eq 0 ]] && Yn "package '$NAME' already exists; update now?" && UPDATE=1
2022-08-15 18:30:37 -06:00
[[ $UPDATE -eq 1 ]] && PULL || return 1
}
[ ! -d "$PACKAGE_INSTALL_DIR/$NAME" ] && {
CLONE || return 2
}
[[ $SKIP_BUILD -eq 1 ]] && return 0
BUILD
}
#####################################################################
INSTALL $@