summary refs log tree commit diff
path: root/pkgs/applications/graphics/tesseract/4.x.nix
blob: 156c911b9b8637101d8867e18155c0fc92713972 (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
{ stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive, pkgconfig
, leptonica, libpng, libtiff, icu, pango, opencl-headers

# Supported list of languages or `null' for all available languages
, enableLanguages ? null
}:

stdenv.mkDerivation rec {
  name = "tesseract-${version}";
  version = "4.00.00alpha-git-20170410";

  src = fetchFromGitHub {
    owner = "tesseract-ocr";
    repo = "tesseract";
    rev = "36a995bdc92eb2dd8bc5a63205708944a3f990a1";
    sha256 = "0xz3krvap8sdm27v1dyb34lcdmx11wzvxyszpppfsfmjgkvg19bq";
  };

  tessdata = fetchFromGitHub {
    owner = "tesseract-ocr";
    repo = "tessdata";
    rev = "8bf2e7ad08db9ca174ae2b0b3a7498c9f1f71d40";
    sha256 = "0idwkv4qsmmqhrxcgyhy32yldl3vk054m7dkv4fjswfnalgsx794";
  };

  nativeBuildInputs = [ pkgconfig autoreconfHook autoconf-archive ];
  buildInputs = [ leptonica libpng libtiff icu pango opencl-headers ];

  # Copy the .traineddata files of the languages specified in enableLanguages
  # into `$out/share/tessdata' and check afterwards if copying was successful.
  postInstall = let
    mkArg = lang: "-iname ${stdenv.lib.escapeShellArg "${lang}.traineddata"}";
    mkFindArgs = stdenv.lib.concatMapStringsSep " -o " mkArg;
    findLangArgs = if enableLanguages != null
                   then "\\( ${mkFindArgs enableLanguages} \\)"
                   else "-iname '*.traineddata'";
  in ''
    numLangs="$(find "$tessdata" -mindepth 1 -maxdepth 1 -type f \
      ${findLangArgs} -exec cp -t "$out/share/tessdata" {} + -print | wc -l)"

    ${if enableLanguages != null then ''
      expected=${toString (builtins.length enableLanguages)}
    '' else ''
      expected="$(ls -1 "$tessdata/"*.traineddata | wc -l)"
    ''}

    if [ "$numLangs" -ne "$expected" ]; then
      echo "Expected $expected languages, but $numLangs" \
           "were copied to \`$out/share/tessdata'" >&2
      exit 1
    fi
  '';

  meta = {
    description = "OCR engine";
    homepage = https://github.com/tesseract-ocr/tesseract;
    license = stdenv.lib.licenses.asl20;
    maintainers = with stdenv.lib.maintainers; [viric];
    platforms = with stdenv.lib.platforms; linux;
  };
}