about summary refs log tree commit diff
path: root/pkgs/misc/cups/drivers/canon/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/misc/cups/drivers/canon/default.nix')
-rw-r--r--pkgs/misc/cups/drivers/canon/default.nix329
1 files changed, 154 insertions, 175 deletions
diff --git a/pkgs/misc/cups/drivers/canon/default.nix b/pkgs/misc/cups/drivers/canon/default.nix
index 93bc1f79e2503..5a01a0295a8ac 100644
--- a/pkgs/misc/cups/drivers/canon/default.nix
+++ b/pkgs/misc/cups/drivers/canon/default.nix
@@ -1,13 +1,28 @@
 { lib
 , stdenv
+, stdenv_32bit
 , fetchurl
 , unzip
 , autoconf
 , automake
-, libtool
+, libtool_1_5
 , makeWrapper
 , cups
+, jbigkit
+, glib
+, gtk3
+, gdk-pixbuf
+, pango
+, cairo
+, coreutils
+, atk
+, pkg-config
+, gnome2
+, libxml2
+, runtimeShell
+, proot
 , ghostscript
+, pkgs
 , pkgsi686Linux
 , zlib
 }:
@@ -15,211 +30,175 @@
 let
 
   i686_NIX_GCC = pkgsi686Linux.callPackage ({ gcc }: gcc) { };
-  i686_libxml2 = pkgsi686Linux.callPackage ({ libxml2 }: libxml2) { };
+  ld32 =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "${stdenv.cc}/nix-support/dynamic-linker-m32"
+    else if stdenv.hostPlatform.system == "i686-linux" then "${stdenv.cc}/nix-support/dynamic-linker"
+    else throw "Unsupported platform for Canon UFR2 Drivers: ${stdenv.hostPlatform.system}";
+  ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
+  libs = pkgs: lib.makeLibraryPath buildInputs;
 
-  commonVer = "4.10";
-  version = "3.70";
-  dl = "4/0100010264/01";
+  version = "5.40";
+  dl = "6/0100009236/10";
 
   versionNoDots = builtins.replaceStrings [ "." ] [ "" ] version;
   src_canon = fetchurl {
-    url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-uken-07.tar.gz";
-    sha256 = "01nxpg3h1c64p5skxv904fg5c4sblmif486vkij2v62wwn6l65pz";
+    url = "http://gdlp01.c-wss.com/gds/${dl}/linux-UFRII-drv-v${versionNoDots}-usen-20.tar.gz";
+    sha256 = "sha256:069z6ijmql62mcdyxnzc9mf0dxa6z1107cd0ab4i1adk8kr3d75k";
   };
 
+  buildInputs = [ cups zlib jbigkit glib gtk3 pkg-config gnome2.libglade libxml2 gdk-pixbuf pango cairo atk ];
+
 in
 
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "canon-cups-ufr2";
   inherit version;
   src = src_canon;
 
   postUnpack = ''
-    (cd $sourceRoot; tar -xzf Sources/cndrvcups-common-${commonVer}-1.tar.gz)
-    (cd $sourceRoot; tar -xzf Sources/cndrvcups-lb-${version}-1.tar.gz)
+    (cd $sourceRoot; tar -xzf Sources/cnrdrvcups-lb-${version}-1.tar.gz)
+    (cd $sourceRoot; sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-common-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-common-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@_bindir=/usr/bin@_libdir=$out/bin@" cnrdrvcups-common-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@etc/cngplp@$out/etc/cngplp@" cnrdrvcups-common-${version}/cngplp/Makefile.am)
+    (cd $sourceRoot; sed -ie "s@usr/share/cngplp@$out/usr/share/cngplp@" cnrdrvcups-common-${version}/cngplp/src/Makefile.am)
+    (cd $sourceRoot; patchShebangs cnrdrvcups-common-${version})
+
+    (cd $sourceRoot; sed -ie "s@_prefix=/usr@_prefix=$out@" cnrdrvcups-lb-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@_libdir=/usr/lib@_libdir=$out/lib@" cnrdrvcups-lb-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@_bindir=/usr/bin@_libdir=$out/bin@" cnrdrvcups-lb-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie '/^cd \.\.\/cngplp/,/^cd files/{/^cd files/!{d}}' cnrdrvcups-lb-${version}/allgen.sh)
+    (cd $sourceRoot; sed -ie "s@cd \.\./pdftocpca@cd pdftocpca@" cnrdrvcups-lb-${version}/allgen.sh)
+    (cd $sourceRoot; sed -i "/CNGPLPDIR/d" cnrdrvcups-lb-${version}/Makefile)
+    (cd $sourceRoot; patchShebangs cnrdrvcups-lb-${version})
   '';
 
-  nativeBuildInputs = [ makeWrapper unzip autoconf automake libtool ];
+  nativeBuildInputs = [ makeWrapper unzip autoconf automake libtool_1_5 ];
 
-  buildInputs = [ cups zlib ];
+  inherit buildInputs;
 
   installPhase = ''
     runHook preInstall
 
-    ##
-    ## cndrvcups-common buildPhase
-    ##
-    ( cd cndrvcups-common-${commonVer}/buftool
-      autoreconf -fi
-      ./autogen.sh --prefix=$out --enable-progpath=$out/bin --libdir=$out/lib --disable-shared --enable-static
-      make
-    )
-
-    ( cd cndrvcups-common-${commonVer}/backend
-      ./autogen.sh --prefix=$out --libdir=$out/lib
-      make
-    )
-
-    ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
-      make
-    )
-
-    ##
-    ## cndrvcups-common installPhase
-    ##
-
-    ( cd cndrvcups-common-${commonVer}/buftool
-      make install
-    )
-
-    ( cd cndrvcups-common-${commonVer}/backend
+    (
+      cd cnrdrvcups-common-${version}
+      ./allgen.sh
       make install
     )
-
-    ( cd cndrvcups-common-${commonVer}/c3plmod_ipc
-      make install DESTDIR=$out/lib
-    )
-
-    ( cd cndrvcups-common-${commonVer}/libs
-      chmod 755 *
-      mkdir -p $out/lib32
-      mkdir -p $out/bin
-      cp libcaiowrap.so.1.0.0 $out/lib32
-      cp libcaiousb.so.1.0.0 $out/lib32
-      cp libc3pl.so.0.0.1 $out/lib32
-      cp libcaepcm.so.1.0 $out/lib32
-      cp libColorGear.so.0.0.0 $out/lib32
-      cp libColorGearC.so.1.0.0 $out/lib32
-      cp libcanon_slim.so.1.0.0 $out/lib32
-      cp c3pldrv $out/bin
-    )
-
-    (cd cndrvcups-common-${commonVer}/Rule
+    (
+      cd cnrdrvcups-common-${version}/Rule
       mkdir -p $out/share/usb
-      chmod 644 *.usb-quirks $out/share/usb
-    )
-
-    (cd cndrvcups-common-${commonVer}/data
-      chmod 644 *.ICC
-      mkdir -p $out/share/caepcm
-      cp *.ICC $out/share/caepcm
-      cp *.icc $out/share/caepcm
-      cp *.PRF $out/share/caepcm
-    )
-
-    (cd $out/lib32
-      ln -sf libc3pl.so.0.0.1 libc3pl.so.0
-      ln -sf libc3pl.so.0.0.1 libc3pl.so
-      ln -sf libcaepcm.so.1.0 libcaepcm.so.1
-      ln -sf libcaepcm.so.1.0 libcaepcm.so
-      ln -sf libcaiowrap.so.1.0.0 libcaiowrap.so.1
-      ln -sf libcaiowrap.so.1.0.0 libcaiowrap.so
-      ln -sf libcaiousb.so.1.0.0 libcaiousb.so.1
-      ln -sf libcaiousb.so.1.0.0 libcaiousb.so
-      ln -sf libcanon_slim.so.1.0.0 libcanon_slim.so.1
-      ln -sf libcanon_slim.so.1.0.0 libcanon_slim.so
-      ln -sf libColorGear.so.0.0.0 libColorGear.so.0
-      ln -sf libColorGear.so.0.0.0 libColorGear.so
-      ln -sf libColorGearC.so.1.0.0 libColorGearC.so.1
-      ln -sf libColorGearC.so.1.0.0 libColorGearC.so
-    )
-
-    (cd $out/lib
-      ln -sf libcanonc3pl.so.1.0.0 libcanonc3pl.so
-      ln -sf libcanonc3pl.so.1.0.0 libcanonc3pl.so.1
-    )
-
-    patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGear.so.0.0.0
-    patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib" $out/lib32/libColorGearC.so.1.0.0
-
-    patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/c3pldrv
-
-    # c3pldrv is programmed with fixed paths that point to "/usr/{bin,lib.share}/..."
-    # preload32 wrappes all necessary function calls to redirect the fixed paths
-    # into $out.
-    mkdir -p $out/libexec
-    preload32=$out/libexec/libpreload32.so
-    ${i686_NIX_GCC}/bin/gcc -shared ${./preload.c} -o $preload32 -ldl -DOUT=\"$out\" -fPIC
-    wrapProgram "$out/bin/c3pldrv" \
-      --set PRELOAD_DEBUG 1 \
-      --set LD_PRELOAD $preload32 \
-      --prefix LD_LIBRARY_PATH : "$out/lib32"
-
-
-
-    ##
-    ## cndrvcups-lb buildPhase
-    ##
-
-    ( cd cndrvcups-lb-${version}/buftool
-      ./autogen.sh --prefix=$out --libdir=$out/lib --enable-progpath=$out/bin --enable-static
-      make
+      install -m 644 *.usb-quirks $out/share/usb
     )
-
-    ( cd cndrvcups-lb-${version}/pstoufr2cpca
-      ./autogen.sh --prefix=$out --libdir=$out/lib
-      make
-    )
-
-    ##
-    ## cndrvcups-lb installPhase
-    ##
-
-    ( cd cndrvcups-lb-${version}/pstoufr2cpca
+    (
+      cd cnrdrvcups-lb-${version}
+      ./allgen.sh
       make install
-    )
-
-    ( cd cndrvcups-lb-${version}/libs
-      chmod 755 *
-      mkdir -p $out/lib32
-      mkdir -p $out/bin
-      cp libcanonufr2.la $out/lib32
-      cp libcanonufr2.so.1.0.0 $out/lib32
-      cp libufr2filter.so.1.0.0 $out/lib32
-      cp libEnoJBIG.so.1.0.0 $out/lib32
-      cp libEnoJPEG.so.1.0.0 $out/lib32
-      cp libcaiocnpkbidi.so.1.0.0 $out/lib32
-      cp libcnlbcm.so.1.0 $out/lib32
-
-      cp cnpkmoduleufr2 $out/bin #maybe needs setuid 4755
-      cp cnpkbidi $out/bin
-    )
 
-    ( cd $out/lib32
-      ln -sf libcanonufr2.so.1.0.0 libcanonufr2.so
-      ln -sf libcanonufr2.so.1.0.0 libcanonufr2.so.1
-      ln -sf libufr2filter.so.1.0.0 libufr2filter.so
-      ln -sf libufr2filter.so.1.0.0 libufr2filter.so.1
-      ln -sf libEnoJBIG.so.1.0.0 libEnoJBIG.so
-      ln -sf libEnoJBIG.so.1.0.0 libEnoJBIG.so.1
-      ln -sf libEnoJPEG.so.1.0.0 libEnoJPEG.so
-      ln -sf libEnoJPEG.so.1.0.0 libEnoJPEG.so.1
-      ln -sf libcaiocnpkbidi.so.1.0.0 libcaiocnpkbidi.so
-      ln -sf libcaiocnpkbidi.so.1.0.0 libcaiocnpkbidi.so.1
-      ln -sf libcnlbcm.so.1.0 libcnlbcm.so.1
-      ln -sf libcnlbcm.so.1.0 libcnlbcm.so
+      mkdir -p $out/share/cups/model
+      install -m 644 ppd/*.ppd $out/share/cups/model/
     )
+    (
+      cd lib
+      mkdir -p $out/lib32
+      install -m 755 libs32/intel/libColorGearCufr2.so.2.0.0 $out/lib32
+      install -m 755 libs32/intel/libcaepcmufr2.so.1.0 $out/lib32
+      install -m 755 libs32/intel/libcaiocnpkbidir.so.1.0.0 $out/lib32
+      install -m 755 libs32/intel/libcaiousb.so.1.0.0 $out/lib32
+      install -m 755 libs32/intel/libcaiowrapufr2.so.1.0.0 $out/lib32
+      install -m 755 libs32/intel/libcanon_slimufr2.so.1.0.0 $out/lib32
+      install -m 755 libs32/intel/libcanonufr2r.so.1.0.0 $out/lib32
+      install -m 755 libs32/intel/libcnaccm.so.1.0 $out/lib32
+      install -m 755 libs32/intel/libcnlbcmr.so.1.0 $out/lib32
+      install -m 755 libs32/intel/libcnncapcmr.so.1.0 $out/lib32
+      install -m 755 libs32/intel/libufr2filterr.so.1.0.0 $out/lib32
+
+      mkdir -p $out/lib
+      install -m 755 libs64/intel/libColorGearCufr2.so.2.0.0 $out/lib
+      install -m 755 libs64/intel/libcaepcmufr2.so.1.0 $out/lib
+      install -m 755 libs64/intel/libcaiocnpkbidir.so.1.0.0 $out/lib
+      install -m 755 libs64/intel/libcaiousb.so.1.0.0 $out/lib
+      install -m 755 libs64/intel/libcaiowrapufr2.so.1.0.0 $out/lib
+      install -m 755 libs64/intel/libcanon_slimufr2.so.1.0.0 $out/lib
+      install -m 755 libs64/intel/libcanonufr2r.so.1.0.0 $out/lib
+      install -m 755 libs64/intel/libcnaccm.so.1.0 $out/lib
+      install -m 755 libs64/intel/libcnlbcmr.so.1.0 $out/lib
+      install -m 755 libs64/intel/libcnncapcmr.so.1.0 $out/lib
+      install -m 755 libs64/intel/libufr2filterr.so.1.0.0 $out/lib
+
+      install -m 755 libs64/intel/cnpdfdrv $out/bin
+      install -m 755 libs64/intel/cnpkbidir $out/bin
+      install -m 755 libs64/intel/cnpkmoduleufr2r $out/bin
+      install -m 755 libs64/intel/cnrsdrvufr2 $out/bin
+      install -m 755 libs64/intel/cnsetuputil2 $out/bin/cnsetuputil2
+
+      mkdir -p $out/share/cnpkbidir
+      install -m 644 libs64/intel/cnpkbidir_info* $out/share/cnpkbidir
 
-    ( cd cndrvcups-lb-${version}
-      chmod 644 data/CnLB*
-      chmod 644 libs/cnpkbidi_info*
-      chmod 644 libs/ThLB*
-      mkdir -p $out/share/caepcm
-      mkdir -p $out/share/cnpkbidi
       mkdir -p $out/share/ufr2filter
-      cp data/CnLB* $out/share/caepcm
-      cp libs/cnpkbidi_info* $out/share/cnpkbidi
-      cp libs/ThLB* $out/share/ufr2filter
+      install -m 644 libs64/intel/ThLB* $out/share/ufr2filter
+    )
+
+    (
+      cd $out/lib32
+      ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
+      ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so.1
+      ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so
+      ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so.1
+      ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so
+      ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so.1
+      ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so
+      ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
+
+      patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib:${libs pkgsi686Linux}:${stdenv_32bit.glibc.out}/lib:${pkgsi686Linux.libxml2.out}/lib:$out/lib32" libcanonufr2r.so.1.0.0
+      patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib:${libs pkgsi686Linux}:${stdenv_32bit.glibc.out}/lib" libcaepcmufr2.so.1.0
+      patchelf --set-rpath "$(cat ${i686_NIX_GCC}/nix-support/orig-cc)/lib:${libs pkgsi686Linux}:${stdenv_32bit.glibc.out}/lib" libColorGearCufr2.so.2.0.0
+    )
+
+    (
+      cd $out/lib
+      ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so
+      ln -sf libcaepcmufr2.so.1.0 libcaepcmufr2.so.1
+      ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so
+      ln -sf libcaiowrapufr2.so.1.0.0 libcaiowrapufr2.so.1
+      ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so
+      ln -sf libcanon_slimufr2.so.1.0.0 libcanon_slimufr2.so.1
+      ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so
+      ln -sf libufr2filterr.so.1.0.0 libufr2filterr.so.1
+
+      patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64:$out/lib" libcanonufr2r.so.1.0.0
+      patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" libcaepcmufr2.so.1.0
+      patchelf --set-rpath "$(cat $NIX_CC/nix-support/orig-cc)/lib:${libs pkgs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" libColorGearCufr2.so.2.0.0
+    )
+
+    (
+      cd $out/bin
+      patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" cnsetuputil2
+      patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" cnpdfdrv
+      patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64:$out/lib" cnpkbidir
+      patchelf --set-interpreter "$(cat ${ld64})" --set-rpath "${lib.makeLibraryPath buildInputs}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64:$out/lib" cnrsdrvufr2
+
+      mv cnsetuputil2 cnsetuputil2.wrapped
+      echo "#!${runtimeShell} -e" > cnsetuputil2
+      echo "exec ${proot}/bin/proot -b $out/usr/share/cnsetuputil2:/usr/share/cnsetuputil2 -b ${coreutils}/bin/ls:/bin/ls -b ${cups}/share:/usr/share/cups $out/bin/cnsetuputil2.wrapped" > cnsetuputil2
+      chmod +x cnsetuputil2
+    )
+
+    (
+      cd lib/data/ufr2
+      mkdir -p $out/share/caepcm
+      install -m 644 *.ICC $out/share/caepcm
+      install -m 644 *.icc $out/share/caepcm
+      install -m 644 *.PRF $out/share/caepcm
+      install -m 644 CnLB* $out/share/caepcm
     )
 
-    mkdir -p $out/share/cups/model
-    install -c -m 644 cndrvcups-lb-${version}/ppd/CN*.ppd $out/share/cups/model/
-
-    patchelf --set-rpath "$out/lib32:${i686_libxml2.out}/lib" $out/lib32/libcanonufr2.so.1.0.0
-
-    patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32" $out/bin/cnpkmoduleufr2
-    patchelf --interpreter "$(cat ${i686_NIX_GCC}/nix-support/dynamic-linker)" --set-rpath "$out/lib32:${i686_libxml2.out}/lib" $out/bin/cnpkbidi
+    (
+      cd cnrdrvcups-utility-${version}/data
+      mkdir -p $out/usr/share/cnsetuputil2
+      install -m 644 cnsetuputil* $out/usr/share/cnsetuputil2
+    )
 
     makeWrapper "${ghostscript}/bin/gs" "$out/bin/gs" \
       --prefix LD_LIBRARY_PATH ":" "$out/lib" \
@@ -233,7 +212,7 @@ stdenv.mkDerivation {
     homepage = "http://www.canon.com/";
     license = licenses.unfree;
     maintainers = with maintainers; [
-      kylesferrazza
+      # please consider maintaining if you are updating this package
     ];
   };
 }