X-Git-Url: https://git.saurik.com/cydia.git/blobdiff_plain/77801ff16d182668ca282c4dbc88ba250c5ff1b1..367a112d938db5c80814b42c428b517e4a65efd9:/Library/firmware.sh diff --git a/Library/firmware.sh b/Library/firmware.sh index d2c04889..f7479ba8 100755 --- a/Library/firmware.sh +++ b/Library/firmware.sh @@ -1,99 +1,154 @@ #!/bin/bash set -e + shopt -s extglob +shopt -s nullglob version=$(sw_vers -productVersion) +cpu=$(uname -p) -cat /var/lib/dpkg/status | { - -while IFS= read -r line; do - #echo "#${firmware+@}/${blank+@} ${line}" 1>&2 - - if [[ ${line} == '' && "${blank+@}" ]]; then - continue - else - unset blank - fi +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 - if [[ ${line} == "Package: "@(firmware|gsc.*) ]]; then - firmware= - elif [[ ${line} == '' ]]; then - blank= - fi +model=$(sysctl -n "${model}") - if [[ "${firmware+@}" ]]; then - if [[ "${blank+@}" ]]; then - unset firmware - fi - continue - fi +status=${data}/status - #echo "${firmware+@}/${blank+@} ${line}" 1>&2 - echo "${line}" -done +function lower() { + sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' +} -#echo "#${firmware+@}/${blank+@} EOF" 1>&2 -if ! [[ "${blank+@}" || "${firmware+@}" ]]; then - echo -fi +# Generate New Package {{{ +function pseudo() { + local package=$1 version=$2 description=$3 name=$4 + echo "/." >"${data}"/info/"${package}".list -cat < Tag: role::cydia - EOF -echo "/." >/var/lib/dpkg/info/firmware.list + [[ -n ${name} ]] && echo "Name: ${name}" + echo +} +# }}} -gssc 2>&1 | 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 +output=$(mktemp "${data}"/status-tmp.XXXXXX) +chmod 644 "${output}" +xxxxxx=${output##*/status-tmp.} +rm -f "${data}"/status-tmp.!("${xxxxxx}") -cat </var/lib/dpkg/info/gsc."${name}".list + while IFS= read -r line; do + #echo "#${firmware+@}/${blank+@} ${line}" 1>&2 -done + if [[ ${line} == '' && "${blank+@}" ]]; then + continue + else + unset blank + fi -} >/var/lib/dpkg/status_ + if [[ ${line} == "Package: "@(firmware|gsc.*|cy+*) ]]; then + firmware= + elif [[ ${line} == '' ]]; then + blank= + fi -mv -f /var/lib/dpkg/status{_,} + if [[ "${firmware+@}" ]]; then + if [[ "${blank+@}" ]]; then + unset firmware + fi + continue + fi -if [[ ${version} = 1.0* || ${version} = 1.1.[012] ]]; then - user=root -else - user=mobile -fi + #echo "${firmware+@}/${blank+@} ${line}" 1>&2 + echo "${line}" + done <"${status}" -if [[ ! -h /User && -d /User ]]; then - cp -afT /User /var/"${user}" -fi && rm -rf /User && ln -s "/var/${user}" /User + #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 -echo 2 >/var/lib/cydia/firmware.ver + 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}" + +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