summary refs log tree commit diff
path: root/pkgs/misc/cups/drivers/samsung/4.01.17.nix
blob: f81fa27503fd09f39b852ee8238888d0afd77b88 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Tested on linux-x86_64.  Might work on linux-i386.  Probably won't work on anything else.

# To use this driver in NixOS, add it to printing.drivers in configuration.nix.
# configuration.nix might look like this when you're done:
# { pkgs, ... }: {
#   printing = {
#     enable = true;
#     drivers = [ pkgs.samsung-unified-linux-driver_4_01_17 ];
#   };
#   (more stuff)
# }
# (This advice was tested on the 1st November 2016.)

{ stdenv, fetchurl, cups, libusb }:

# Do not bump lightly! Visit <http://www.bchemnet.com/suldr/supported.html>
# to see what will break when upgrading. Consider a new versioned attribute.
let
  installationPath = if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64" else "i386";
  appendPath = if stdenv.hostPlatform.system == "x86_64-linux" then "64" else "";
  libPath = stdenv.lib.makeLibraryPath [ cups libusb ] + ":$out/lib:${stdenv.cc.cc.lib}/lib${appendPath}";
in stdenv.mkDerivation rec {
  pname = "samsung-UnifiedLinuxDriver";
  version = "4.01.17";

  src = fetchurl {
    url = "http://www.bchemnet.com/suldr/driver/UnifiedLinuxDriver-${version}.tar.gz";
    sha256 = "1vv3pzvqpg1dq3xjr8161x2yp3v7ca75vil56ranhw5pkjwq66x0";
  };

  dontPatchELF = true;
  dontStrip = true;

  installPhase = ''
    cd Linux/${installationPath}
    mkdir -p $out/lib/cups/{backend,filter}
    install -Dm755 mfp $out/lib/cups/backend/
    install -Dm755 pstosecps pstospl pstosplc rastertospl rastertosplc $out/lib/cups/filter/
    install -Dm755 libscmssc.so $out/lib/

    GLOBIGNORE=*.so
    for exe in $out/lib/cups/**/*; do
      echo "Patching $exe"
      patchelf \
        --set-rpath ${libPath} \
        --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
        $exe
    done
    unset GLOBIGNORE

    install -v at_root/usr/lib${appendPath}/libmfp.so.1.0.1 $out/lib
    cd $out/lib
    ln -s -f libmfp.so.1.0.1 libmfp.so.1
    ln -s -f libmfp.so.1 libmfp.so

    for lib in $out/lib/*.so; do
      echo "Patching $lib"
      patchelf \
        --set-rpath ${libPath} \
        $lib
    done

    mkdir -p $out/share/cups/model/samsung
    cd -
    cd ../noarch/at_opt/share/ppd
    for i in *.ppd; do
      sed -i $i -e \
        "s,pstosecps,$out/lib/cups/filter/pstosecps,g; \
         s,pstospl,$out/lib/cups/filter/pstospl,g; \
         s,rastertospl,$out/lib/cups/filter/rastertospl,g"
    done;
    cp -r ./* $out/share/cups/model/samsung
  '';

  meta = with stdenv.lib; {
    description = "Samsung's Linux printing drivers; includes binaries without source code";
    homepage = http://www.samsung.com/;
    license = licenses.unfree;
    platforms = platforms.linux;
    maintainers = with maintainers; [ joko ];
  };
}