# -*- mode: python; -*-

# Description:
#   tesseract build file.

licenses(['notice'])  # Apache 2.0

#-----------------------------------------------------------------------------
# LIBRARIES

cc_library(name = "scrollview_lib",
          srcs = [ "viewer/scrollview.cpp",
                   "viewer/svutil.cpp",
                   "viewer/svmnode.cpp" ],
          deps = [ "//third_party/leptonica",
                   ],
          includes = [ "third_party/leptonica/includes" ],
          copts = [ "-DHAVE_LIBLEPT",
                    "-DSCROLLVIEW_PATH=/home/build/static/projects/ocr" ]
          )

cc_library(name = "tesseract_cc_util",
           srcs = [ "ccutil/basedir.cpp",
                   "ccutil/bits16.cpp",
                   "ccutil/boxread.cpp",
                   "ccutil/clst.cpp",
                   "ccutil/debugwin.cpp",
                   "ccutil/elst.cpp",
                   "ccutil/elst2.cpp",
                   "ccutil/errcode.cpp",
                   "ccutil/tessopt.cpp",
                   "ccutil/globaloc.cpp",
                   "ccutil/hashfn.cpp",
                   "ccutil/mainblk.cpp",
                   "ccutil/memblk.cpp",
                   "ccutil/memry.cpp",
                   "ccutil/ocrshell.cpp",
                   "ccutil/serialis.cpp",
                   "ccutil/strngs.cpp",
                   "ccutil/tprintf.cpp",
                   "ccutil/unichar.cpp",
                   "ccutil/unicharset.cpp",
                   "ccutil/unicharmap.cpp",
                   "ccutil/varable.cpp",
                   "ccutil/ccutil.cpp" ],
           deps = [  ],
           includes = [ "ccutil"
           ])

cc_library(name = "tesseract_c_util",
           srcs = [ "cutil/tessarray.cpp",
                   "cutil/bitvec.cpp",
                   "cutil/danerror.cpp",
                   "cutil/debug.cpp",
                   "cutil/efio.cpp",
                   "cutil/emalloc.cpp",
                   "cutil/freelist.cpp",
                   "cutil/globals.cpp",
                   "cutil/listio.cpp",
                   "cutil/oldheap.cpp",
                   "cutil/oldlist.cpp",
                   "cutil/structures.cpp",
                   "cutil/tordvars.cpp",
                   "cutil/cutil.cpp",
                   "cutil/variables.cpp",
                   "cutil/cutil_class.cpp" ],
          deps = [ "tesseract_cc_util" ],
           includes = [ "cutil",
                        "ccutil"
           ])

cc_library(name = "tesseract_dict",
           srcs = [ "dict/choices.cpp",
                   "dict/context.cpp",
                   "dict/conversion.cpp",
                   "dict/dawg.cpp",
                   "dict/dict.cpp",
                   "dict/hyphen.cpp",
                   "dict/permdawg.cpp",
                   "dict/permnum.cpp",
                   "dict/permngram.cpp",
                   "dict/permute.cpp",
                   "dict/states.cpp",
                   "dict/stopper.cpp",
                   "dict/reduce.cpp",
                   "dict/makedawg.cpp",
                   "dict/lookdawg.cpp",
                   "dict/trie.cpp",
                    "dict/wordfst.cpp",
                    "dict/patternfst.cpp",
                    "dict/fstmodel.cpp" ],
           deps = [ "tesseract_c_util",
                   "tesseract_cc_struct",
                   "tesseract_cc_util",
                    "//third_party/libidn:idn",
                    "//third_party/icu:icu",
                    "//i18n/utf8",
                    "//nlp/fst/lib" ],
           includes = [ "cutil",
                        "ccutil",
                        "ccstruct",
                        "dict"
           ])

cc_library(name = "tesseract_aspirin",
           srcs = [ "aspirin/bpsim.cpp",
                   "aspirin/bpsupport.cpp",
                   "aspirin/nmatch.cpp",
                   "aspirin/vanilla.cpp" ],
           deps = [ "tesseract_c_util",
                    "tesseract_cc_util" ],
           includes = [ "aspirin",
                        "ccutil",
                        "cutil" ],
           # license with restrictions on commercial use, see LICENSE file
           licenses = [ "by_exception_only" ],
           )

cc_library(name = "tesseract_image",
           srcs = ["image/image.cpp",
                   "image/imgbmp.cpp",
                   "image/imgio.cpp",
                   "image/imgs.cpp",
                   "image/imgtiff.cpp",
                   "image/bitstrm.cpp",
                   "image/svshowim.cpp",
                  ],
           deps = [ "tesseract_cc_util",
                    "scrollview_lib",
                    "//third_party/leptonica" ],
           includes = [ "ccutil",
                        "image",
                        "viewer",
                        "third_party/leptonica/includes"
                        ],
           copts = [ "-DHAVE_LIBLEPT" ]
           )

cc_library(name = "tesseract_cc_struct",
           srcs = [ "ccstruct/blobbox.cpp",
                   "ccstruct/blobs.cpp",
                   "ccstruct/blread.cpp",
                   "ccstruct/callcpp.cpp",
                   "ccstruct/ccstruct.cpp",
                   "ccstruct/coutln.cpp",
                   "ccstruct/genblob.cpp",
                   "ccstruct/labls.cpp",
                   "ccstruct/linlsq.cpp",
                   "ccstruct/lmedsq.cpp",
                   "ccstruct/mod128.cpp",
                   "ccstruct/normalis.cpp",
                   "ccstruct/ocrblock.cpp",
                   "ccstruct/ocrrow.cpp",
                   "ccstruct/pageblk.cpp",
                   "ccstruct/pageres.cpp",
                   "ccstruct/pdblock.cpp",
                   "ccstruct/points.cpp",
                   "ccstruct/polyaprx.cpp",
                   "ccstruct/polyblk.cpp",
                   "ccstruct/polyblob.cpp",
                   "ccstruct/polyvert.cpp",
                   "ccstruct/poutline.cpp",
                   "ccstruct/quadlsq.cpp",
                   "ccstruct/quadratc.cpp",
                   "ccstruct/quspline.cpp",
                   "ccstruct/ratngs.cpp",
                   "ccstruct/rect.cpp",
                   "ccstruct/rejctmap.cpp",
                   "ccstruct/rwpoly.cpp",
                   "ccstruct/statistc.cpp",
                   "ccstruct/stepblob.cpp",
                   "ccstruct/txtregn.cpp",
                   "ccstruct/vecfuncs.cpp",
                   "ccstruct/werd.cpp" ],
          deps = [ "tesseract_image",
                   "tesseract_c_util",
                   "tesseract_cc_util" ],
          includes = [ "ccstruct",
                       "ccutil",
                       "cutil",
                       "image",
                       "viewer",
                     ] )

cc_library(name = "tesseract_classify",
           srcs = [ "classify/adaptive.cpp",
                   "classify/adaptmatch.cpp",
                   "classify/baseline.cpp",
                   "classify/blobclass.cpp",
                   "classify/chartoname.cpp",
                   "classify/classify.cpp",
                   "classify/cluster.cpp",
                   "classify/clusttool.cpp",
                   "classify/cutoffs.cpp",
                   "classify/extract.cpp",
                   "classify/featdefs.cpp",
                   "classify/flexfx.cpp",
                   "classify/float2int.cpp",
                   "classify/fpoint.cpp",
                   "classify/fxdefs.cpp",
                   "classify/hideedge.cpp",
                   "classify/intfx.cpp",
                   "classify/intmatcher.cpp",
                   "classify/intproto.cpp",
                   "classify/kdtree.cpp",
                   "classify/mf.cpp",
                   "classify/mfdefs.cpp",
                   "classify/mfoutline.cpp",
                   "classify/mfx.cpp",
                   "classify/normfeat.cpp",
                   "classify/normmatch.cpp",
                   "classify/ocrfeatures.cpp",
                   "classify/outfeat.cpp",
                   "classify/picofeat.cpp",
                   "classify/protos.cpp",
                   "classify/sigmenu.cpp",
                   "classify/speckle.cpp",
                   "classify/xform2d.cpp" ],
          deps = [ "tesseract_cc_struct",
                   "tesseract_dict",
                   "tesseract_c_util",
                   "tesseract_cc_util" ],
           includes = [ "cutil",
                        "classify",
                        "ccutil",
                        "ccstruct",
                        "dict"
           ])

cc_library(name = "tesseract_textord",
          srcs = [ "textord/blkocc.cpp",
                   "textord/drawedg.cpp",
                   "textord/drawtord.cpp",
                   "textord/edgblob.cpp",
                   "textord/edgloop.cpp",
                   "textord/fpchop.cpp",
                   "textord/gap_map.cpp",
                   "textord/makerow.cpp",
                   "textord/oldbasel.cpp",
                   "textord/pagesegmain.cpp",
                   "textord/pithsync.cpp",
                   "textord/pitsync1.cpp",
                   "textord/scanedg.cpp",
                   "textord/sortflts.cpp",
                   "textord/topitch.cpp",
                   "textord/tordmain.cpp",
                   "textord/tospace.cpp",
                   "textord/tovars.cpp",
                   "textord/underlin.cpp",
                   "textord/wordseg.cpp" ],
          deps = [ "tesseract_cc_struct",
                   "tesseract_image",
                   "tesseract_cc_util",
                   "tesseract_pageseg" ],
          includes = [ "ccstruct",
                       "wordrec",
                       "ccutil",
                       "dict",
                       "classify",
                       "image",
                       "viewer",
                       "pageseg"
                     ] )

cc_library(name = "tesseract_wordrec",
          srcs = [ "wordrec/associate.cpp",
                   "wordrec/badwords.cpp",
                   "wordrec/bestfirst.cpp",
                   "wordrec/chop.cpp",
                   "wordrec/chopper.cpp",
                   "wordrec/closed.cpp",
                   "wordrec/djmenus.cpp",
                   "wordrec/drawfx.cpp",
                   "wordrec/findseam.cpp",
                   "wordrec/gradechop.cpp",
                   "wordrec/heuristic.cpp",
                   "wordrec/makechop.cpp",
                   "wordrec/matchtab.cpp",
                   "wordrec/matrix.cpp",
                   "wordrec/metrics.cpp",
                   "wordrec/mfvars.cpp",
                   "wordrec/msmenus.cpp",
                   "wordrec/olutil.cpp",
                   "wordrec/outlines.cpp",
                   "wordrec/pieces.cpp",
                   "wordrec/plotedges.cpp",
                   "wordrec/plotseg.cpp",
                   "wordrec/render.cpp",
                   "wordrec/seam.cpp",
                   "wordrec/split.cpp",
                   "wordrec/tally.cpp",
                   "wordrec/tessinit.cpp",
                   "wordrec/tface.cpp",
                   "wordrec/wordclass.cpp",
                   "wordrec/wordrec.cpp" ],
          deps = [ "tesseract_cc_struct",
                   "tesseract_classify",
                   "tesseract_image",
                   "tesseract_dict",
                   "tesseract_c_util",
                   "tesseract_cc_util" ],
          includes = [ "ccstruct",
                       "ccutil",
                       "cutil",
                       "cstruct",
                       "classify",
                       "image",
                       "dict",
                       "viewer",
                     ] )

cc_library(name = "tesseract_pageseg",
          srcs = [ "pageseg/pageseg.cpp",
                   "pageseg/leptonica_pageseg.cpp",
                   "pageseg/leptonica_pageseg_interface.cpp" ],
          deps = [ "tesseract_image",
                   "//third_party/leptonica" ],
          includes = [ "ccstruct",
                       "ccutil",
                       "ccmain",
                       "image",
                       "textord",
                       "viewer",
                       "third_party/leptonica/includes" ],
          copts = [ "-DHAVE_LIBLEPT" ] )

cc_library(name = "tesseract_main",
           srcs = [ "ccmain/tessedit.cpp",
                    "ccmain/adaptions.cpp",
                    "ccmain/applybox.cpp",
                    "ccmain/baseapi.cpp",
                    "ccmain/blobcmp.cpp",
                    "ccmain/callnet.cpp",
                    "ccmain/charcut.cpp",
                    "ccmain/charsample.cpp",
                    "ccmain/control.cpp",
                    "ccmain/docqual.cpp",
                    "ccmain/expandblob.cpp",
                    "ccmain/fixspace.cpp",
                    "ccmain/fixxht.cpp",
                    "ccmain/imgscale.cpp",
                    "ccmain/matmatch.cpp",
                    "ccmain/osdetect.cpp",
                    "ccmain/output.cpp",
                    "ccmain/otsuthr.cpp",
                    "ccmain/pagewalk.cpp",
                    "ccmain/paircmp.cpp",
                    "ccmain/pgedit.cpp",
                    "ccmain/reject.cpp",
                    "ccmain/scaleimg.cpp",
                    "ccmain/tessbox.cpp",
                    "ccmain/tesseractclass.cpp",
                    "ccmain/tessvars.cpp",
                    "ccmain/thresholder.cpp",
                    "ccmain/tfacepp.cpp",
                    "ccmain/tstruct.cpp",
                    "ccmain/varabled.cpp",
                    "ccmain/werdit.cpp" ],
           deps = [ "tesseract_wordrec",
                    "tesseract_textord",
                    "tesseract_cc_struct",
                    "tesseract_classify",
                    "tesseract_image",
                    "tesseract_aspirin",
                    "tesseract_dict",
                    "tesseract_c_util",
                    "tesseract_cc_util",
                    "//third_party/tiff",
                    "//third_party/leptonica",
                    "scrollview_lib" ],
           includes = [ "ccutil",
                        "ccstruct",
                        "image",
                        "viewer",
                        "dict",
                        "classify",
                        "wordrec",
                        "cutil",
                        "textord",
                        "aspirin",
                        "ccmain",
                        "third_party/tiff",
                        "third_party/leptonica/includes"
                        ],
           defines = [ "HAVE_LIBTIFF", "HAVE_LIBLEPT" ]
#                     copts = [ "-DHAVE_LIBTIFF", "-DHAVE_LIBLEPT" ]
           )

cc_library(name = "tesseract_training",
          srcs = [ "training/name2char.cpp",
                   "training/commontraining.cpp",
                   "training/mergenf.cpp",
                 ],
          deps = [ "tesseract_textord",
                   "tesseract_c_util",
                   "tesseract_cc_util" ],
          includes = [ "cutil",
                       "ccutil",
                       "dict",
                       "training",
                       "classify"
                     ] )

#-----------------------------------------------------------------------------

# BINARIES

cc_binary(name = "tesseract",
          srcs = [ "ccmain/tesseractmain.cpp" ],
          deps = [ "tesseract_main",
                   "//third_party/tiff" ],
          includes = [ "ccutil",
                       "ccstruct",
                       "image",
                       "viewer",
                       "dict",
                       "classify",
                       "wordrec",
                       "cutil",
                       "textord",
                       "aspirin",
                       "ccmain"
                     ],
         copts = [ "-DHAVE_LIBTIFF" ]
         )

cc_binary(name = "cntraining",
          srcs = [ "training/cntraining.cpp" ],
          deps = [ "tesseract_training",
                   "tesseract_classify" ],
          includes = [ "ccutil",
                       "cutil",
                       "viewer",
                       "dict",
                       "classify",
                     ] )

cc_binary(name = "mftraining",
          srcs = [ "training/mftraining.cpp",
                 ],
          deps = [ "tesseract_training",
                   "tesseract_classify" ],
          includes = [ "ccutil",
                       "cutil",
                       "viewer",
                       "dict",
                       "classify",
                     ] )

cc_binary(name = "svpaint",
          srcs = [ "viewer/svpaint.cpp"],
          deps = [ "scrollview_lib"],
         )

cc_binary(name = "unicharset_extractor",
          srcs = [ "training/unicharset_extractor.cpp"],
          deps = [ "tesseract_cc_util"],
          includes = [ "ccutil"
                     ] )

cc_binary(name = "wordlist2dawg",
          srcs = [ "training/wordlist2dawg.cpp"],
          deps = [ "tesseract_dict",
                   "tesseract_classify",
                   "tesseract_cc_util",
                   "tesseract_c_util"],
          includes = [ "ccutil",
                       "cutil",
                       "dict",
                       "classify"
                     ] )

#-----------------------------------------------------------------------------
# Data

# export configuration data for Blaze compliance
exports_files(["tessdata"])

#-----------------------------------------------------------------------------
# UNITTESTS
