about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/development/libraries/libimobiledevice/default.nix1
-rw-r--r--pkgs/development/libraries/libirecovery/default.nix54
-rw-r--r--pkgs/tools/misc/idevicerestore/default.nix58
-rw-r--r--pkgs/top-level/all-packages.nix3
4 files changed, 115 insertions, 1 deletions
diff --git a/pkgs/development/libraries/libimobiledevice/default.nix b/pkgs/development/libraries/libimobiledevice/default.nix
index 83a500c13802..6464e4e58201 100644
--- a/pkgs/development/libraries/libimobiledevice/default.nix
+++ b/pkgs/development/libraries/libimobiledevice/default.nix
@@ -34,7 +34,6 @@ stdenv.mkDerivation rec {
   preConfigure = "NOCONFIGURE=1 ./autogen.sh";
 
   configureFlags = [
-    "--disable-static"
     "--disable-openssl"
     "--without-cython"
   ];
diff --git a/pkgs/development/libraries/libirecovery/default.nix b/pkgs/development/libraries/libirecovery/default.nix
new file mode 100644
index 000000000000..32a2971b3e36
--- /dev/null
+++ b/pkgs/development/libraries/libirecovery/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, fetchFromGitHub, automake, autoconf, libtool, pkgconfig
+, libusb
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libirecovery";
+  version = "2019-01-28";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "5da2a0d7d60f79d93c283964888c6fbbc17be1a3";
+    sha256 = "0fqmr1h4b3qn608dn606y7aqv3bsm949gx72b5d6433xlw9b23n8";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkgconfig
+  ];
+
+  buildInputs = [
+    libusb
+    readline
+  ];
+
+  preConfigure = "NOCONFIGURE=1 ./autogen.sh";
+
+  # Packager note: Not clear whether this needs a NixOS configuration,
+  # as only the `idevicerestore` binary was tested so far (which worked
+  # without further configuration).
+  configureFlags = [
+    "--with-udevrulesdir=${placeholder ''out''}/lib/udev/rules.d"
+    ''--with-udevrule="OWNER=\"root\", GROUP=\"myusergroup\", MODE=\"0660\""''
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/libirecovery;
+    description = "Library and utility to talk to iBoot/iBSS via USB on Mac OS X, Windows, and Linux";
+    longDescription = ''
+      libirecovery is a cross-platform library which implements communication to
+      iBoot/iBSS found on Apple's iOS devices via USB. A command-line utility is also
+      provided.
+    '';
+    license = licenses.lgpl21;
+    # Upstream description says it works on more platforms, but packager hasn't tried that yet
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/pkgs/tools/misc/idevicerestore/default.nix b/pkgs/tools/misc/idevicerestore/default.nix
new file mode 100644
index 000000000000..a12fa04c5fce
--- /dev/null
+++ b/pkgs/tools/misc/idevicerestore/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, fetchFromGitHub, autoreconfHook, pkgconfig
+, curl
+, libimobiledevice
+, libirecovery
+, libzip
+, libusbmuxd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "idevicerestore";
+  version = "2019-02-14";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "8a882038b2b1e022fbd19eaf8bea51006a373c06";
+    sha256 = "17lisl7ll43ixl1zqwchn7jljrdyl2p9q99w30i6qaci71mas37m";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkgconfig
+  ];
+
+  buildInputs = [
+    curl
+    libimobiledevice
+    libirecovery
+    libzip
+    libusbmuxd
+    # Not listing other dependencies specified in
+    # https://github.com/libimobiledevice/idevicerestore/blob/8a882038b2b1e022fbd19eaf8bea51006a373c06/README#L20
+    # because they are inherited `libimobiledevice`.
+  ];
+
+  meta = with stdenv.lib; {
+    homepage = https://github.com/libimobiledevice/idevicerestore;
+    description = "Restore/upgrade firmware of iOS devices";
+    longDescription = ''
+      The idevicerestore tool allows to restore firmware files to iOS devices.
+
+      It is a full reimplementation of all granular steps which are performed during
+      restore of a firmware to a device.
+
+      In general, upgrades and downgrades are possible, however subject to
+      availability of SHSH blobs from Apple for signing the firmare files.
+
+      To restore a device to some firmware, simply run the following:
+      $ sudo idevicerestore -l
+
+      This will download and restore a device to the latest firmware available.
+    '';
+    license = licenses.lgpl21Plus;
+    # configure.ac suggests it should work for darwin and mingw as well but not tried yet
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index b27b57d4f6c8..2091d2b6f86e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -3839,6 +3839,7 @@ in
 
   ifuse = callPackage ../tools/filesystems/ifuse { };
   ideviceinstaller = callPackage ../tools/misc/ideviceinstaller { };
+  idevicerestore = callPackage ../tools/misc/idevicerestore { };
 
   inherit (callPackages ../tools/filesystems/irods rec {
             stdenv = llvmPackages_38.libcxxStdenv;
@@ -11833,6 +11834,8 @@ in
     inherit (darwin.apple_sdk.frameworks) Carbon;
   };
 
+  libirecovery = callPackage ../development/libraries/libirecovery { };
+
   libivykis = callPackage ../development/libraries/libivykis { };
 
   liblastfmSF = callPackage ../development/libraries/liblastfmSF { };