]> git.saurik.com Git - cydia.git/blob - Library/firmware.sh
1c966cb9724c0a28fae38304a85830851a1f74c6
[cydia.git] / Library / firmware.sh
1 #!/bin/bash
2
3 set -e
4
5 shopt -s extglob
6 shopt -s nullglob
7
8 version=$(sw_vers -productVersion)
9 cpu=$(uname -p)
10
11 if [[ ${cpu} == arm ]]; then
12 data=/var/lib/dpkg
13 model=hw.machine
14 arch=iphoneos-arm
15 else
16 data=/Library/Cydia/dpkg
17 model=hw.model
18 arch=cydia
19 fi
20
21 model=$(sysctl -n "${model}")
22
23 status=${data}/status
24
25 function lower() {
26 tr '[:upper:]' '[:lower:]'
27 }
28
29 # Generate New Package {{{
30 function pseudo() {
31 local package=$1 version=$2 description=$3 name=$4
32 echo "/." >"${data}"/info/"${package}".list
33
34 cat <<EOF
35 Package: ${package}
36 Essential: yes
37 Status: install ok installed
38 Priority: required
39 Section: System
40 Installed-Size: 0
41 Architecture: ${arch}
42 Version: ${version}
43 Description: ${description}
44 Tag: role::cydia
45 EOF
46
47 [[ -n ${name} ]] && echo "Name: ${name}"
48 echo
49 }
50 # }}}
51
52 {
53
54 # Delete Old Packages {{{
55 while IFS= read -r line; do
56 #echo "#${firmware+@}/${blank+@} ${line}" 1>&2
57
58 if [[ ${line} == '' && "${blank+@}" ]]; then
59 continue
60 else
61 unset blank
62 fi
63
64 if [[ ${line} == "Package: "@(firmware|gsc.*|cy+*) ]]; then
65 firmware=
66 elif [[ ${line} == '' ]]; then
67 blank=
68 fi
69
70 if [[ "${firmware+@}" ]]; then
71 if [[ "${blank+@}" ]]; then
72 unset firmware
73 fi
74 continue
75 fi
76
77 #echo "${firmware+@}/${blank+@} ${line}" 1>&2
78 echo "${line}"
79 done <"${status}"
80
81 #echo "#${firmware+@}/${blank+@} EOF" 1>&2
82 if ! [[ "${blank+@}" || "${firmware+@}" ]]; then
83 echo
84 fi
85 # }}}
86
87 if [[ ${cpu} == arm ]]; then
88 pseudo "firmware" "${version}" "almost impressive Apple frameworks"
89
90 gssc 2>&1 | sed -re '
91 /^ [^ ]* = [0-9.]*;$/ ! d;
92 s/^ ([^ ]*) = ([0-9.]*);$/\1 \2/;
93 s/([A-Z])/-\L\1/g; s/^"([^ ]*)"/\1/;
94 s/^-//;
95 / 0$/ d;
96 ' | while read -r name value; do
97 pseudo "gsc.${name}" "${value}" "virtual GraphicsServices dependency"
98 done
99 fi
100
101 if [[ ${cpu} == arm ]]; then
102 os=ios
103 else
104 os=macosx
105 fi
106
107 pseudo "cy+os.${os}" "${version}" "virtual operating system dependency"
108 pseudo "cy+cpu.${cpu}" "0" "virtual CPU dependency"
109
110 name=${model%%*([0-9]),*([0-9])}
111 version=${model#${name}}
112 name=$(lower <<<${name})
113 version=${version/,/.}
114 pseudo "cy+model.${name}" "${version}" "virtual model dependency"
115
116 pseudo "cy+kernel.$(lower <<<$(sysctl -n kern.ostype))" "$(sysctl -n kern.osrelease)" "virtual kernel dependency"
117
118 } >"${status}"_
119
120 mv -f "${status}"{_,}
121
122 if [[ ${cpu} == arm ]]; then
123 if [[ ! -h /User && -d /User ]]; then
124 cp -afT /User /var/mobile
125 fi && rm -rf /User && ln -s "/var/mobile" /User
126
127 echo 3 >/var/lib/cydia/firmware.ver
128 fi