satisfy shellcheck
[log-quiet] / setup
1 #!/bin/bash
2 # I, Ian Kelling, follow the GNU license recommendations at
3 # https://www.gnu.org/licenses/license-recommendations.en.html. They
4 # recommend that small programs, < 300 lines, be licensed under the
5 # Apache License 2.0. This file contains or is part of one or more small
6 # programs. If a small program grows beyond 300 lines, I plan to switch
7 # its license to GPL.
8
9 # Copyright 2024 Ian Kelling
10
11 # Licensed under the Apache License, Version 2.0 (the "License");
12 # you may not use this file except in compliance with the License.
13 # You may obtain a copy of the License at
14
15 # http://www.apache.org/licenses/LICENSE-2.0
16
17 # Unless required by applicable law or agreed to in writing, software
18 # distributed under the License is distributed on an "AS IS" BASIS,
19 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 # See the License for the specific language governing permissions and
21 # limitations under the License.
22
23
24 set -eE -o pipefail
25 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
26
27 [[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
28
29 usage() {
30 cat <<EOF
31 Usage: ${0##*/} []
32 Install or uninstall files to /usr/local/bin
33
34 -n|--dry-run Dry run
35 -u|--uninstall Uninstall. default is to install
36 -h|--help Print help and exit.
37
38 Note: Uses GNU getopt options parsing style
39 EOF
40 exit $1
41 }
42 dry=false
43 uninstall=false # default
44 temp=$(getopt -l help,uninstall,dry-run hun "$@") || usage 1
45 eval set -- "$temp"
46 while true; do
47 case $1 in
48 -n|--dry-run) dry=true; shift ;;
49 -u|--uninstall) uninstall=true; shift ;;
50 -h|--help) usage ;;
51 --) shift; break ;;
52 *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
53 esac
54 done
55
56
57 x="$(readlink -f "$BASH_SOURCE")"; cd ${x%/*} # directory of this file
58
59 files=()
60 for f in *; do
61 if [[ -x $f && ! -d $f && ! -L $f && $f != setup ]]; then
62 files+=($f)
63 fi
64 done
65
66 if $uninstall; then
67 if $dry; then
68 echo "setup dry run: cd /usr/local/bin"
69 echo "setup dry run: rm -fv ${files[*]}"
70 else
71 cd /usr/local/bin
72 rm -fv ${files[@]}
73 fi
74 else
75 if $dry; then
76 echo "setup dry run: install ${files[*]} /usr/local/bin"
77 else
78 install -C ${files[@]} /usr/local/bin
79 fi
80 fi