about summary refs log tree commit diff
path: root/pkgs/applications/graphics/gscan2pdf/default.nix
blob: d7ebb0a747ea3478cc875f0a13837d438158eb9c (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
{ lib, fetchurl, perlPackages, wrapGAppsHook, fetchpatch,
  # libs
  librsvg, sane-backends, sane-frontends,
  # runtime dependencies
  imagemagick, libtiff, djvulibre, poppler_utils, ghostscript, unpaper, pdftk,
  # test dependencies
  xvfb-run, liberation_ttf, file, tesseract }:

with lib;

perlPackages.buildPerlPackage rec {
  pname = "gscan2pdf";
  version = "2.13.2";

  src = fetchurl {
    url = "mirror://sourceforge/gscan2pdf/gscan2pdf-${version}.tar.xz";
    hash = "sha256-NGz6DUa7TdChpgwmD9pcGdvYr3R+Ft3jPPSJpybCW4Q=";
  };

  patches = [
    # fixes warnings during tests. See https://sourceforge.net/p/gscan2pdf/bugs/421
    (fetchpatch {
      name = "0001-Remove-given-and-when-keywords-and-operator.patch";
      url = "https://sourceforge.net/p/gscan2pdf/bugs/_discuss/thread/602a7cedfd/1ea4/attachment/0001-Remove-given-and-when-keywords-and-operator.patch";
      hash = "sha256-JtrHUkfEKnDhWfEVdIdYVlr5b/xChTzsrrPmruLaJ5M=";
    })
    # fixes an error with utf8 file names. See https://sourceforge.net/p/gscan2pdf/bugs/400
    ./image-utf8-fix.patch
  ];

  nativeBuildInputs = [ wrapGAppsHook ];

  buildInputs =
    [ librsvg sane-backends sane-frontends ] ++
    (with perlPackages; [
      Gtk3
      Gtk3ImageView
      Gtk3SimpleList
      Cairo
      CairoGObject
      Glib
      GlibObjectIntrospection
      GooCanvas2
      GraphicsTIFF
      IPCSystemSimple
      LocaleCodes
      LocaleGettext
      PDFBuilder
      ImagePNGLibpng
      ImageSane
      SetIntSpan
      ImageMagick
      ConfigGeneral
      ListMoreUtils
      HTMLParser
      ProcProcessTable
      LogLog4perl
      TryTiny
      DataUUID
      DateCalc
      IOString
      FilesysDf
      SubOverride
    ]);

  postPatch = let
    fontSubstitute = "${liberation_ttf}/share/fonts/truetype/LiberationSans-Regular.ttf";
  in ''
    # Required for the program to properly load its SVG assets
    substituteInPlace bin/gscan2pdf \
      --replace "/usr/share" "$out/share"

    # Substitute the non-free Helvetica font in the tests
    sed -i 's|-pointsize|-font ${fontSubstitute} -pointsize|g' t/*.t
  '';

  postInstall = ''
    # Remove impurity
    find $out -type f -name "*.pod" -delete

    # Add runtime dependencies
    wrapProgram "$out/bin/gscan2pdf" \
      --prefix PATH : "${sane-backends}/bin" \
      --prefix PATH : "${imagemagick}/bin" \
      --prefix PATH : "${libtiff}/bin" \
      --prefix PATH : "${djvulibre}/bin" \
      --prefix PATH : "${poppler_utils}/bin" \
      --prefix PATH : "${ghostscript}/bin" \
      --prefix PATH : "${unpaper}/bin" \
      --prefix PATH : "${pdftk}/bin"
  '';

  enableParallelBuilding = true;

  installTargets = [ "install" ];

  outputs = [ "out" "man" ];

  nativeCheckInputs = [
    imagemagick
    libtiff
    djvulibre
    poppler_utils
    ghostscript
    unpaper
    pdftk

    xvfb-run
    file
    tesseract # tests are expecting tesseract 3.x precisely
  ] ++ (with perlPackages; [
    TestPod
  ]);

  checkPhase = ''
    # Temporarily disable a test failing after a patch imagemagick update.
    # It might only due to the reporting and matching used in the test.
    # See https://github.com/NixOS/nixpkgs/issues/223446
    # See https://sourceforge.net/p/gscan2pdf/bugs/417/
    #
    #   Failed test 'valid TIFF created'
    #   at t/131_save_tiff.t line 44.
    #                   'test.tif TIFF 70x46 70x46+0+0 8-bit sRGB 10024B 0.000u 0:00.000
    # '
    #     doesn't match '(?^:test.tif TIFF 70x46 70x46\+0\+0 8-bit sRGB [7|9][.\d]+K?B)'
    rm t/131_save_tiff.t

    # Temporarily disable a dubiously failing test:
    # t/169_import_scan.t ........................... 1/1
    # #   Failed test 'variable-height scan imported with expected size'
    # #   at t/169_import_scan.t line 50.
    # #          got: '179'
    # #     expected: '296'
    # # Looks like you failed 1 test of 1.
    # t/169_import_scan.t ........................... Dubious, test returned 1 (wstat 256, 0x100)
    rm t/169_import_scan.t

    # Disable a test which passes but reports an incorrect status
    # t/0601_Dialog_Scan.t .......................... All 14 subtests passed
    # t/0601_Dialog_Scan.t                        (Wstat: 139 Tests: 14 Failed: 0)
    #   Non-zero wait status: 139
    rm t/0601_Dialog_Scan.t

    xvfb-run -s '-screen 0 800x600x24' \
      make test
  '';

  meta = {
    description = "A GUI to produce PDFs or DjVus from scanned documents";
    homepage = "https://gscan2pdf.sourceforge.net/";
    license = licenses.gpl3;
    maintainers = with maintainers; [ pacien ];
    mainProgram = "gscan2pdf";
  };
}