about summary refs log tree commit diff
path: root/pkgs/misc/cups
diff options
context:
space:
mode:
authorBenno Fünfstück <benno.fuenfstueck@gmail.com>2017-07-18 14:37:32 +0200
committerGitHub <noreply@github.com>2017-07-18 14:37:32 +0200
commit99fbd867ef1fe7f4bbe802aec02a27ee88cf3946 (patch)
treef3f514c8229c6aff8be05a48d4bcdc3d4308a198 /pkgs/misc/cups
parentef95175ba30fd6b0e346f125e308529340e65c00 (diff)
parent67d02cd60a29212700e051833bf72702a27bde5a (diff)
downloadnixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar.gz
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar.bz2
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar.lz
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar.xz
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.tar.zst
nixlib-99fbd867ef1fe7f4bbe802aec02a27ee88cf3946.zip
Merge pull request #27031 from jerith666/cnijfilter-2-80
cnijfilter: init at 2.80
Diffstat (limited to 'pkgs/misc/cups')
-rw-r--r--pkgs/misc/cups/drivers/cnijfilter_2_80/default.nix109
-rw-r--r--pkgs/misc/cups/drivers/cnijfilter_2_80/patches/libpng15.patch23
-rw-r--r--pkgs/misc/cups/drivers/cnijfilter_2_80/patches/missing-include.patch20
3 files changed, 152 insertions, 0 deletions
diff --git a/pkgs/misc/cups/drivers/cnijfilter_2_80/default.nix b/pkgs/misc/cups/drivers/cnijfilter_2_80/default.nix
new file mode 100644
index 000000000000..0a0f5e3782f3
--- /dev/null
+++ b/pkgs/misc/cups/drivers/cnijfilter_2_80/default.nix
@@ -0,0 +1,109 @@
+{ stdenv, lib, fetchzip,
+  autoconf, automake, libtool,
+  cups, popt, libtiff, libpng,
+  ghostscript }:
+
+/* this derivation is basically just a transcription of the rpm .spec
+   file included in the tarball */
+
+stdenv.mkDerivation rec {
+  name = "cnijfilter-${version}";
+
+  /* important note about versions: cnijfilter packages seem to use
+     versions in a non-standard way.  the version indicates which
+     printers are supported in the package.  so this package should
+     not be "upgraded" in the usual way.
+
+     instead, if you want to include another version supporting your
+     printer, you should try to abstract out the common things (which
+     should be pretty much everything except the version and the 'pr'
+     and 'pr_id' values to loop over). */
+  version = "2.80";
+
+  src = fetchzip {
+    url = "http://gdlp01.c-wss.com/gds/1/0100000841/01/cnijfilter-common-2.80-1.tar.gz";
+    sha256 = "06s9nl155yxmx56056y22kz1p5b2sb5fhr3gf4ddlczjkd1xch53";
+  };
+
+  buildInputs = [ autoconf libtool automake
+                  cups popt libtiff libpng
+                  ghostscript ];
+
+  patches = [ ./patches/missing-include.patch
+              ./patches/libpng15.patch ];
+
+  postPatch = ''
+    sed -i "s|/usr/lib/cups/backend|$out/lib/cups/backend|" backend/src/Makefile.am;
+    sed -i "s|/usr|$out|" backend/src/cnij_backend_common.c;
+    sed -i "s|/usr/bin|${ghostscript}/bin|" pstocanonij/filter/pstocanonij.c;
+    sed -i "s|/usr/local|$out|" libs/bjexec/bjexec.c;
+  '';
+
+  configurePhase = ''
+    cd libs
+    ./autogen.sh --prefix=$out;
+
+    cd ../cngpij
+    ./autogen.sh --prefix=$out --enable-progpath=$out/bin;
+
+    cd ../pstocanonij
+    ./autogen.sh --prefix=$out --enable-progpath=$out/bin;
+
+    cd ../backend
+    ./autogen.sh --prefix=$out;
+    cd ..;
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin $out/lib/cups/filter $out/share/cups/model;
+  '';
+
+  postInstall = ''
+    for pr in mp140 mp210 ip3500 mp520 ip4500 mp610; do
+      cd ppd;
+      ./autogen.sh --prefix=$out --program-suffix=$pr
+      make clean;
+      make;
+      make install;
+
+      cd ../cnijfilter;
+      ./autogen.sh --prefix=$out --program-suffix=$pr --enable-libpath=/var/lib/cups/path/lib/bjlib --enable-binpath=$out/bin;
+      make clean;
+      make;
+      make install;
+
+      cd ..;
+    done;
+
+    mkdir -p $out/lib/bjlib;
+    for pr_id in 315 316 319 328 326 327; do
+      install -c -m 755 $pr_id/database/* $out/lib/bjlib;
+      install -c -s -m 755 $pr_id/libs_bin/*.so.* $out/lib;
+    done;
+
+    pushd $out/lib;
+    for so_file in *.so.*; do
+      ln -s $so_file ''${so_file/.so.*/}.so;
+      patchelf --set-rpath $out/lib $so_file;
+    done;
+    popd;
+  '';
+
+  /* the tarball includes some pre-built shared libraries.  we run
+     'patchelf --set-rpath' on them just a few lines above, so that
+     they can find each other.  but that's not quite enough.  some of
+     those libraries load each other in non-standard ways -- they
+     don't list each other in the DT_NEEDED section.  so, if the
+     standard 'patchelf --shrink-rpath' (from
+     pkgs/development/tools/misc/patchelf/setup-hook.sh) is run on
+     them, it undoes the --set-rpath.  this prevents that. */
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "Canon InkJet printer drivers for the iP5400, MP520, MP210, MP140, iP3500, and MP610 series.  (MP520 drivers also work for MX700.)";
+    homepage = "http://support-asia.canon-asia.com/content/EN/0100084101.html";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jerith666 ];
+  };
+}
diff --git a/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/libpng15.patch b/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/libpng15.patch
new file mode 100644
index 000000000000..f5b3a1b13db5
--- /dev/null
+++ b/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/libpng15.patch
@@ -0,0 +1,23 @@
+diff -aur cnijfilter-source-3.20-1/cnijfilter/src/bjfimage.c cnijfilter-source-3.20-1.new/cnijfilter/src/bjfimage.c
+--- cnijfilter-source-3.20-1/cnijfilter/src/bjfimage.c	2009-03-26 06:11:05.000000000 +0100
++++ cnijfilter-source-3.20-1.new/cnijfilter/src/bjfimage.c	2012-02-10 09:33:52.512334139 +0100
+@@ -1520,8 +1520,8 @@
+ 	short			tmpformat;
+ 	short			retbyte = 0;
+ 	short			bpp = 3;
+-	long			width = 0;
+-	long			length = 0;
++	png_uint_32		width = 0;
++	png_uint_32		length = 0;
+ 	long			rstep = 0;
+ 	long			RasterLength = 0;
+ 	long			i;
+@@ -1574,7 +1574,7 @@
+ 		goto onErr;
+ 	}
+ 
+-	if (setjmp (png_p->jmpbuf))
++	if (setjmp (png_jmpbuf(png_p)))
+ 	{
+ 		png_destroy_read_struct(&png_p, &info_p, (png_infopp)NULL);
+ 		goto onErr;
diff --git a/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/missing-include.patch b/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/missing-include.patch
new file mode 100644
index 000000000000..20c2d756d1eb
--- /dev/null
+++ b/pkgs/misc/cups/drivers/cnijfilter_2_80/patches/missing-include.patch
@@ -0,0 +1,20 @@
+--- a/backend/src/cnij_backend_common.c	2008-09-01 10:05:44.000000000 +0200
++++ b/backend/src/cnij_backend_common.c	2012-05-06 17:38:40.000000000 +0200
+@@ -39,6 +39,7 @@
+ // CUPS Header
+ #include <cups/cups.h>
+ #include <cups/ipp.h>
++#include <cups/ppd.h>
+ 
+ // Header file for CANON
+ #include "cnij_backend_common.h"
+--- a/cngpijmon/src/bjcupsmon_cups.c	2008-09-02 12:28:24.000000000 +0200
++++ b/cngpijmon/src/bjcupsmon_cups.c	2012-05-06 17:39:20.000000000 +0200
+@@ -21,6 +21,7 @@
+ /*** Includes ***/
+ #include <cups/cups.h>
+ #include <cups/language.h>
++#include <cups/ppd.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+ #include <pwd.h>