blob: 938a0d665226feaa68010e5530a2e5a378477308 (
plain)
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
|
# -*-eselect-*- vim: ft=eselect
# Copyright 2022-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
DESCRIPTION="Manage Zig versions"
MAINTAINER="bratishkaerik@getgoogleoff.me"
show_selected_target() {
readlink "${EROOT}/usr/bin/zig"
}
find_targets() {
for f in "${EROOT}"/usr/bin/zig-*; do
[[ -f "${f}" ]] && basename "${f}"
done
}
remove_symlinks() {
rm "${EROOT}/usr/bin/zig"
}
set_symlinks() {
local target=$1
if is_number "${target}"; then
local targets=( $(find_targets) )
target=${targets[target-1]}
fi
[[ -z "${target}" || ! -f "${EROOT}/usr/bin/${target}" ]] \
&& die -q "Target \"$1\" doesn't appear to be valid!"
ln -s "${target}" "${EROOT}/usr/bin/zig"
}
### show action ###
describe_show() {
echo "Show current Zig version"
}
do_show() {
write_list_start "Current Zig version:"
if [[ -L "${EROOT}/usr/bin/zig" ]]; then
write_kv_list_entry "$(show_selected_target)" ""
else
write_kv_list_entry "(unset)" ""
fi
}
### list action ###
describe_list() {
echo "List available Zig versions"
}
do_list() {
local targets=( $(find_targets) )
local selected_target
selected_target=$(show_selected_target)
write_list_start "Available Zig versions:"
for (( i = 0; i < ${#targets[@]}; i++ )); do
[[ ${targets[i]} == "${selected_target}" ]] && targets[i]=$(highlight_marker "${targets[i]}")
done
write_numbered_list -m "(none found)" "${targets[@]}"
}
### set action ###
describe_set() {
echo "Set active Zig version"
}
describe_set_parameters() {
echo "<target>"
}
describe_set_options() {
echo "target: Target name or number (from 'list' action)"
}
do_set() {
[[ -z $1 ]] && die -q "You need to specify a target"
[[ $# -gt 1 ]] && die -q "Too many parameters"
test_usr_bin_writeable
if [[ -L "${EROOT}/usr/bin/zig" ]]; then
remove_symlinks || die -q "Couldn't remove symlink"
fi
set_symlinks "$1" || die -q "Couldn't set a new symlink"
}
### update action ###
describe_update() {
echo "Automatically update the zig symlink"
}
describe_update_options() {
echo "ifunset: Do not override currently set version"
}
do_update() {
[[ -z $1 || $1 == ifunset ]] || die -q "Usage error"
[[ $# -gt 1 ]] && die -q "Too many parameters"
test_usr_bin_writeable
if [[ -L ${EROOT}/usr/bin/zig ]]; then
if [[ $1 == ifunset && -e ${EROOT}/usr/bin/zig ]]; then
return
fi
remove_symlink
elif [[ -e ${EROOT}/usr/bin/zig ]]; then
die -q "${EROOT}/usr/bin/zig exists but is not a symlink"
fi
local targets=( $(find_targets) )
if [[ ${#targets[@]} -gt 0 ]]; then
set_symlinks "${targets[${#targets[@]}-1]}"
fi
}
### helper functions ###
test_usr_bin_writeable() {
[[ -w ${EROOT}/usr/bin ]] || die -q "${EROOT}/usr/bin not writeable by current user. Are you root?"
}
|