1{ lib
2, stdenv
3, fetchurl
4, unzip
5, autoconf
6, automake
7, libtool_1_5
8, makeWrapper
9, cups
10, jbigkit
11, glib
12, gtk3
13, gdk-pixbuf
14, pango
15, cairo
16, coreutils
17, atk
18, pkg-config
19, libxml2
20, runtimeShell
21, libredirect
22, ghostscript
23, pkgs
24, zlib
25}:
26
27let
28 system =
29 if stdenv.targetPlatform.system == "x86_64-linux" then "intel"
30 else if stdenv.targetPlatform.system == "aarch64-linux" then "arm"
31 else throw "Unsupported platform for Canon UFR2 Drivers: ${stdenv.targetPlatform.system}";
32 ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
33 libs = pkgs: lib.makeLibraryPath buildInputs;
34
35 version = "5.70";
36 dl = "8/0100007658/33";
37
38 versionNoDots = builtins.replaceStrings [ "." ] [ "" ] version;
39 src_canon = fetchurl {
40 url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-m17n-11.tar.gz";
41 hash = "sha256-d5VHlPpUPAr3RWVdQRdn42YLuVekOw1IaMFLVt1Iu7o=";
42 };
43
44 buildInputs = [ cups zlib jbigkit glib gtk3 libxml2 gdk-pixbuf pango cairo atk ];
45in
46stdenv.mkDerivation rec {
47 pname = "canon-cups-ufr2";
48 inherit version;
49 src = src_canon;
50
51 postUnpack = ''
52 (
53 cd $sourceRoot
54 tar -xf Sources/cnrdrvcups-lb-${version}-1.11.tar.xz
55 sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-common-${version}/allgen.sh
56 sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-common-${version}/allgen.sh
57 sed -ie "s@_bindir=/usr/bin@_bindir=$out/bin@" cnrdrvcups-common-${version}/allgen.sh
58 sed -ie "s@/usr@$out@" cnrdrvcups-common-${version}/{{backend,rasterfilter}/Makefile.am,rasterfilter/cnrasterproc.h}
59 sed -ie "s@etc/cngplp@$out/etc/cngplp@" cnrdrvcups-common-${version}/cngplp/Makefile.am
60 sed -ie "s@usr/share/cngplp@$out/usr/share/cngplp@" cnrdrvcups-common-${version}/cngplp/src/Makefile.am
61 patchShebangs cnrdrvcups-common-${version}
62
63 sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-lb-${version}/allgen.sh
64 sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-lb-${version}/allgen.sh
65 sed -ie "s@_bindir=/usr/bin@_bindir=$out/bin@" cnrdrvcups-lb-${version}/allgen.sh
66 sed -ie '/^cd \.\.\/cngplp/,/^cd files/{/^cd files/!{d}}' cnrdrvcups-lb-${version}/allgen.sh
67 sed -ie "s@cd \.\./pdftocpca@cd pdftocpca@" cnrdrvcups-lb-${version}/allgen.sh
68 sed -ie "s@/usr@$out@" cnrdrvcups-lb-${version}/pdftocpca/Makefile.am
69 sed -i "/CNGPLPDIR/d" cnrdrvcups-lb-${version}/Makefile
70 patchShebangs cnrdrvcups-lb-${version}
71 )
72 '';
73
74 nativeBuildInputs = [ makeWrapper unzip autoconf automake libtool_1_5 pkg-config ];
75
76 inherit buildInputs;
77
78 installPhase = ''
79 runHook preInstall
80
81 (
82 cd cnrdrvcups-common-${version}
83 ./allgen.sh
84 make install
85 )
86 (
87 cd cnrdrvcups-common-${version}/Rule
88 mkdir -p $out/share/cups/usb
89 install -m 644 *.usb-quirks $out/share/cups/usb
90 )
91 (
92 cd cnrdrvcups-lb-${version}
93 ./allgen.sh
94 make install
95
96 mkdir -p $out/share/cups/model
97 install -m 644 ppd/*.ppd $out/share/cups/model/
98 )
99
100 (
101 cd lib
102 mkdir -p $out/lib
103 install -m 755 libs64/${system}/libColorGearCufr2.so.2.0.0 $out/lib
104 install -m 755 libs64/${system}/libcaepcmufr2.so.1.0 $out/lib
105 install -m 755 libs64/${system}/libcaiocnpkbidir.so.1.0.0 $out/lib
106 install -m 755 libs64/${system}/libcaiousb.so.1.0.0 $out/lib
107 install -m 755 libs64/${system}/libcaiowrapufr2.so.1.0.0 $out/lib
108 install -m 755 libs64/${system}/libcanon_slimufr2.so.1.0.0 $out/lib
109 install -m 755 libs64/${system}/libcanonufr2r.so.1.0.0 $out/lib
110 install -m 755 libs64/${system}/libcnaccm.so.1.0 $out/lib
111 install -m 755 libs64/${system}/libcnlbcmr.so.1.0 $out/lib
112 install -m 755 libs64/${system}/libcnncapcmr.so.1.0 $out/lib
113 install -m 755 libs64/${system}/libufr2filterr.so.1.0.0 $out/lib
114
115 install -m 755 libs64/${system}/cnpdfdrv $out/bin
116 install -m 755 libs64/${system}/cnpkbidir $out/bin
117 install -m 755 libs64/${system}/cnpkmoduleufr2r $out/bin
118 install -m 755 libs64/${system}/cnrsdrvufr2 $out/bin
119 install -m 755 libs64/${system}/cnsetuputil2 $out/bin/cnsetuputil2
120
121 mkdir -p $out/share/cnpkbidir
122 install -m 644 libs64/${system}/cnpkbidir_info* $out/share/cnpkbidir
123
124 mkdir -p $out/share/ufr2filter
125 install -m 644 libs64/${system}/ThLB* $out/share/ufr2filter
126 )
127
128 (
129 cd $out/lib
130
131 ln -sf libColorGearCufr2.so.2.0.0 libColorGearCufr2.so
132 ln -sf libColorGearCufr2.so.2.0.0 libColorGearCufr2.so.2
133 ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
134 ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so.1
135 ln -sf libcaiocnpkbidir.so.1.0.0 libcaiocnpkbidir.so
136 ln -sf libcaiocnpkbidir.so.1.0.0 libcaiocnpkbidir.so.1
137 ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so
138 ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so.1
139 ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so
140 ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so.1
141 ln -sf libcanonufr2r.so.1.0.0 libcanonufr2r.so
142 ln -sf libcanonufr2r.so.1.0.0 libcanonufr2r.so.1
143 ln -sf libcnlbcmr.so.1.0 libcnlbcmr.so
144 ln -sf libcnlbcmr.so.1.0 libcnlbcmr.so.1
145 ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so
146 ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
147 ln -sf libuictlufr2r.so.1.0.0 libuictlufr2r.so
148 ln -sf libuictlufr2r.so.1.0.0 libuictlufr2r.so.1
149
150 patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64:$out/lib" libcanonufr2r.so.1.0.0
151 patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" libcaepcmufr2.so.1.0
152 patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" libColorGearCufr2.so.2.0.0
153 )
154
155 (
156 cd $out/bin
157 patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" cnsetuputil2 cnpdfdrv
158 patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64:$out/lib" cnpkbidir cnrsdrvufr2 cnpkmoduleufr2r cnjbigufr2
159
160 wrapProgram $out/bin/cnrsdrvufr2 \
161 --prefix LD_LIBRARY_PATH ":" "$out/lib" \
162 --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
163 --set NIX_REDIRECTS /usr/bin/cnpkmoduleufr2r=$out/bin/cnpkmoduleufr2r:/usr/bin/cnjbigufr2=$out/bin/cnjbigufr2
164
165 wrapProgram $out/bin/cnsetuputil2 \
166 --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
167 --set NIX_REDIRECTS /usr/share/cnsetuputil2=$out/usr/share/cnsetuputil2
168 )
169
170 (
171 cd lib/data/ufr2
172 mkdir -p $out/share/caepcm
173 install -m 644 *.ICC $out/share/caepcm
174 install -m 644 *.icc $out/share/caepcm
175 install -m 644 *.PRF $out/share/caepcm
176 install -m 644 CnLB* $out/share/caepcm
177 )
178
179 (
180 cd cnrdrvcups-utility-${version}/data
181 mkdir -p $out/usr/share/cnsetuputil2
182 install -m 644 cnsetuputil* $out/usr/share/cnsetuputil2
183 )
184
185 makeWrapper "${ghostscript}/bin/gs" "$out/bin/gs" \
186 --prefix LD_LIBRARY_PATH ":" "$out/lib" \
187 --prefix PATH ":" "$out/bin"
188
189 runHook postInstall
190 '';
191
192 meta = with lib; {
193 description = "CUPS Linux drivers for Canon printers";
194 homepage = "http://www.canon.com/";
195 sourceProvenance = with sourceTypes; [ binaryNativeCode ];
196 license = licenses.unfree;
197 maintainers = with maintainers; [ lluchs ];
198 };
199}