about summary refs log tree commit diff
path: root/pkgs/applications/graphics
diff options
context:
space:
mode:
authorTobias Geerinckx-Rice <tobias.geerinckx.rice@gmail.com>2015-12-26 19:48:33 +0100
committerTobias Geerinckx-Rice <tobias.geerinckx.rice@gmail.com>2015-12-26 19:50:17 +0100
commit8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f (patch)
tree403a1bb32b9c31ae3f5cd3b0205d84ae35180efd /pkgs/applications/graphics
parentc05165ba5ce24fb793040218b8e899c53bda448c (diff)
downloadnixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar.gz
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar.bz2
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar.lz
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar.xz
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.tar.zst
nixlib-8b4273a65dfc73044f27f6f43fc7f9a7c2202d9f.zip
saneBackends: add generic extraFirmware support
This usurps the model-specific gt68xxFirmware and snapscanFirmware,
which are still supported for backwards compatibility – hopefully
not forever.
Diffstat (limited to 'pkgs/applications/graphics')
-rw-r--r--pkgs/applications/graphics/sane/backends/generic.nix39
1 files changed, 28 insertions, 11 deletions
diff --git a/pkgs/applications/graphics/sane/backends/generic.nix b/pkgs/applications/graphics/sane/backends/generic.nix
index 5b6c8943783d..e98774a43681 100644
--- a/pkgs/applications/graphics/sane/backends/generic.nix
+++ b/pkgs/applications/graphics/sane/backends/generic.nix
@@ -1,7 +1,14 @@
 { stdenv, fetchurl
 , avahi, libusb1, libv4l, net_snmp
 , gettext, pkgconfig
+
+# List of { src name backend } attibute sets - see installFirmware below:
+, extraFirmware ? []
+
+# For backwards compatibility with older setups; use extraFirmware instead:
 , gt68xxFirmware ? null, snapscanFirmware ? null
+
+# Passed from versioned package (e.g. default.nix, git.nix):
 , version, src, ...
 }:
 
@@ -20,20 +27,30 @@ stdenv.mkDerivation {
   buildInputs = [ avahi libusb1 libv4l net_snmp ];
   nativeBuildInputs = [ gettext pkgconfig ];
 
-  postInstall = ''
+  postInstall = let
+
+    compatFirmware = extraFirmware
+      ++ stdenv.lib.optional (gt68xxFirmware != null) {
+        src = gt68xxFirmware.fw;
+        inherit (gt68xxFirmware) name;
+        backend = "gt68xx";
+      }
+      ++ stdenv.lib.optional (snapscanFirmware != null) {
+        src = snapscanFirmware;
+        name = "your-firmwarefile.bin";
+        backend = "snapscan";
+      };
+
+    installFirmware = f: ''
+      mkdir -p $out/share/sane/${f.backend}
+      ln -sv ${f.src} $out/share/sane/${f.backend}/${f.name}
+    '';
+
+  in ''
     mkdir -p $out/etc/udev/rules.d/
     ./tools/sane-desc -m udev > $out/etc/udev/rules.d/49-libsane.rules || \
     cp tools/udev/libsane.rules $out/etc/udev/rules.d/49-libsane.rules
-  '';
-
-  preInstall =
-    if gt68xxFirmware != null then
-      "mkdir -p \${out}/share/sane/gt68xx ; ln -s " + gt68xxFirmware.fw +
-      " \${out}/share/sane/gt68xx/" + gt68xxFirmware.name
-    else if snapscanFirmware != null then
-      "mkdir -p \${out}/share/sane/snapscan ; ln -s " + snapscanFirmware +
-      " \${out}/share/sane/snapscan/your-firmwarefile.bin"
-    else "";
+  '' + stdenv.lib.concatStrings (builtins.map installFirmware compatFirmware);
 
   meta = with stdenv.lib; {
     inherit version;