summary refs log tree commit diff
path: root/pkgs/applications/misc/k2pdfopt/default.nix
blob: dac597fe67cddb6ff3b0c75b76e7815b1f6faf3d (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# Build procedure lifted from https://aur.archlinux.org/packages/k2/k2pdfopt/PKGBUILD
{ stdenv, fetchzip, fetchurl, writeScript, libX11, libXext, autoconf, automake, libtool
      , leptonica, libpng, libtiff, zlib, openjpeg, freetype, jbig2dec, djvulibre
      , openssl }:

let
  mupdf_src = fetchurl {
    url = http://www.mupdf.com/downloads/archive/mupdf-1.6-source.tar.gz;
    sha256 = "0qx51rj6alzcagcixm59rvdpm54w6syrwr4184v439jh14ryw4wq";
  };

  tess_src = fetchurl {
    url = http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz;
    sha256 = "0g81m9y4iydp7kgr56mlkvjdwpp3mb01q385yhdnyvra7z5kkk96";
  };

  gocr_src = fetchurl {
    url = http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.49.tar.gz;
    sha256 = "06hpzp7rkkwfr1fvmc8kcfz9v490i9yir7f7imh13gmka0fr6afc";
  };

in stdenv.mkDerivation rec {
  name = "k2pdfopt-${version}";
  version = "2.32";
  src = fetchzip {
    url = "http://www.willus.com/k2pdfopt/src/k2pdfopt_v${version}_src.zip";
    sha256 = "1v3cj5bwpjvy7s66sfqcmkxs91f7nxaykjpdjm2wn87vn6q7n19m";
  };

  buildInputs = [ libX11 libXext autoconf automake libtool leptonica libpng libtiff zlib
                    openjpeg freetype jbig2dec djvulibre openssl ];
  NIX_LDFLAGS = "-lX11 -lXext";

  hardening_format = false;

  k2_pa = ./k2pdfopt.patch;
  tess_pa = ./tesseract.patch;

  builder = writeScript "builder.sh" ''
    . ${stdenv}/setup
    set -e

    plibs=`pwd`/patched_libraries

    tar zxf ${mupdf_src}
    cp $src/mupdf_mod/font.c $src/mupdf_mod/string.c mupdf-1.6-source/source/fitz/
    cp $src/mupdf_mod/pdf-* mupdf-1.6-source/source/pdf

    tar zxf ${tess_src}
    cp $src/tesseract_mod/dawg.cpp tesseract-ocr/dict
    cp $src/tesseract_mod/tessdatamanager.cpp tesseract-ocr/ccutil
    cp $src/tesseract_mod/tessedit.cpp tesseract-ocr/ccmain
    cp $src/tesseract_mod/tesscapi.cpp tesseract-ocr/api
    cp $src/include_mod/tesseract.h $src/include_mod/leptonica.h tesseract-ocr/api

    cp -a $src k2pdfopt_v2.21
    chmod -R +w k2pdfopt_v2.21

    patch -p0 -i $tess_pa
    patch -p0 -i $k2_pa

    cd tesseract-ocr
    ./autogen.sh
    substituteInPlace "configure" \
            --replace 'LIBLEPT_HEADERSDIR="/usr/local/include /usr/include"' \
            'LIBLEPT_HEADERSDIR=${leptonica}/include'
    ./configure --prefix=$plibs --disable-shared
    make install

    cd ..
    tar zxf ${gocr_src}
    cd gocr-0.49
    ./configure
    cp src/{gocr.h,pnm.h,unicode.h,list.h} $plibs/include
    cp include/config.h $plibs/include
    make libs
    cp src/libPgm2asc.a $plibs/lib

    cd ../mupdf-1.6-source
    make prefix=$plibs install
    install -Dm644 build/debug/libmujs.a $plibs/lib

    cd ../k2pdfopt_v2.21/k2pdfoptlib
    gcc -Ofast -Wall -c *.c -I ../include_mod/ -I $plibs/include \
        -I . -I ../willuslib
    ar rcs libk2pdfopt.a *.o

    cd ../willuslib
    gcc -Ofast -Wall -c *.c -I ../include_mod/ -I $plibs/include
    ar rcs libwillus.a *.o

    cd ..
    gcc -Wall -Ofast -o k2pdfopt.o -c k2pdfopt.c -I k2pdfoptlib/ -I willuslib/ \
            -I include_mod/ -I $plibs/include
    g++ -Ofast k2pdfopt.o -o k2pdfopt -I willuslib/ -I k2pdfoptlib/ -I include_mod/ \
            -I $plibs/include -L $plibs/lib/ \
            -L willuslib/ -L k2pdfoptlib/ -lk2pdfopt -lwillus -ldjvulibre -lz -lmupdf  \
            -ljbig2dec -ljpeg -lopenjp2 -lpng -lfreetype -lpthread -lmujs \
            -lPgm2asc -llept -ltesseract -lcrypto

    mkdir -p $out/bin
    cp k2pdfopt $out/bin
  '';

  meta = with stdenv.lib; {
    description = "Optimizes PDF/DJVU files for mobile e-readers (e.g. the Kindle) and smartphones";
    homepage = http://www.willus.com/k2pdfopt;
    license = licenses.gpl3;
    platforms = platforms.linux;
    maintainers = [ maintainers.bosu ];
  };
}