blob: 6dcb4a21806246ed6a0b04b8709651246abbbf78 (
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
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
|
#!/bin/bash
set -e
shopt -s extglob
shopt -s nullglob
version=$(sw_vers -productVersion)
cpu=$(uname -p)
if [[ ${cpu} == arm || ${cpu} == arm64 ]]; then
data=/var/lib/dpkg
model=hw.machine
arch=iphoneos-arm
else
data=/Library/Cydia/dpkg
model=hw.model
arch=cydia
fi
model=$(sysctl -n "${model}")
status=${data}/status
function lower() {
sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
}
# Generate New Package {{{
function pseudo() {
local package=$1 version=$2 description=$3 name=$4
echo "/." >"${data}"/info/"${package}".list
cat <<EOF
Package: ${package}
Essential: yes
Status: install ok installed
Priority: required
Section: System
Installed-Size: 0
Architecture: ${arch}
Version: ${version}
Description: ${description}
Maintainer: Jay Freeman (saurik) <saurik@saurik.com>
Tag: role::cydia
EOF
[[ -n ${name} ]] && echo "Name: ${name}"
echo
}
# }}}
before=$(stat -c '%i-%Y' status)
output=$(mktemp status-tmp.XXXXXX)
xxxxxx=${output##status-tmp.}
rm -f status-tmp.!("${xxxxxx}")
{
# Delete Old Packages {{{
unset firmware
unset blank
while IFS= read -r line; do
#echo "#${firmware+@}/${blank+@} ${line}" 1>&2
if [[ ${line} == '' && "${blank+@}" ]]; then
continue
else
unset blank
fi
if [[ ${line} == "Package: "@(firmware|gsc.*|cy+*) ]]; then
firmware=
elif [[ ${line} == '' ]]; then
blank=
fi
if [[ "${firmware+@}" ]]; then
if [[ "${blank+@}" ]]; then
unset firmware
fi
continue
fi
#echo "${firmware+@}/${blank+@} ${line}" 1>&2
echo "${line}"
done <"${status}"
#echo "#${firmware+@}/${blank+@} EOF" 1>&2
if ! [[ "${blank+@}" || "${firmware+@}" ]]; then
echo
fi
# }}}
if [[ ${cpu} == arm || ${cpu} == arm64 ]]; then
pseudo "firmware" "${version}" "almost impressive Apple frameworks" "iOS Firmware"
while [[ 1 ]]; do
gssc=$(gssc 2>&1)
if [[ ${gssc} != *'(null)'* ]]; then
break
fi
sleep 1
done
echo "${gssc}" | sed -re '
/^ [^ ]* = [0-9.]*;$/ ! d;
s/^ ([^ ]*) = ([0-9.]*);$/\1 \2/;
s/([A-Z])/-\L\1/g;
s/^"([^ ]*)"/\1/;
s/^-//;
/ 0$/ d;
' | while read -r name value; do case "${name}" in
(ipad) for name in ipad wildcat; do
pseudo "gsc.${name}" "${value}" "this device has a very large screen" "iPad"
done;;
(*)
pseudo "gsc.${name}" "${value}" "virtual GraphicsServices dependency"
;;
esac; done
fi
if [[ ${cpu} == arm || ${cpu} == arm64 ]]; then
os=ios
else
os=macosx
fi
pseudo "cy+os.${os}" "${version}" "virtual operating system dependency"
pseudo "cy+cpu.${cpu}" "0" "virtual CPU dependency"
name=${model%%*([0-9]),*([0-9])}
version=${model#${name}}
name=$(lower <<<${name})
version=${version/,/.}
pseudo "cy+model.${name}" "${version}" "virtual model dependency"
pseudo "cy+kernel.$(lower <<<$(sysctl -n kern.ostype))" "$(sysctl -n kern.osrelease)" "virtual kernel dependency"
pseudo "cy+lib.corefoundation" "$(/usr/libexec/cydia/cfversion)" "virtual corefoundation dependency"
} >"${output}"
# XXX: this is a poor replacement for flock
test "${before}" = "$(stat -c '%i-%Y' status)"
mv -f "${output}" "${status}"
if [[ ${cpu} == arm || ${cpu} == arm64 ]]; then
if [[ ! -h /User && -d /User ]]; then
cp -afT /User /var/mobile
fi && rm -rf /User && ln -s "/var/mobile" /User
echo 6 >/var/lib/cydia/firmware.ver
fi
|