git.iko.soy/typeable/nixpkgs
on master help sign in
canon-cups-ufr2: 3.70 -> 5.40 (#155685)
commitb4797eaffc45f360849067549c709295f0c0c1d2 authordmayle <douglas@mayle.org> dateThu 20 Jan 2022, 08:55 (5 years ago) parent8bfa76f
2 files changed+103−248
pkgs/misc/cups/drivers/canon/default.nix+103−167 pkgs/misc/cups/drivers/canon/preload.c−81
pkgs/misc/cups/drivers/canon/default.nix+103−167
@@ -4,9 +4,15 @@
44, unzip
55, autoconf
66, automake
7−, libtool
7+, libtool_1_5
88, makeWrapper
99, cups
10+, jbigkit
11+, glib
12+, gtk3
13+, pkg-config
14+, gnome2
15+, libxml2
1016, ghostscript
1117, pkgsi686Linux
1218, zlib
@@ -15,16 +21,14 @@
1521let
1622
1723 i686_NIX_GCC = pkgsi686Linux.callPackage ({ gcc }: gcc) { };
18− i686_libxml2 = pkgsi686Linux.callPackage ({ libxml2 }: libxml2) { };
1924
20− commonVer = "4.10";
21− version = "3.70";
22− dl = "4/0100010264/01";
25+ version = "5.40";
26+ dl = "6/0100009236/10";
2327
2428 versionNoDots = builtins.replaceStrings [ "." ] [ "" ] version;
2529 src_canon = fetchurl {
26− url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-uken-07.tar.gz";
27− sha256 = "01nxpg3h1c64p5skxv904fg5c4sblmif486vkij2v62wwn6l65pz";
30+ url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-usen-20.tar.gz";
31+ sha256 = "sha256:069z6ijmql62mcdyxnzc9mf0dxa6z1107cd0ab4i1adk8kr3d75k";
2832 };
2933
3034in
@@ -36,190 +40,122 @@ stdenv.mkDerivation {
3640 src = src_canon;
3741
3842 postUnpack = ''
39− (cd $sourceRoot; tar -xzf Sources/cndrvcups-common-${commonVer}-1.tar.gz)
40− (cd $sourceRoot; tar -xzf Sources/cndrvcups-lb-${version}-1.tar.gz)
43+ (cd $sourceRoot; tar -xzf Sources/cnrdrvcups-lb-${version}-1.tar.gz)
44+ (cd $sourceRoot; sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-common-${version}/allgen.sh)
45+ (cd $sourceRoot; sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-common-${version}/allgen.sh)
46+ (cd $sourceRoot; sed -ie "s@_bindir=/usr/bin@_libdir=$out/bin@" cnrdrvcups-common-${version}/allgen.sh)
47+ (cd $sourceRoot; sed -ie "s@etc/cngplp@$out/etc/cngplp@" cnrdrvcups-common-${version}/cngplp/Makefile.am)
48+ (cd $sourceRoot; sed -ie "s@usr/share/cngplp@$out/usr/share/cngplp@" cnrdrvcups-common-${version}/cngplp/src/Makefile.am)
49+ (cd $sourceRoot; patchShebangs cnrdrvcups-common-${version})
50+
51+ (cd $sourceRoot; sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-lb-${version}/allgen.sh)
52+ (cd $sourceRoot; sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-lb-${version}/allgen.sh)
53+ (cd $sourceRoot; sed -ie "s@_bindir=/usr/bin@_libdir=$out/bin@" cnrdrvcups-lb-${version}/allgen.sh)
54+ (cd $sourceRoot; sed -ie '/^cd \.\.\/cngplp/,/^cd files/{/^cd files/!{d}}' cnrdrvcups-lb-${version}/allgen.sh)
55+ (cd $sourceRoot; sed -ie "s@cd \.\./pdftocpca@cd pdftocpca@" cnrdrvcups-lb-${version}/allgen.sh)
56+ (cd $sourceRoot; sed -i "/CNGPLPDIR/d" cnrdrvcups-lb-${version}/Makefile)
57+ (cd $sourceRoot; patchShebangs cnrdrvcups-lb-${version})
4158 '';
4259
43− nativeBuildInputs = [ makeWrapper unzip autoconf automake libtool ];
60+ nativeBuildInputs = [ makeWrapper unzip autoconf automake libtool_1_5 ];
4461
45− buildInputs = [ cups zlib ];
62+ buildInputs = [ cups zlib jbigkit glib gtk3 pkg-config gnome2.libglade libxml2 ];
4663
4764 installPhase = ''
4865 runHook preInstall
4966
50− ##
51− ## cndrvcups-common buildPhase
52− ##
53− ( cd cndrvcups-common-${commonVer}/buftool
54− autoreconf -fi
55− ./autogen.sh --prefix=$out --enable-progpath=$out/bin --libdir=$out/lib --disable-shared --enable-static
56− make
57− )
58−
59− ( cd cndrvcups-common-${commonVer}/backend
60− ./autogen.sh --prefix=$out --libdir=$out/lib
61− make
62− )
63−
64− ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
65− make
66− )
67−
68− ##
69− ## cndrvcups-common installPhase
70− ##
71−
72− ( cd cndrvcups-common-${commonVer}/buftool
73− make install
74− )
75−
76− ( cd cndrvcups-common-${commonVer}/backend
67+ (
68+ cd cnrdrvcups-common-${version}
69+ ./allgen.sh
7770 make install
7871 )
79−
80− ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
81− make install DESTDIR=$out/lib
82− )
83−
84− ( cd cndrvcups-common-${commonVer}/libs
85− chmod 755 *
86− mkdir -p $out/lib32
87− mkdir -p $out/bin
88− cp libcaiowrap.so.1.0.0 $out/lib32
89− cp libcaiousb.so.1.0.0 $out/lib32
90− cp libc3pl.so.0.0.1 $out/lib32
91− cp libcaepcm.so.1.0 $out/lib32
92− cp libColorGear.so.0.0.0 $out/lib32
93− cp libColorGearC.so.1.0.0 $out/lib32
94− cp libcanon_slim.so.1.0.0 $out/lib32
95− cp c3pldrv $out/bin
96− )
97−
98− (cd cndrvcups-common-${commonVer}/Rule
72+ (
73+ cd cnrdrvcups-common-${version}/Rule
9974 mkdir -p $out/share/usb
100− chmod 644 *.usb-quirks $out/share/usb
101− )
102−
103− (cd cndrvcups-common-${commonVer}/data
104− chmod 644 *.ICC
105− mkdir -p $out/share/caepcm
106− cp *.ICC $out/share/caepcm
107− cp *.icc $out/share/caepcm
108− cp *.PRF $out/share/caepcm
109− )
110−
111− (cd $out/lib32
112− ln -sf libc3pl.so.0.0.1 libc3pl.so.0
113− ln -sf libc3pl.so.0.0.1 libc3pl.so
114− ln -sf libcaepcm.so.1.0 libcaepcm.so.1
115− ln -sf libcaepcm.so.1.0 libcaepcm.so
116− ln -sf libcaiowrap.so.1.0.0 libcaiowrap.so.1
117− ln -sf libcaiowrap.so.1.0.0 libcaiowrap.so
118− ln -sf libcaiousb.so.1.0.0 libcaiousb.so.1
119− ln -sf libcaiousb.so.1.0.0 libcaiousb.so
120− ln -sf libcanon_slim.so.1.0.0 libcanon_slim.so.1
121− ln -sf libcanon_slim.so.1.0.0 libcanon_slim.so
122− ln -sf libColorGear.so.0.0.0 libColorGear.so.0
123− ln -sf libColorGear.so.0.0.0 libColorGear.so
124− ln -sf libColorGearC.so.1.0.0 libColorGearC.so.1
125− ln -sf libColorGearC.so.1.0.0 libColorGearC.so
126− )
127−
128− (cd $out/lib
129− ln -sf libcanonc3pl.so.1.0.0 libcanonc3pl.so
130− ln -sf libcanonc3pl.so.1.0.0 libcanonc3pl.so.1
75+ install -m 644 *.usb-quirks $out/share/usb
13176 )
132−
133− patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGear.so.0.0.0
134− patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGearC.so.1.0.0
135−
136− patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/c3pldrv
137−
138− # c3pldrv is programmed with fixed paths that point to "/usr/{bin,lib.share}/..."
139− # preload32 wrappes all necessary function calls to redirect the fixed paths
140− # into $out.
141− mkdir -p $out/libexec
142− preload32=$out/libexec/libpreload32.so
143− ${i686_NIX_GCC}/bin/gcc -shared ${./preload.c} -o $preload32 -ldl -DOUT=\"$out\" -fPIC
144− wrapProgram "$out/bin/c3pldrv" \
145− --set PRELOAD_DEBUG 1 \
146− --set LD_PRELOAD $preload32 \
147− --prefix LD_LIBRARY_PATH : "$out/lib32"
148−
149−
150−
151− ##
152− ## cndrvcups-lb buildPhase
153− ##
154−
155− ( cd cndrvcups-lb-${version}/buftool
156− ./autogen.sh --prefix=$out --libdir=$out/lib --enable-progpath=$out/bin --enable-static
157− make
77+ (
78+ cd cnrdrvcups-lb-${version}
79+ ./allgen.sh
80+ make install
15881 )
82+ (
83+ cd lib
84+ mkdir -p $out/lib32
85+ install -m 755 libs32/intel/libColorGearCufr2.so.2.0.0 $out/lib32
86+ install -m 755 libs32/intel/libcaepcmufr2.so.1.0 $out/lib32
87+ install -m 755 libs32/intel/libcaiocnpkbidir.so.1.0.0 $out/lib32
88+ install -m 755 libs32/intel/libcaiousb.so.1.0.0 $out/lib32
89+ install -m 755 libs32/intel/libcaiowrapufr2.so.1.0.0 $out/lib32
90+ install -m 755 libs32/intel/libcanon_slimufr2.so.1.0.0 $out/lib32
91+ install -m 755 libs32/intel/libcanonufr2r.so.1.0.0 $out/lib32
92+ install -m 755 libs32/intel/libcnaccm.so.1.0 $out/lib32
93+ install -m 755 libs32/intel/libcnlbcmr.so.1.0 $out/lib32
94+ install -m 755 libs32/intel/libcnncapcmr.so.1.0 $out/lib32
95+ install -m 755 libs32/intel/libufr2filterr.so.1.0.0 $out/lib32
96+
97+ mkdir -p $out/lib
98+ install -m 755 libs64/intel/libColorGearCufr2.so.2.0.0 $out/lib
99+ install -m 755 libs64/intel/libcaepcmufr2.so.1.0 $out/lib
100+ install -m 755 libs64/intel/libcaiocnpkbidir.so.1.0.0 $out/lib
101+ install -m 755 libs64/intel/libcaiousb.so.1.0.0 $out/lib
102+ install -m 755 libs64/intel/libcaiowrapufr2.so.1.0.0 $out/lib
103+ install -m 755 libs64/intel/libcanon_slimufr2.so.1.0.0 $out/lib
104+ install -m 755 libs64/intel/libcanonufr2r.so.1.0.0 $out/lib
105+ install -m 755 libs64/intel/libcnaccm.so.1.0 $out/lib
106+ install -m 755 libs64/intel/libcnlbcmr.so.1.0 $out/lib
107+ install -m 755 libs64/intel/libcnncapcmr.so.1.0 $out/lib
108+ install -m 755 libs64/intel/libufr2filterr.so.1.0.0 $out/lib
109+
110+ install -m 755 libs64/intel/cnpdfdrv $out/bin
111+ install -m 755 libs64/intel/cnpkbidir $out/bin
112+ install -m 755 libs64/intel/cnpkmoduleufr2r $out/bin
113+ install -m 755 libs64/intel/cnrsdrvufr2 $out/bin
114+ install -m 755 libs64/intel/cnsetuputil2 $out/bin
115+
116+ mkdir -p $out/share/cnpkbidir
117+ install -m 644 libs64/intel/cnpkbidir_info* $out/share/cnpkbidir
159118
160− ( cd cndrvcups-lb-${version}/pstoufr2cpca
161− ./autogen.sh --prefix=$out --libdir=$out/lib
162− make
119+ mkdir -p $out/share/ufr2filter
120+ install -m 644 libs64/intel/ThLB* $out/share/ufr2filter
163121 )
164122
165− ##
166− ## cndrvcups-lb installPhase
167− ##
168−
169− ( cd cndrvcups-lb-${version}/pstoufr2cpca
170− make install
123+ (
124+ cd $out/lib32
125+ ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
126+ ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so
127+ ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so.1
128+ ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so
129+ ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so.1
130+ ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so
131+ ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
171132 )
172133
173− ( cd cndrvcups-lb-${version}/libs
174− chmod 755 *
175− mkdir -p $out/lib32
176− mkdir -p $out/bin
177− cp libcanonufr2.la $out/lib32
178− cp libcanonufr2.so.1.0.0 $out/lib32
179− cp libufr2filter.so.1.0.0 $out/lib32
180− cp libEnoJBIG.so.1.0.0 $out/lib32
181− cp libEnoJPEG.so.1.0.0 $out/lib32
182− cp libcaiocnpkbidi.so.1.0.0 $out/lib32
183− cp libcnlbcm.so.1.0 $out/lib32
184−
185− cp cnpkmoduleufr2 $out/bin #maybe needs setuid 4755
186− cp cnpkbidi $out/bin
134+ (
135+ cd $out/lib
136+ ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
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 libufr2filterr.so.1.0.0 libufr2filterr.so
142+ ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
187143 )
188144
189− ( cd $out/lib32
190− ln -sf libcanonufr2.so.1.0.0 libcanonufr2.so
191− ln -sf libcanonufr2.so.1.0.0 libcanonufr2.so.1
192− ln -sf libufr2filter.so.1.0.0 libufr2filter.so
193− ln -sf libufr2filter.so.1.0.0 libufr2filter.so.1
194− ln -sf libEnoJBIG.so.1.0.0 libEnoJBIG.so
195− ln -sf libEnoJBIG.so.1.0.0 libEnoJBIG.so.1
196− ln -sf libEnoJPEG.so.1.0.0 libEnoJPEG.so
197− ln -sf libEnoJPEG.so.1.0.0 libEnoJPEG.so.1
198− ln -sf libcaiocnpkbidi.so.1.0.0 libcaiocnpkbidi.so
199− ln -sf libcaiocnpkbidi.so.1.0.0 libcaiocnpkbidi.so.1
200− ln -sf libcnlbcm.so.1.0 libcnlbcm.so.1
201− ln -sf libcnlbcm.so.1.0 libcnlbcm.so
202− )
145+ # Perhaps patch the lib64 version as well???
146+ patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGearCufr2.so.2.0.0
203147
204− ( cd cndrvcups-lb-${version}
205− chmod 644 data/CnLB*
206− chmod 644 libs/cnpkbidi_info*
207− chmod 644 libs/ThLB*
148+ (
149+ cd lib/data/ufr2
208150 mkdir -p $out/share/caepcm
209− mkdir -p $out/share/cnpkbidi
210− mkdir -p $out/share/ufr2filter
211− cp data/CnLB* $out/share/caepcm
212− cp libs/cnpkbidi_info* $out/share/cnpkbidi
213− cp libs/ThLB* $out/share/ufr2filter
151+ install -m 644 *.ICC $out/share/caepcm
152+ install -m 644 *.icc $out/share/caepcm
153+ install -m 644 *.PRF $out/share/caepcm
154+ install -m 644 CnLB* $out/share/caepcm
214155 )
215156
216157 mkdir -p $out/share/cups/model
217− install -c -m 644 cndrvcups-lb-${version}/ppd/CN*.ppd $out/share/cups/model/
218−
219− patchelf --set-rpath "$out/lib32:${i686_libxml2.out}/lib" $out/lib32/libcanonufr2.so.1.0.0
220−
221− patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/cnpkmoduleufr2
222− patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32:${i686_libxml2.out}/lib" $out/bin/cnpkbidi
158+ install -m 644 cnrdrvcups-lb-${version}/ppd/*.ppd $out/share/cups/model/
223159
224160 makeWrapper "${ghostscript}/bin/gs" "$out/bin/gs" \
225161 --prefix LD_LIBRARY_PATH ":" "$out/lib" \
pkgs/misc/cups/drivers/canon/preload.cdeleted−81
@@ -1,81 +0,0 @@
1−/*
2− * LD_PRELOAD trick to make c3pldrv handle the absolute path to /usr/{bin,lib,share)}.
3− * As c3pldrv is a 32 bit executable, /lib will be rewritten to /lib32.
4− *
5− * Usage:
6− * gcc -shared -fPIC -DOUT="$out" preload.c -o preload.so -ldl
7− * LD_PRELOAD=$PWD/preload.so ./c3pldrv
8− */
9−
10−#define _GNU_SOURCE
11−#include <stdio.h>
12−#include <stdlib.h>
13−#include <string.h>
14−#include <unistd.h>
15−#include <fcntl.h>
16−#include <dlfcn.h>
17−#include <limits.h>
18−
19−#ifndef OUT
20−#error Missing OUT define - path to the installation directory.
21−#endif
22−
23−typedef void *(*dlopen_func_t)(const char *filename, int flag);
24−typedef int (*open_func_t)(const char *pathname, int flags, ...);
25−typedef int (*execv_func_t)(const char *path, char *const argv[]);
26−
27−
28−void *dlopen(const char *filename, int flag)
29−{
30− dlopen_func_t orig_dlopen;
31− const char *new_filename;
32− char buffer[PATH_MAX];
33−
34− orig_dlopen = (dlopen_func_t)dlsym(RTLD_NEXT, "dlopen");
35−
36− new_filename = filename;
37− if (strncmp("/usr/lib", filename, 8) == 0) {
38− snprintf(buffer, PATH_MAX, OUT "/lib32%s", filename+8);
39− buffer[PATH_MAX-1] = '\0';
40− new_filename = buffer;
41− }
42−
43− return orig_dlopen(new_filename, flag);
44−}
45−
46−int open(const char *pathname, int flags, ...)
47−{
48− open_func_t orig_open;
49− const char *new_pathname;
50− char buffer[PATH_MAX];
51−
52− orig_open = (open_func_t)dlsym(RTLD_NEXT, "open");
53−
54− new_pathname = pathname;
55− if (strncmp("/usr/share", pathname, 10) == 0) {
56− snprintf(buffer, PATH_MAX, OUT "%s", pathname+4);
57− buffer[PATH_MAX-1] = '\0';
58− new_pathname = buffer;
59− }
60−
61− return orig_open(new_pathname, flags);
62−}
63−
64−int execv(const char *path, char *const argv[])
65−{
66− execv_func_t orig_execv;
67− const char *new_path;
68− char buffer[PATH_MAX];
69−
70− orig_execv = (execv_func_t)dlsym(RTLD_NEXT, "execv");
71−
72− new_path = path;
73− if (strncmp("/usr/bin", path, 8) == 0) {
74− snprintf(buffer, PATH_MAX, OUT "%s", path+4);
75− buffer[PATH_MAX-1] = '\0';
76− new_path = buffer;
77− }
78−
79− return orig_execv(new_path, argv);
80−}
81−