parent
9fa52ae9a2
commit
c80385d934
@ -0,0 +1,26 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
{ |
||||
options = { |
||||
|
||||
hardware.sane.dsseries.enable = |
||||
mkEnableOption "Brother DSSeries scan backend" // { |
||||
description = '' |
||||
When enabled, will automatically register the "dsseries" SANE backend. |
||||
|
||||
This supports the Brother DSmobile scanner series, including the |
||||
DS-620, DS-720D, DS-820W, and DS-920DW scanners. |
||||
''; |
||||
}; |
||||
}; |
||||
|
||||
config = mkIf (config.hardware.sane.enable && config.hardware.sane.dsseries.enable) { |
||||
|
||||
hardware.sane.extraBackends = [ pkgs.dsseries ]; |
||||
services.udev.packages = [ pkgs.dsseries ]; |
||||
boot.kernelModules = [ "sg" ]; |
||||
|
||||
}; |
||||
} |
@ -0,0 +1,53 @@ |
||||
{ stdenv, fetchurl, rpmextract }: |
||||
|
||||
stdenv.mkDerivation rec { |
||||
name = "libsane-dsseries-${version}"; |
||||
version = "1.0.5-1"; |
||||
|
||||
src = fetchurl { |
||||
url = "https://download.brother.com/welcome/dlf100974/${name}.x86_64.rpm"; |
||||
sha256 = "1wfdbfbf51cc7njzikdg48kwpnpc0pg5s6p0s0y3z0q7y59x2wbq"; |
||||
}; |
||||
|
||||
nativeBuildInputs = [ rpmextract ]; |
||||
|
||||
unpackCmd = '' |
||||
mkdir ${name} && pushd ${name} |
||||
rpmextract $curSrc |
||||
popd |
||||
''; |
||||
|
||||
patchPhase = '' |
||||
substituteInPlace etc/udev/rules.d/50-Brother_DSScanner.rules \ |
||||
--replace 'GROUP="users"' 'GROUP="scanner", ENV{libsane_matched}="yes"' |
||||
|
||||
mkdir -p etc/sane.d/dll.d |
||||
echo "dsseries" > etc/sane.d/dll.d/dsseries.conf |
||||
''; |
||||
|
||||
installPhase = '' |
||||
mkdir -p $out |
||||
cp -dr etc $out |
||||
cp -dr usr/lib64 $out/lib |
||||
''; |
||||
|
||||
preFixup = '' |
||||
for f in `find $out/lib/sane/ -type f`; do |
||||
# Make it possible to find libstdc++.so.6 |
||||
patchelf --set-rpath ${stdenv.cc.cc.lib}/lib:$out/lib/sane $f |
||||
|
||||
# Horrible kludge: The driver hardcodes /usr/lib/sane/ as a dlopen path. |
||||
# We can directly modify the binary to force a relative lookup instead. |
||||
# The new path is NULL-padded to the same length as the original path. |
||||
sed -i "s|/usr/lib/sane/%s|%s\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|g" $f |
||||
done |
||||
''; |
||||
|
||||
meta = { |
||||
description = "Brother DSSeries SANE backend driver"; |
||||
homepage = http://www.brother.com; |
||||
platforms = stdenv.lib.platforms.linux; |
||||
license = stdenv.lib.licenses.unfree; |
||||
maintainers = with stdenv.lib.maintainers; [ callahad ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue