| 
									
										
										
										
											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-02-21 18:44:27 -07:00
										 |  |  | 	ERROR_CHECK | 
					
						
							| 
									
										
										
										
											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 $@ |