-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall
executable file
·202 lines (187 loc) · 5.5 KB
/
install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/bin/sh
# SPDX-License-Identifier: GPL-3.0-only
#
# This file is part of the smux project: https://github.com/tomeichlersmith/smux
#
# Copyright (C) 2021 smux contributors
#
# smux is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 3
# as published by the Free Software Foundation.
#
# smux is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with smux; if not, see <http://www.gnu.org/licenses/>.
# POSIX
set -o errexit
set -o nounset
# Print usage to stdout.
# Arguments:
# None
# Outputs:
# print usage with examples.
show_help() {
cat << EOF
install --prefix /usr/local
Options:
--prefix/-p: base bath where all files will be deployed (default /usr/local if root, ~/.local if not)
--devel/-d: symlink to install location rather than copy, helpful for testing during development
ignored if not in the repository
--next/-n: install HEAD of main branch rather than last release
--help/-h: show this message
-v: show more verbosity
EOF
}
version=v1.0.1
next=0
verbose=0
devel=0
prefix=""
# Parse arguments
while [ "$#" -gt 0 ]; do
case $1 in
-h | --help)
# Call a "show_help" function to display a synopsis, then exit.
show_help
exit
;;
-v | --verbose)
shift
verbose=1
;;
-d | --devel)
shift
devel=1
;;
-n | --next)
shift
next=1
;;
-p | --prefix)
if [ -n "$2" ]; then
prefix="$2"
shift
shift
fi
;;
*) # Default case: If no more options then break out of the loop.
break ;;
esac
done
# set verbosity
if [ "${verbose}" -ne 0 ]; then
set -o xtrace
fi
if [ -z "${prefix}" ]; then
prefix="/usr/local"
# in case we're not root, just default to the home directory
if [ "$(id -u || true)" -ne 0 ]; then
prefix="${HOME}/.local"
fi
fi
completion_dest_path="${prefix}/share/bash-completion/completions/"
dest_path="${prefix}/bin"
man_dest_path="${prefix}/share/man/man1"
# get current dir
curr_dir=$(dirname "$0")
cd "${curr_dir}" || exit 1
# if files are available, install files in dest directory
if [ -e "${curr_dir}/smux" ]; then
if [ "${devel}" -ne 0 ]; then
copy="ln -sf -t"
if ! ${copy} "${dest_path}" "${PWD}/smux"; then
printf >&2 "Do you have permission to write to %s?\n" "${dest_path}"
exit 1
fi
else
copy="install -D -m 0644 -t"
if ! install -D -m 0755 -t "${dest_path}" smux; then
printf >&2 "Do you have permission to write to %s?\n" "${dest_path}"
exit 1
fi
fi
if [ -e "man" ]; then
for file in "${PWD}"/man/man1/*; do
${copy} "${man_dest_path}" "${file}"
done
fi
if [ -e "completions" ]; then
for file in "${PWD}"/completions/*; do
${copy} "${completion_dest_path}" "${file}"
done
fi
else
printf >&2 "\033[1;31m Checking dependencies...\n\033[0m"
# check that we have base dependencies
if ! { command -v curl > /dev/null || command -v wget > /dev/null; } || ! command -v tar > /dev/null; then
printf >&2 "Online install depends on tar and either curl or wget\n"
printf >&2 "Ensure you have all dependencies installed.\n"
exit 1
fi
if command -v curl > /dev/null 2>&1; then
download="curl -sLo"
elif command -v wget > /dev/null 2>&1; then
download="wget -qO"
fi
printf >&2 "\033[1;31m Downloading...\n\033[0m"
if [ "${next}" -eq 0 ]; then
release_ver="tomeichlersmith/smux/archive/refs/tags/${version}.tar.gz"
release_name=$(echo "${release_ver}" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz$')
else
release_ver="tomeichlersmith/smux/archive/refs/heads/main.tar.gz"
release_name="main"
fi
# go in tmp
tmp_dir="$(mktemp -d)"
cd "${tmp_dir}"
# download our target
${download} "${release_name}" "https://github.com/${release_ver}"
# uncompress
printf >&2 "\033[1;31m Unpacking...\n\033[0m"
if [ "${verbose}" -ne 0 ]; then
tar xvf "${release_name}"
else
tar xf "${release_name}"
fi
# enter source
cd "smux-$(echo "${release_name}" | sed 's|.tar.gz||' || true)"
# deploy
copy="install -D -m 0644 -t"
if ! install -D -m 0755 -t "${dest_path}" smux; then
printf >&2 "Do you have permission to write to %s?\n" "${dest_path}"
exit 1
fi
if [ -e "man" ]; then
for file in "${PWD}"/man/man1/*; do
${copy} "${man_dest_path}" "${file}"
done
fi
if [ -e "completions" ]; then
for file in "${PWD}"/completions/*; do
${copy} "${completion_dest_path}" "${file}"
done
fi
# securely delete unneeded files
cd
if [ -n "${tmp_dir}" ] && [ -e "${tmp_dir}" ]; then
rm -rf "${tmp_dir}"
fi
fi
[ ! -w "${dest_path}" ] && printf >&2 "Cannot write into %s, permission denied.\n" "${dest_path}" && exit 1
[ ! -w "${man_dest_path}" ] && printf >&2 "Cannot write into %s, permission denied.\n" "${man_dest_path}" && exit 1
printf >&2 "\033[1;31m Successfully installed to %s.\n\033[0m" "${dest_path}"
case "${PATH}" in
*"${dest_path}"*)
if [ "${verbose}" -ne 0 ]; then
printf >&2 " Found %s in PATH\n" "${dest_path}"
fi
;;
*)
printf >&2 "\033[1;31m Unable to find %s in PATH.\n\033[0m" "${dest_path}"
printf >&2 "\033[1;31m Be sure that %s is in your \$PATH environment variable for smux to work.\n\033[0m" "${dest_path}"
;;
esac