Unverified Commit 5c3530c9 authored by Philip Taron's avatar Philip Taron Committed by GitHub
Browse files

facetimehd-calibration: fix build (#438028)

parents 04da2daa 252b0b5c
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
# Described on https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files
#
# The whole download is 518MB; the deflate stream we're interested in is 1.2MB.
urlRoot="https://download.info.apple.com/Mac_OS_X/031-30890-20150812-ea191174-4130-11e5-a125-930911ba098f"
curl --insecure -o bootcamp.zip "$urlRoot/bootcamp$version.zip" -r 2338085-3492508

# Add appropriate headers and footers so that zcat extracts cleanly

{ printf '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00'
  cat bootcamp.zip
  printf '\x51\x1f\x86\x78\xcf\x5b\x12\x00'
} | zcat > AppleCamera64.exe
unrar x AppleCamera64.exe AppleCamera.sys

# These offsets and sizes are from the wiki also
dd bs=1 skip=1663920 count=33060 if=AppleCamera.sys of=9112_01XX.dat
dd bs=1 skip=1644880 count=19040 if=AppleCamera.sys of=1771_01XX.dat
dd bs=1 skip=1606800 count=19040 if=AppleCamera.sys of=1871_01XX.dat
dd bs=1 skip=1625840 count=19040 if=AppleCamera.sys of=1874_01XX.dat

mkdir -p "$out/lib/firmware/facetimehd"
cp -a *.dat "$out/lib/firmware/facetimehd"
+16 −78
Original line number Diff line number Diff line
{
  lib,
  stdenvNoCC,
  fetchurl,
  curl,
  unrar-wrapper,
  pkgs,
}:

let

  version = "5.1.5769";

  # Described on https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files

  # From the wiki page, range extracted with binwalk:
  zipUrl = "https://download.info.apple.com/Mac_OS_X/031-30890-20150812-ea191174-4130-11e5-a125-930911ba098f/bootcamp${version}.zip";
  zipRange = "2338085-3492508"; # the whole download is 518MB, this deflate stream is 1.2MB

  # CRC and length from the ZIP entry header (not strictly necessary, but makes it extract cleanly):
  gzFooter = ''\x51\x1f\x86\x78\xcf\x5b\x12\x00'';

  # Also from the wiki page:
  calibrationFiles = [
    {
      file = "1771_01XX.dat";
      offset = "1644880";
      size = "19040";
    }
    {
      file = "1871_01XX.dat";
      offset = "1606800";
      size = "19040";
    }
    {
      file = "1874_01XX.dat";
      offset = "1625840";
      size = "19040";
    }
    {
      file = "9112_01XX.dat";
      offset = "1663920";
      size = "33060";
    }
  ];

in

stdenvNoCC.mkDerivation {

  pname = "facetimehd-calibration";
  inherit version;
  src = fetchurl {
    url = zipUrl;
    sha256 = "1dzyv457fp6d8ly29sivqn6llwj5ydygx7p8kzvdnsp11zvid2xi";
    curlOpts = "-r ${zipRange}";
  };

  dontUnpack = true;
  dontInstall = true;
  version = "5.1.5769";

  nativeBuildInputs = [ unrar-wrapper ];
  # This is a special sort of fixed-output derivation
  outputHash = "sha256-KQBIlpa68wjQNgBiEnLtl6iEYseNrTlSdq9wiNni16k=";
  outputHashMode = "recursive";

  buildPhase = ''
    { printf '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00'
      cat $src
      printf '${gzFooter}'
    } | zcat > AppleCamera64.exe
    unrar x AppleCamera64.exe AppleCamera.sys
  __structuredAttrs = true;
  builder = ./builder.sh;

    mkdir -p $out/lib/firmware/facetimehd
  ''
  + lib.concatMapStrings (
    {
      file,
      offset,
      size,
    }:
    ''
      dd bs=1 skip=${offset} count=${size} if=AppleCamera.sys of=$out/lib/firmware/facetimehd/${file}
    ''
  ) calibrationFiles;
  nativeBuildInputs = [
    curl
    unrar-wrapper
  ];

  meta = with lib; {
  meta = {
    description = "facetimehd calibration";
    homepage = "https://support.apple.com/kb/DL1837";
    license = licenses.unfree;
    maintainers = with maintainers; [
    license = lib.licenses.unfree;
    maintainers = with lib.maintainers; [
      alexshpilkin
      womfoo
      grahamc
    ];
    platforms = [
      "i686-linux"
      "x86_64-linux"
    ];
    platforms = lib.platforms.all;
    sourceProvenance = with lib.sourceTypes; [ binaryFirmware ];
  };

}