summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tesseract/Makefile.am')
-rw-r--r--tesseract/Makefile.am1669
1 files changed, 1669 insertions, 0 deletions
diff --git a/tesseract/Makefile.am b/tesseract/Makefile.am
new file mode 100644
index 00000000..1060d4b3
--- /dev/null
+++ b/tesseract/Makefile.am
@@ -0,0 +1,1669 @@
+## run autogen.sh to create Makefile.in from this file
+
+# Be less noisy by default. Can be overridden with `make V=1`.
+V = 0
+
+ACLOCAL_AMFLAGS = -I m4
+
+.PHONY: doc html install-langs ScrollView.jar install-jars pdf training
+
+CLEANFILES =
+
+SUBDIRS = . tessdata
+
+EXTRA_DIST = README.md LICENSE
+EXTRA_DIST += aclocal.m4 config configure.ac autogen.sh
+EXTRA_DIST += tesseract.pc.in java doc
+EXTRA_DIST += CMakeLists.txt tesseract.pc.cmake cmake VERSION
+
+DIST_SUBDIRS = $(SUBDIRS)
+
+uninstall-hook:
+ rm -rf $(DESTDIR)$(pkgincludedir)
+
+dist-hook:
+# Need to remove .svn directories from directories
+# added using EXTRA_DIST. $(distdir)/tessdata would in
+# theory suffice.
+ rm -rf `find $(distdir) -name .deps -type d`
+ -rm -f $(distdir)/*/Makefile $(distdir)/*/*/Makefile
+ rm -f `find $(distdir) -name '*~'`
+ rm -rf $(distdir)/doc/html/* $(distdir)/doc/*.log
+
+ScrollView.jar:
+ @cd "$(top_builddir)/java" && $(MAKE) $@
+
+install-jars:
+ @cd "$(top_builddir)/java" && $(MAKE) $@
+
+doc:
+ -srcdir="$(top_srcdir)" builddir="$(top_builddir)" \
+ version="@PACKAGE_VERSION@" name="@PACKAGE_NAME@" \
+ doxygen $(top_srcdir)/doc/Doxyfile
+
+doc-pack: doc
+ -chmod a+r $(top_builddir)/doc/html/*
+ @tar --create --directory=$(top_builddir)/doc/html --verbose --file=- . | gzip -c -9 > $(top_builddir)/@PACKAGE_NAME@-@PACKAGE_VERSION@-doc-html.tar.gz;
+
+doc-clean:
+ rm -rf $(top_builddir)/doc/html/*
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = tesseract.pc
+
+pkginclude_HEADERS = $(top_builddir)/include/tesseract/version.h
+pkginclude_HEADERS += include/tesseract/baseapi.h
+pkginclude_HEADERS += include/tesseract/capi.h
+pkginclude_HEADERS += include/tesseract/export.h
+pkginclude_HEADERS += include/tesseract/ltrresultiterator.h
+pkginclude_HEADERS += include/tesseract/ocrclass.h
+pkginclude_HEADERS += include/tesseract/osdetect.h
+pkginclude_HEADERS += include/tesseract/pageiterator.h
+pkginclude_HEADERS += include/tesseract/publictypes.h
+pkginclude_HEADERS += include/tesseract/renderer.h
+pkginclude_HEADERS += include/tesseract/resultiterator.h
+pkginclude_HEADERS += include/tesseract/thresholder.h
+pkginclude_HEADERS += include/tesseract/unichar.h
+
+# Rules for all subdirectories.
+
+noinst_HEADERS =
+noinst_LTLIBRARIES =
+
+AM_CPPFLAGS += -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_builddir)/include
+if VISIBILITY
+AM_CPPFLAGS += -DTESS_EXPORTS
+AM_CPPFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
+endif
+AM_CPPFLAGS += $(OPENCL_CPPFLAGS)
+
+AM_CXXFLAGS = $(OPENMP_CXXFLAGS)
+
+# Rules for src/api.
+
+libtesseract_la_CPPFLAGS = $(AM_CPPFLAGS)
+libtesseract_la_CPPFLAGS += -DTESS_COMMON_TRAINING_API=
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/arch
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/ccmain
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/classify
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/cutil
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/dict
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/lstm
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/opencl
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/textord
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/training/common
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/viewer
+libtesseract_la_CPPFLAGS += -I$(top_srcdir)/src/wordrec
+libtesseract_la_CPPFLAGS += $(libcurl_CFLAGS)
+
+lib_LTLIBRARIES = libtesseract.la
+libtesseract_la_LDFLAGS = $(LEPTONICA_LIBS) $(OPENCL_LDFLAGS)
+libtesseract_la_LDFLAGS += $(libarchive_LIBS)
+libtesseract_la_LDFLAGS += $(libcurl_LIBS)
+libtesseract_la_LDFLAGS += $(TENSORFLOW_LIBS)
+if T_WIN
+libtesseract_la_LDFLAGS += -no-undefined -Wl,--as-needed -lws2_32
+else
+libtesseract_la_LDFLAGS += $(NOUNDEFINED)
+endif
+libtesseract_la_LDFLAGS += -version-info $(GENERIC_LIBRARY_VERSION)
+
+libtesseract_la_SOURCES = src/api/baseapi.cpp
+libtesseract_la_SOURCES += src/api/altorenderer.cpp
+libtesseract_la_SOURCES += src/api/capi.cpp
+libtesseract_la_SOURCES += src/api/hocrrenderer.cpp
+libtesseract_la_SOURCES += src/api/lstmboxrenderer.cpp
+libtesseract_la_SOURCES += src/api/pdfrenderer.cpp
+libtesseract_la_SOURCES += src/api/renderer.cpp
+libtesseract_la_SOURCES += src/api/wordstrboxrenderer.cpp
+
+libtesseract_la_LIBADD = libtesseract_ccutil.la
+libtesseract_la_LIBADD += libtesseract_lstm.la
+libtesseract_la_LIBADD += libtesseract_native.la
+libtesseract_la_LIBADD += libtesseract_opencl.la
+
+# Rules for src/arch.
+
+noinst_HEADERS += src/arch/dotproduct.h
+noinst_HEADERS += src/arch/intsimdmatrix.h
+noinst_HEADERS += src/arch/simddetect.h
+
+noinst_LTLIBRARIES += libtesseract_native.la
+
+libtesseract_native_la_CXXFLAGS = -O3 -ffast-math
+if MARCH_NATIVE_OPT
+libtesseract_native_la_CXXFLAGS += -march=native -mtune=native
+endif
+libtesseract_native_la_SOURCES = src/arch/dotproduct.cpp
+
+if HAVE_AVX
+libtesseract_avx_la_CXXFLAGS = -mavx
+libtesseract_avx_la_SOURCES = src/arch/dotproductavx.cpp
+libtesseract_la_LIBADD += libtesseract_avx.la
+noinst_LTLIBRARIES += libtesseract_avx.la
+endif
+
+if HAVE_AVX2
+libtesseract_avx2_la_CXXFLAGS = -mavx2
+libtesseract_avx2_la_SOURCES = src/arch/intsimdmatrixavx2.cpp
+libtesseract_la_LIBADD += libtesseract_avx2.la
+noinst_LTLIBRARIES += libtesseract_avx2.la
+endif
+
+if HAVE_FMA
+libtesseract_fma_la_CXXFLAGS = -mfma
+libtesseract_fma_la_SOURCES = src/arch/dotproductfma.cpp
+libtesseract_la_LIBADD += libtesseract_fma.la
+noinst_LTLIBRARIES += libtesseract_fma.la
+endif
+
+if HAVE_SSE4_1
+libtesseract_sse_la_CXXFLAGS = -msse4.1
+libtesseract_sse_la_SOURCES = src/arch/dotproductsse.cpp src/arch/intsimdmatrixsse.cpp
+libtesseract_la_LIBADD += libtesseract_sse.la
+noinst_LTLIBRARIES += libtesseract_sse.la
+endif
+
+if HAVE_NEON
+libtesseract_neon_la_CXXFLAGS = $(NEON_CXXFLAGS)
+libtesseract_neon_la_SOURCES = src/arch/intsimdmatrixneon.cpp
+libtesseract_la_LIBADD += libtesseract_neon.la
+noinst_LTLIBRARIES += libtesseract_neon.la
+endif
+
+libtesseract_la_SOURCES += src/arch/intsimdmatrix.cpp
+libtesseract_la_SOURCES += src/arch/simddetect.cpp
+
+# Rules for src/ccmain.
+
+noinst_HEADERS += src/ccmain/control.h
+noinst_HEADERS += src/ccmain/mutableiterator.h
+noinst_HEADERS += src/ccmain/output.h
+noinst_HEADERS += src/ccmain/paragraphs.h
+noinst_HEADERS += src/ccmain/paragraphs_internal.h
+noinst_HEADERS += src/ccmain/paramsd.h
+noinst_HEADERS += src/ccmain/pgedit.h
+noinst_HEADERS += src/ccmain/tesseractclass.h
+noinst_HEADERS += src/ccmain/tessvars.h
+noinst_HEADERS += src/ccmain/werdit.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/ccmain/docqual.h
+noinst_HEADERS += src/ccmain/equationdetect.h
+noinst_HEADERS += src/ccmain/fixspace.h
+noinst_HEADERS += src/ccmain/reject.h
+endif
+
+libtesseract_la_SOURCES += src/ccmain/applybox.cpp
+libtesseract_la_SOURCES += src/ccmain/control.cpp
+libtesseract_la_SOURCES += src/ccmain/linerec.cpp
+libtesseract_la_SOURCES += src/ccmain/ltrresultiterator.cpp
+libtesseract_la_SOURCES += src/ccmain/mutableiterator.cpp
+libtesseract_la_SOURCES += src/ccmain/output.cpp
+libtesseract_la_SOURCES += src/ccmain/pageiterator.cpp
+libtesseract_la_SOURCES += src/ccmain/pagesegmain.cpp
+libtesseract_la_SOURCES += src/ccmain/pagewalk.cpp
+libtesseract_la_SOURCES += src/ccmain/paragraphs.cpp
+libtesseract_la_SOURCES += src/ccmain/paramsd.cpp
+libtesseract_la_SOURCES += src/ccmain/pgedit.cpp
+libtesseract_la_SOURCES += src/ccmain/reject.cpp
+libtesseract_la_SOURCES += src/ccmain/resultiterator.cpp
+libtesseract_la_SOURCES += src/ccmain/tessedit.cpp
+libtesseract_la_SOURCES += src/ccmain/tesseractclass.cpp
+libtesseract_la_SOURCES += src/ccmain/tessvars.cpp
+libtesseract_la_SOURCES += src/ccmain/thresholder.cpp
+libtesseract_la_SOURCES += src/ccmain/werdit.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/ccmain/adaptions.cpp
+libtesseract_la_SOURCES += src/ccmain/docqual.cpp
+libtesseract_la_SOURCES += src/ccmain/equationdetect.cpp
+libtesseract_la_SOURCES += src/ccmain/fixspace.cpp
+libtesseract_la_SOURCES += src/ccmain/fixxht.cpp
+libtesseract_la_SOURCES += src/ccmain/osdetect.cpp
+libtesseract_la_SOURCES += src/ccmain/par_control.cpp
+libtesseract_la_SOURCES += src/ccmain/recogtraining.cpp
+libtesseract_la_SOURCES += src/ccmain/superscript.cpp
+libtesseract_la_SOURCES += src/ccmain/tessbox.cpp
+libtesseract_la_SOURCES += src/ccmain/tfacepp.cpp
+endif
+
+# Rules for src/ccstruct.
+
+noinst_HEADERS += src/ccstruct/blamer.h
+noinst_HEADERS += src/ccstruct/blobbox.h
+noinst_HEADERS += src/ccstruct/blobs.h
+noinst_HEADERS += src/ccstruct/blread.h
+noinst_HEADERS += src/ccstruct/boxread.h
+noinst_HEADERS += src/ccstruct/boxword.h
+noinst_HEADERS += src/ccstruct/ccstruct.h
+noinst_HEADERS += src/ccstruct/coutln.h
+noinst_HEADERS += src/ccstruct/crakedge.h
+noinst_HEADERS += src/ccstruct/debugpixa.h
+noinst_HEADERS += src/ccstruct/detlinefit.h
+noinst_HEADERS += src/ccstruct/dppoint.h
+noinst_HEADERS += src/ccstruct/imagedata.h
+noinst_HEADERS += src/ccstruct/linlsq.h
+noinst_HEADERS += src/ccstruct/matrix.h
+noinst_HEADERS += src/ccstruct/mod128.h
+noinst_HEADERS += src/ccstruct/normalis.h
+noinst_HEADERS += src/ccstruct/ocrblock.h
+noinst_HEADERS += src/ccstruct/ocrpara.h
+noinst_HEADERS += src/ccstruct/ocrrow.h
+noinst_HEADERS += src/ccstruct/otsuthr.h
+noinst_HEADERS += src/ccstruct/pageres.h
+noinst_HEADERS += src/ccstruct/pdblock.h
+noinst_HEADERS += src/ccstruct/points.h
+noinst_HEADERS += src/ccstruct/polyaprx.h
+noinst_HEADERS += src/ccstruct/polyblk.h
+noinst_HEADERS += src/ccstruct/quadlsq.h
+noinst_HEADERS += src/ccstruct/quadratc.h
+noinst_HEADERS += src/ccstruct/quspline.h
+noinst_HEADERS += src/ccstruct/ratngs.h
+noinst_HEADERS += src/ccstruct/rect.h
+noinst_HEADERS += src/ccstruct/rejctmap.h
+noinst_HEADERS += src/ccstruct/seam.h
+noinst_HEADERS += src/ccstruct/split.h
+noinst_HEADERS += src/ccstruct/statistc.h
+noinst_HEADERS += src/ccstruct/stepblob.h
+noinst_HEADERS += src/ccstruct/werd.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/ccstruct/fontinfo.h
+noinst_HEADERS += src/ccstruct/params_training_featdef.h
+endif
+
+libtesseract_la_SOURCES += src/ccstruct/blamer.cpp
+libtesseract_la_SOURCES += src/ccstruct/blobbox.cpp
+libtesseract_la_SOURCES += src/ccstruct/blobs.cpp
+libtesseract_la_SOURCES += src/ccstruct/blread.cpp
+libtesseract_la_SOURCES += src/ccstruct/boxread.cpp
+libtesseract_la_SOURCES += src/ccstruct/boxword.cpp
+libtesseract_la_SOURCES += src/ccstruct/ccstruct.cpp
+libtesseract_la_SOURCES += src/ccstruct/coutln.cpp
+libtesseract_la_SOURCES += src/ccstruct/detlinefit.cpp
+libtesseract_la_SOURCES += src/ccstruct/dppoint.cpp
+libtesseract_la_SOURCES += src/ccstruct/imagedata.cpp
+libtesseract_la_SOURCES += src/ccstruct/linlsq.cpp
+libtesseract_la_SOURCES += src/ccstruct/matrix.cpp
+libtesseract_la_SOURCES += src/ccstruct/mod128.cpp
+libtesseract_la_SOURCES += src/ccstruct/normalis.cpp
+libtesseract_la_SOURCES += src/ccstruct/ocrblock.cpp
+libtesseract_la_SOURCES += src/ccstruct/ocrpara.cpp
+libtesseract_la_SOURCES += src/ccstruct/ocrrow.cpp
+libtesseract_la_SOURCES += src/ccstruct/otsuthr.cpp
+libtesseract_la_SOURCES += src/ccstruct/pageres.cpp
+libtesseract_la_SOURCES += src/ccstruct/pdblock.cpp
+libtesseract_la_SOURCES += src/ccstruct/points.cpp
+libtesseract_la_SOURCES += src/ccstruct/polyaprx.cpp
+libtesseract_la_SOURCES += src/ccstruct/polyblk.cpp
+libtesseract_la_SOURCES += src/ccstruct/quadlsq.cpp
+libtesseract_la_SOURCES += src/ccstruct/quspline.cpp
+libtesseract_la_SOURCES += src/ccstruct/ratngs.cpp
+libtesseract_la_SOURCES += src/ccstruct/rect.cpp
+libtesseract_la_SOURCES += src/ccstruct/rejctmap.cpp
+libtesseract_la_SOURCES += src/ccstruct/seam.cpp
+libtesseract_la_SOURCES += src/ccstruct/split.cpp
+libtesseract_la_SOURCES += src/ccstruct/statistc.cpp
+libtesseract_la_SOURCES += src/ccstruct/stepblob.cpp
+libtesseract_la_SOURCES += src/ccstruct/werd.cpp
+
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/ccstruct/fontinfo.cpp
+libtesseract_la_SOURCES += src/ccstruct/params_training_featdef.cpp
+endif
+
+# Rules for src/ccutil
+
+libtesseract_ccutil_la_CPPFLAGS = $(AM_CPPFLAGS)
+libtesseract_ccutil_la_CPPFLAGS += $(libarchive_CFLAGS)
+if !NO_TESSDATA_PREFIX
+libtesseract_ccutil_la_CPPFLAGS += -DTESSDATA_PREFIX=@datadir@
+endif
+
+noinst_HEADERS += src/ccutil/bits16.h
+noinst_HEADERS += src/ccutil/ccutil.h
+noinst_HEADERS += src/ccutil/clst.h
+noinst_HEADERS += src/ccutil/elst2.h
+noinst_HEADERS += src/ccutil/elst.h
+noinst_HEADERS += src/ccutil/errcode.h
+noinst_HEADERS += src/ccutil/fileerr.h
+noinst_HEADERS += src/ccutil/genericheap.h
+noinst_HEADERS += src/ccutil/genericvector.h
+noinst_HEADERS += src/ccutil/helpers.h
+noinst_HEADERS += src/ccutil/host.h
+noinst_HEADERS += src/ccutil/kdpair.h
+noinst_HEADERS += src/ccutil/lsterr.h
+noinst_HEADERS += src/ccutil/object_cache.h
+noinst_HEADERS += src/ccutil/params.h
+noinst_HEADERS += src/ccutil/qrsequence.h
+noinst_HEADERS += src/ccutil/sorthelper.h
+noinst_HEADERS += src/ccutil/scanutils.h
+noinst_HEADERS += src/ccutil/serialis.h
+noinst_HEADERS += src/ccutil/strngs.h
+noinst_HEADERS += src/ccutil/tessdatamanager.h
+noinst_HEADERS += src/ccutil/tprintf.h
+noinst_HEADERS += src/ccutil/unicharcompress.h
+noinst_HEADERS += src/ccutil/unicharmap.h
+noinst_HEADERS += src/ccutil/unicharset.h
+noinst_HEADERS += src/ccutil/unicity_table.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/ccutil/ambigs.h
+noinst_HEADERS += src/ccutil/bitvector.h
+noinst_HEADERS += src/ccutil/indexmapbidi.h
+noinst_HEADERS += src/ccutil/universalambigs.h
+endif
+
+noinst_LTLIBRARIES += libtesseract_ccutil.la
+
+libtesseract_ccutil_la_SOURCES = src/ccutil/ccutil.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/clst.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/elst2.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/elst.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/errcode.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/mainblk.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/serialis.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/strngs.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/scanutils.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/tessdatamanager.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/tprintf.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/unichar.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/unicharcompress.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/unicharmap.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/unicharset.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/params.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_ccutil_la_SOURCES += src/ccutil/ambigs.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/bitvector.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/indexmapbidi.cpp
+libtesseract_ccutil_la_SOURCES += src/ccutil/universalambigs.cpp
+endif
+
+# Rules for src/classify.
+
+noinst_HEADERS += src/classify/classify.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/classify/adaptive.h
+noinst_HEADERS += src/classify/blobclass.h
+noinst_HEADERS += src/classify/cluster.h
+noinst_HEADERS += src/classify/clusttool.h
+noinst_HEADERS += src/classify/featdefs.h
+noinst_HEADERS += src/classify/float2int.h
+noinst_HEADERS += src/classify/fpoint.h
+noinst_HEADERS += src/classify/intfeaturespace.h
+noinst_HEADERS += src/classify/intfx.h
+noinst_HEADERS += src/classify/intmatcher.h
+noinst_HEADERS += src/classify/intproto.h
+noinst_HEADERS += src/classify/kdtree.h
+noinst_HEADERS += src/classify/mf.h
+noinst_HEADERS += src/classify/mfdefs.h
+noinst_HEADERS += src/classify/mfoutline.h
+noinst_HEADERS += src/classify/mfx.h
+noinst_HEADERS += src/classify/normfeat.h
+noinst_HEADERS += src/classify/normmatch.h
+noinst_HEADERS += src/classify/ocrfeatures.h
+noinst_HEADERS += src/classify/outfeat.h
+noinst_HEADERS += src/classify/picofeat.h
+noinst_HEADERS += src/classify/protos.h
+noinst_HEADERS += src/classify/shapeclassifier.h
+noinst_HEADERS += src/classify/shapetable.h
+noinst_HEADERS += src/classify/tessclassifier.h
+noinst_HEADERS += src/classify/trainingsample.h
+endif
+
+libtesseract_la_SOURCES += src/classify/classify.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/classify/adaptive.cpp
+libtesseract_la_SOURCES += src/classify/adaptmatch.cpp
+libtesseract_la_SOURCES += src/classify/blobclass.cpp
+libtesseract_la_SOURCES += src/classify/cluster.cpp
+libtesseract_la_SOURCES += src/classify/clusttool.cpp
+libtesseract_la_SOURCES += src/classify/cutoffs.cpp
+libtesseract_la_SOURCES += src/classify/featdefs.cpp
+libtesseract_la_SOURCES += src/classify/float2int.cpp
+libtesseract_la_SOURCES += src/classify/fpoint.cpp
+libtesseract_la_SOURCES += src/classify/intfeaturespace.cpp
+libtesseract_la_SOURCES += src/classify/intfx.cpp
+libtesseract_la_SOURCES += src/classify/intmatcher.cpp
+libtesseract_la_SOURCES += src/classify/intproto.cpp
+libtesseract_la_SOURCES += src/classify/kdtree.cpp
+libtesseract_la_SOURCES += src/classify/mf.cpp
+libtesseract_la_SOURCES += src/classify/mfdefs.cpp
+libtesseract_la_SOURCES += src/classify/mfoutline.cpp
+libtesseract_la_SOURCES += src/classify/mfx.cpp
+libtesseract_la_SOURCES += src/classify/normfeat.cpp
+libtesseract_la_SOURCES += src/classify/normmatch.cpp
+libtesseract_la_SOURCES += src/classify/ocrfeatures.cpp
+libtesseract_la_SOURCES += src/classify/outfeat.cpp
+libtesseract_la_SOURCES += src/classify/picofeat.cpp
+libtesseract_la_SOURCES += src/classify/protos.cpp
+libtesseract_la_SOURCES += src/classify/shapeclassifier.cpp
+libtesseract_la_SOURCES += src/classify/shapetable.cpp
+libtesseract_la_SOURCES += src/classify/tessclassifier.cpp
+libtesseract_la_SOURCES += src/classify/trainingsample.cpp
+endif
+
+# Rules for src/cutil.
+
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/cutil/bitvec.h
+noinst_HEADERS += src/cutil/oldlist.h
+endif
+
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/cutil/oldlist.cpp
+endif
+
+# Rules for src/dict.
+
+noinst_HEADERS += src/dict/dawg.h
+noinst_HEADERS += src/dict/dawg_cache.h
+noinst_HEADERS += src/dict/dict.h
+noinst_HEADERS += src/dict/matchdefs.h
+noinst_HEADERS += src/dict/stopper.h
+noinst_HEADERS += src/dict/trie.h
+
+libtesseract_la_SOURCES += src/dict/context.cpp
+libtesseract_la_SOURCES += src/dict/dawg.cpp
+libtesseract_la_SOURCES += src/dict/dawg_cache.cpp
+libtesseract_la_SOURCES += src/dict/dict.cpp
+libtesseract_la_SOURCES += src/dict/stopper.cpp
+libtesseract_la_SOURCES += src/dict/trie.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/dict/hyphen.cpp
+libtesseract_la_SOURCES += src/dict/permdawg.cpp
+endif
+
+# Rules for src/lstm.
+
+libtesseract_lstm_la_CPPFLAGS = $(AM_CPPFLAGS)
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/arch
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/classify
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/cutil
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/dict
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/lstm
+libtesseract_lstm_la_CPPFLAGS += -I$(top_srcdir)/src/viewer
+if TENSORFLOW
+libtesseract_lstm_la_CPPFLAGS += -DINCLUDE_TENSORFLOW
+libtesseract_lstm_la_CPPFLAGS += -I/usr/include/tensorflow
+endif
+if !NO_TESSDATA_PREFIX
+libtesseract_lstm_la_CPPFLAGS += -DTESSDATA_PREFIX=@datadir@
+endif
+
+noinst_HEADERS += src/lstm/convolve.h
+noinst_HEADERS += src/lstm/fullyconnected.h
+noinst_HEADERS += src/lstm/functions.h
+noinst_HEADERS += src/lstm/input.h
+noinst_HEADERS += src/lstm/lstm.h
+noinst_HEADERS += src/lstm/lstmrecognizer.h
+noinst_HEADERS += src/lstm/maxpool.h
+noinst_HEADERS += src/lstm/network.h
+noinst_HEADERS += src/lstm/networkio.h
+noinst_HEADERS += src/lstm/networkscratch.h
+noinst_HEADERS += src/lstm/parallel.h
+noinst_HEADERS += src/lstm/plumbing.h
+noinst_HEADERS += src/lstm/recodebeam.h
+noinst_HEADERS += src/lstm/reconfig.h
+noinst_HEADERS += src/lstm/reversed.h
+noinst_HEADERS += src/lstm/series.h
+noinst_HEADERS += src/lstm/static_shape.h
+noinst_HEADERS += src/lstm/stridemap.h
+noinst_HEADERS += src/lstm/tfnetwork.h
+noinst_HEADERS += src/lstm/weightmatrix.h
+
+noinst_LTLIBRARIES += libtesseract_lstm.la
+
+libtesseract_lstm_la_SOURCES = src/lstm/convolve.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/fullyconnected.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/functions.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/input.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/lstm.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/lstmrecognizer.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/maxpool.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/network.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/networkio.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/parallel.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/plumbing.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/recodebeam.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/reconfig.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/reversed.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/series.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/stridemap.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/tfnetwork.cpp
+libtesseract_lstm_la_SOURCES += src/lstm/weightmatrix.cpp
+if TENSORFLOW
+libtesseract_lstm_la_SOURCES += src/lstm/tfnetwork.pb.cc
+endif
+
+# Rules for src/opencl.
+
+libtesseract_opencl_la_CPPFLAGS = $(AM_CPPFLAGS)
+libtesseract_opencl_la_CPPFLAGS += $(OPENCL_CFLAGS)
+libtesseract_opencl_la_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+libtesseract_opencl_la_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+libtesseract_opencl_la_CPPFLAGS += -I$(top_srcdir)/src/ccmain
+
+noinst_HEADERS += src/opencl/openclwrapper.h
+noinst_HEADERS += src/opencl/oclkernels.h
+
+noinst_LTLIBRARIES += libtesseract_opencl.la
+
+libtesseract_opencl_la_SOURCES = src/opencl/openclwrapper.cpp
+
+# Rules for src/textord.
+
+noinst_HEADERS += src/textord/alignedblob.h
+noinst_HEADERS += src/textord/baselinedetect.h
+noinst_HEADERS += src/textord/bbgrid.h
+noinst_HEADERS += src/textord/blkocc.h
+noinst_HEADERS += src/textord/blobgrid.h
+noinst_HEADERS += src/textord/ccnontextdetect.h
+noinst_HEADERS += src/textord/cjkpitch.h
+noinst_HEADERS += src/textord/colfind.h
+noinst_HEADERS += src/textord/colpartition.h
+noinst_HEADERS += src/textord/colpartitionset.h
+noinst_HEADERS += src/textord/colpartitiongrid.h
+noinst_HEADERS += src/textord/devanagari_processing.h
+noinst_HEADERS += src/textord/drawtord.h
+noinst_HEADERS += src/textord/edgblob.h
+noinst_HEADERS += src/textord/edgloop.h
+noinst_HEADERS += src/textord/fpchop.h
+noinst_HEADERS += src/textord/gap_map.h
+noinst_HEADERS += src/textord/imagefind.h
+noinst_HEADERS += src/textord/linefind.h
+noinst_HEADERS += src/textord/makerow.h
+noinst_HEADERS += src/textord/oldbasel.h
+noinst_HEADERS += src/textord/pithsync.h
+noinst_HEADERS += src/textord/pitsync1.h
+noinst_HEADERS += src/textord/scanedg.h
+noinst_HEADERS += src/textord/sortflts.h
+noinst_HEADERS += src/textord/strokewidth.h
+noinst_HEADERS += src/textord/tabfind.h
+noinst_HEADERS += src/textord/tablefind.h
+noinst_HEADERS += src/textord/tabvector.h
+noinst_HEADERS += src/textord/tablerecog.h
+noinst_HEADERS += src/textord/textlineprojection.h
+noinst_HEADERS += src/textord/textord.h
+noinst_HEADERS += src/textord/topitch.h
+noinst_HEADERS += src/textord/tordmain.h
+noinst_HEADERS += src/textord/tovars.h
+noinst_HEADERS += src/textord/underlin.h
+noinst_HEADERS += src/textord/wordseg.h
+noinst_HEADERS += src/textord/workingpartset.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/textord/equationdetectbase.h
+endif
+
+libtesseract_la_SOURCES += src/textord/alignedblob.cpp
+libtesseract_la_SOURCES += src/textord/baselinedetect.cpp
+libtesseract_la_SOURCES += src/textord/bbgrid.cpp
+libtesseract_la_SOURCES += src/textord/blkocc.cpp
+libtesseract_la_SOURCES += src/textord/blobgrid.cpp
+libtesseract_la_SOURCES += src/textord/ccnontextdetect.cpp
+libtesseract_la_SOURCES += src/textord/cjkpitch.cpp
+libtesseract_la_SOURCES += src/textord/colfind.cpp
+libtesseract_la_SOURCES += src/textord/colpartition.cpp
+libtesseract_la_SOURCES += src/textord/colpartitionset.cpp
+libtesseract_la_SOURCES += src/textord/colpartitiongrid.cpp
+libtesseract_la_SOURCES += src/textord/devanagari_processing.cpp
+libtesseract_la_SOURCES += src/textord/drawtord.cpp
+libtesseract_la_SOURCES += src/textord/edgblob.cpp
+libtesseract_la_SOURCES += src/textord/edgloop.cpp
+libtesseract_la_SOURCES += src/textord/fpchop.cpp
+libtesseract_la_SOURCES += src/textord/gap_map.cpp
+libtesseract_la_SOURCES += src/textord/imagefind.cpp
+libtesseract_la_SOURCES += src/textord/linefind.cpp
+libtesseract_la_SOURCES += src/textord/makerow.cpp
+libtesseract_la_SOURCES += src/textord/oldbasel.cpp
+libtesseract_la_SOURCES += src/textord/pithsync.cpp
+libtesseract_la_SOURCES += src/textord/pitsync1.cpp
+libtesseract_la_SOURCES += src/textord/scanedg.cpp
+libtesseract_la_SOURCES += src/textord/sortflts.cpp
+libtesseract_la_SOURCES += src/textord/strokewidth.cpp
+libtesseract_la_SOURCES += src/textord/tabfind.cpp
+libtesseract_la_SOURCES += src/textord/tablefind.cpp
+libtesseract_la_SOURCES += src/textord/tabvector.cpp
+libtesseract_la_SOURCES += src/textord/tablerecog.cpp
+libtesseract_la_SOURCES += src/textord/textlineprojection.cpp
+libtesseract_la_SOURCES += src/textord/textord.cpp
+libtesseract_la_SOURCES += src/textord/topitch.cpp
+libtesseract_la_SOURCES += src/textord/tordmain.cpp
+libtesseract_la_SOURCES += src/textord/tospace.cpp
+libtesseract_la_SOURCES += src/textord/tovars.cpp
+libtesseract_la_SOURCES += src/textord/underlin.cpp
+libtesseract_la_SOURCES += src/textord/wordseg.cpp
+libtesseract_la_SOURCES += src/textord/workingpartset.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/textord/equationdetectbase.cpp
+endif
+
+# Rules for src/viewer.
+
+noinst_HEADERS += src/viewer/scrollview.h
+noinst_HEADERS += src/viewer/svmnode.h
+noinst_HEADERS += src/viewer/svutil.h
+
+libtesseract_la_SOURCES += src/viewer/scrollview.cpp
+libtesseract_la_SOURCES += src/viewer/svmnode.cpp
+libtesseract_la_SOURCES += src/viewer/svutil.cpp
+
+# TODO: Add rule to generate svpaint from svpaint.cpp.
+
+# Rules for src/wordrec.
+
+noinst_HEADERS += src/wordrec/wordrec.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/wordrec/associate.h
+noinst_HEADERS += src/wordrec/chop.h
+noinst_HEADERS += src/wordrec/drawfx.h
+noinst_HEADERS += src/wordrec/findseam.h
+noinst_HEADERS += src/wordrec/language_model.h
+noinst_HEADERS += src/wordrec/lm_consistency.h
+noinst_HEADERS += src/wordrec/lm_pain_points.h
+noinst_HEADERS += src/wordrec/lm_state.h
+noinst_HEADERS += src/wordrec/measure.h
+noinst_HEADERS += src/wordrec/outlines.h
+noinst_HEADERS += src/wordrec/params_model.h
+noinst_HEADERS += src/wordrec/plotedges.h
+noinst_HEADERS += src/wordrec/render.h
+endif
+
+libtesseract_la_SOURCES += src/wordrec/tface.cpp
+libtesseract_la_SOURCES += src/wordrec/wordrec.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_la_SOURCES += src/wordrec/associate.cpp
+libtesseract_la_SOURCES += src/wordrec/chop.cpp
+libtesseract_la_SOURCES += src/wordrec/chopper.cpp
+libtesseract_la_SOURCES += src/wordrec/drawfx.cpp
+libtesseract_la_SOURCES += src/wordrec/findseam.cpp
+libtesseract_la_SOURCES += src/wordrec/gradechop.cpp
+libtesseract_la_SOURCES += src/wordrec/language_model.cpp
+libtesseract_la_SOURCES += src/wordrec/lm_consistency.cpp
+libtesseract_la_SOURCES += src/wordrec/lm_pain_points.cpp
+libtesseract_la_SOURCES += src/wordrec/lm_state.cpp
+libtesseract_la_SOURCES += src/wordrec/outlines.cpp
+libtesseract_la_SOURCES += src/wordrec/params_model.cpp
+libtesseract_la_SOURCES += src/wordrec/pieces.cpp
+libtesseract_la_SOURCES += src/wordrec/plotedges.cpp
+libtesseract_la_SOURCES += src/wordrec/render.cpp
+libtesseract_la_SOURCES += src/wordrec/segsearch.cpp
+libtesseract_la_SOURCES += src/wordrec/wordclass.cpp
+endif
+
+# Rules for tesseract executable.
+
+bin_PROGRAMS = tesseract
+tesseract_SOURCES = src/api/tesseractmain.cpp
+tesseract_CPPFLAGS =
+tesseract_CPPFLAGS += -I$(top_srcdir)/src/arch
+tesseract_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+tesseract_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+tesseract_CPPFLAGS += -I$(top_srcdir)/src/dict
+tesseract_CPPFLAGS += -I$(top_srcdir)/src/viewer
+tesseract_CPPFLAGS += $(AM_CPPFLAGS)
+if VISIBILITY
+tesseract_CPPFLAGS += -DTESS_IMPORTS
+endif
+
+tesseract_LDFLAGS = $(OPENCL_LDFLAGS)
+tesseract_LDFLAGS += $(OPENMP_CXXFLAGS)
+
+tesseract_LDADD = libtesseract.la
+tesseract_LDADD += $(LEPTONICA_LIBS)
+tesseract_LDADD += $(TENSORFLOW_LIBS)
+tesseract_LDADD += $(libarchive_LIBS)
+tesseract_LDADD += $(libcurl_LIBS)
+
+if T_WIN
+tesseract_LDADD += -ltiff
+tesseract_LDADD += -lws2_32
+endif
+if ADD_RT
+tesseract_LDADD += -lrt
+endif
+
+# Rules for training tools.
+
+if ENABLE_TRAINING
+
+training: $(EXTRA_PROGRAMS) | $(PROGRAMS)
+
+training-install: $(EXTRA_PROGRAMS)
+ mkdir -p $(DESTDIR)$(bindir)
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install \
+ $(INSTALL) $(INSTALL_STRIP_FLAG) $(EXTRA_PROGRAMS) $(DESTDIR)$(bindir)
+
+training-uninstall:
+
+# Some unit tests use code from training.
+check: libtesseract_training.la
+
+# dawg_test runs dawg2wordlist and wordlist2dawg.
+check: dawg2wordlist wordlist2dawg
+
+CLEANFILES += $(EXTRA_PROGRAMS)
+
+else
+
+training:
+ @echo "Need to reconfigure project, so there are no errors"
+
+endif
+
+training_CPPFLAGS := -DPANGO_ENABLE_ENGINE
+training_CPPFLAGS += -DTESS_COMMON_TRAINING_API=
+training_CPPFLAGS += -DTESS_PANGO_TRAINING_API=
+training_CPPFLAGS += -DTESS_UNICHARSET_TRAINING_API=
+training_CPPFLAGS += -I$(top_builddir)/include
+training_CPPFLAGS += -I$(top_srcdir)/include
+training_CPPFLAGS += -I$(top_srcdir)/src/training
+training_CPPFLAGS += -I$(top_srcdir)/src/training/common
+training_CPPFLAGS += -I$(top_srcdir)/src/training/pango
+training_CPPFLAGS += -I$(top_srcdir)/src/training/unicharset
+training_CPPFLAGS += -I$(top_srcdir)/src/api
+training_CPPFLAGS += -I$(top_srcdir)/src/ccmain
+training_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+training_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+training_CPPFLAGS += -I$(top_srcdir)/src/lstm
+training_CPPFLAGS += -I$(top_srcdir)/src/arch
+training_CPPFLAGS += -I$(top_srcdir)/src/viewer
+training_CPPFLAGS += -I$(top_srcdir)/src/textord
+training_CPPFLAGS += -I$(top_srcdir)/src/dict
+training_CPPFLAGS += -I$(top_srcdir)/src/classify
+training_CPPFLAGS += -I$(top_srcdir)/src/wordrec
+training_CPPFLAGS += -I$(top_srcdir)/src/cutil
+training_CPPFLAGS += $(ICU_UC_CFLAGS) $(ICU_I18N_CFLAGS)
+training_CPPFLAGS += $(pango_CFLAGS)
+training_CPPFLAGS += $(cairo_CFLAGS)
+
+bin_SCRIPTS = src/training/language-specific.sh src/training/tesstrain.sh
+scripts_DATA = src/training/tesstrain_utils.sh
+scriptsdir = $(bindir)
+
+if DISABLED_LEGACY_ENGINE
+training_CPPFLAGS += -DDISABLED_LEGACY_ENGINE
+endif
+
+# TODO: training programs can not be linked to shared library created
+# with -fvisibility
+if VISIBILITY
+AM_LDFLAGS += -all-static
+endif
+
+noinst_HEADERS += src/training/pango/boxchar.h
+noinst_HEADERS += src/training/common/commandlineflags.h
+noinst_HEADERS += src/training/common/commontraining.h
+noinst_HEADERS += src/training/common/ctc.h
+noinst_HEADERS += src/training/common/networkbuilder.h
+noinst_HEADERS += src/training/degradeimage.h
+noinst_HEADERS += src/training/pango/ligature_table.h
+noinst_HEADERS += src/training/pango/pango_font_info.h
+noinst_HEADERS += src/training/pango/stringrenderer.h
+noinst_HEADERS += src/training/pango/tlog.h
+noinst_HEADERS += src/training/unicharset/icuerrorcode.h
+noinst_HEADERS += src/training/unicharset/fileio.h
+noinst_HEADERS += src/training/unicharset/lang_model_helpers.h
+noinst_HEADERS += src/training/unicharset/lstmtester.h
+noinst_HEADERS += src/training/unicharset/lstmtrainer.h
+noinst_HEADERS += src/training/unicharset/normstrngs.h
+noinst_HEADERS += src/training/unicharset/unicharset_training_utils.h
+noinst_HEADERS += src/training/unicharset/validate_grapheme.h
+noinst_HEADERS += src/training/unicharset/validate_indic.h
+noinst_HEADERS += src/training/unicharset/validate_javanese.h
+noinst_HEADERS += src/training/unicharset/validate_khmer.h
+noinst_HEADERS += src/training/unicharset/validate_myanmar.h
+noinst_HEADERS += src/training/unicharset/validator.h
+if !DISABLED_LEGACY_ENGINE
+noinst_HEADERS += src/training/common/errorcounter.h
+noinst_HEADERS += src/training/common/intfeaturedist.h
+noinst_HEADERS += src/training/common/intfeaturemap.h
+noinst_HEADERS += src/training/common/mastertrainer.h
+noinst_HEADERS += src/training/common/sampleiterator.h
+noinst_HEADERS += src/training/common/trainingsampleset.h
+noinst_HEADERS += src/training/mergenf.h
+endif
+
+CLEANFILES += libtesseract_training.la
+
+EXTRA_LTLIBRARIES = libtesseract_training.la
+
+libtesseract_training_la_CPPFLAGS = $(training_CPPFLAGS)
+libtesseract_training_la_SOURCES = src/training/pango/boxchar.cpp
+libtesseract_training_la_SOURCES += src/training/common/commandlineflags.cpp
+libtesseract_training_la_SOURCES += src/training/common/commontraining.cpp
+libtesseract_training_la_SOURCES += src/training/common/ctc.cpp
+libtesseract_training_la_SOURCES += src/training/common/networkbuilder.cpp
+libtesseract_training_la_SOURCES += src/training/degradeimage.cpp
+libtesseract_training_la_SOURCES += src/training/pango/ligature_table.cpp
+libtesseract_training_la_SOURCES += src/training/pango/pango_font_info.cpp
+libtesseract_training_la_SOURCES += src/training/pango/stringrenderer.cpp
+libtesseract_training_la_SOURCES += src/training/pango/tlog.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/icuerrorcode.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/fileio.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/lang_model_helpers.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/lstmtester.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/lstmtrainer.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/normstrngs.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/unicharset_training_utils.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validate_grapheme.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validate_indic.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validate_javanese.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validate_khmer.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validate_myanmar.cpp
+libtesseract_training_la_SOURCES += src/training/unicharset/validator.cpp
+if !DISABLED_LEGACY_ENGINE
+libtesseract_training_la_SOURCES += src/training/common/errorcounter.cpp
+libtesseract_training_la_SOURCES += src/training/common/intfeaturedist.cpp
+libtesseract_training_la_SOURCES += src/training/common/intfeaturemap.cpp
+libtesseract_training_la_SOURCES += src/training/common/mastertrainer.cpp
+libtesseract_training_la_SOURCES += src/training/common/sampleiterator.cpp
+libtesseract_training_la_SOURCES += src/training/common/trainingsampleset.cpp
+endif
+
+trainingtools = combine_lang_model
+trainingtools += combine_tessdata
+trainingtools += dawg2wordlist
+trainingtools += lstmeval
+trainingtools += lstmtraining
+trainingtools += merge_unicharsets
+trainingtools += set_unicharset_properties
+trainingtools += text2image
+trainingtools += unicharset_extractor
+trainingtools += wordlist2dawg
+if !DISABLED_LEGACY_ENGINE
+trainingtools += ambiguous_words
+trainingtools += classifier_tester
+trainingtools += cntraining
+trainingtools += mftraining
+trainingtools += shapeclustering
+endif
+
+$(trainingtools): libtesseract.la
+
+EXTRA_PROGRAMS = $(trainingtools)
+
+extralib = libtesseract.la
+extralib += $(libarchive_LIBS)
+extralib += $(LEPTONICA_LIBS)
+extralib += $(OPENCL_LDFLAGS)
+extralib += $(TENSORFLOW_LIBS)
+if T_WIN
+extralib += -lws2_32
+endif
+
+if !DISABLED_LEGACY_ENGINE
+ambiguous_words_CPPFLAGS = $(training_CPPFLAGS)
+ambiguous_words_SOURCES = src/training/ambiguous_words.cpp
+ambiguous_words_LDADD = libtesseract_training.la
+ambiguous_words_LDADD += $(extralib)
+
+classifier_tester_CPPFLAGS = $(training_CPPFLAGS)
+classifier_tester_SOURCES = src/training/classifier_tester.cpp
+classifier_tester_LDADD = libtesseract_training.la
+classifier_tester_LDADD += $(extralib)
+
+cntraining_CPPFLAGS = $(training_CPPFLAGS)
+cntraining_SOURCES = src/training/cntraining.cpp
+cntraining_LDADD = libtesseract_training.la
+cntraining_LDADD += $(extralib)
+
+mftraining_CPPFLAGS = $(training_CPPFLAGS)
+mftraining_SOURCES = src/training/mftraining.cpp src/training/mergenf.cpp
+mftraining_LDADD = libtesseract_training.la
+mftraining_LDADD += $(ICU_UC_LIBS)
+mftraining_LDADD += $(extralib)
+
+shapeclustering_CPPFLAGS = $(training_CPPFLAGS)
+shapeclustering_SOURCES = src/training/shapeclustering.cpp
+shapeclustering_LDADD = libtesseract_training.la
+shapeclustering_LDADD += $(extralib)
+endif
+
+combine_lang_model_CPPFLAGS = $(training_CPPFLAGS)
+combine_lang_model_SOURCES = src/training/combine_lang_model.cpp
+combine_lang_model_LDADD = libtesseract_training.la
+combine_lang_model_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+combine_lang_model_LDADD += $(extralib)
+
+combine_tessdata_CPPFLAGS = $(training_CPPFLAGS)
+combine_tessdata_SOURCES = src/training/combine_tessdata.cpp
+combine_tessdata_LDADD = $(extralib)
+
+dawg2wordlist_CPPFLAGS = $(training_CPPFLAGS)
+dawg2wordlist_SOURCES = src/training/dawg2wordlist.cpp
+dawg2wordlist_LDADD = $(extralib)
+
+lstmeval_CPPFLAGS = $(training_CPPFLAGS)
+lstmeval_SOURCES = src/training/lstmeval.cpp
+lstmeval_LDADD = libtesseract_training.la
+lstmeval_LDADD += $(ICU_UC_LIBS)
+lstmeval_LDADD += $(extralib)
+
+lstmtraining_CPPFLAGS = $(training_CPPFLAGS)
+lstmtraining_SOURCES = src/training/lstmtraining.cpp
+lstmtraining_LDADD = libtesseract_training.la
+lstmtraining_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+lstmtraining_LDADD += $(extralib)
+
+merge_unicharsets_CPPFLAGS = $(training_CPPFLAGS)
+merge_unicharsets_SOURCES = src/training/merge_unicharsets.cpp
+merge_unicharsets_LDADD = $(extralib)
+
+set_unicharset_properties_CPPFLAGS = $(training_CPPFLAGS)
+set_unicharset_properties_SOURCES = src/training/set_unicharset_properties.cpp
+set_unicharset_properties_LDADD = libtesseract_training.la
+set_unicharset_properties_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+set_unicharset_properties_LDADD += $(extralib)
+
+text2image_CPPFLAGS = $(training_CPPFLAGS)
+text2image_SOURCES = src/training/text2image.cpp
+text2image_LDADD = libtesseract_training.la
+text2image_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+text2image_LDADD += $(extralib)
+text2image_LDADD += $(ICU_UC_LIBS) $(cairo_LIBS)
+text2image_LDADD += $(pango_LIBS) $(pangocairo_LIBS) $(pangoft2_LIBS)
+
+unicharset_extractor_CPPFLAGS = $(training_CPPFLAGS)
+unicharset_extractor_SOURCES = src/training/unicharset_extractor.cpp
+unicharset_extractor_LDADD = libtesseract_training.la
+unicharset_extractor_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+unicharset_extractor_LDADD += $(extralib)
+
+wordlist2dawg_CPPFLAGS = $(training_CPPFLAGS)
+wordlist2dawg_SOURCES = src/training/wordlist2dawg.cpp
+wordlist2dawg_LDADD = $(extralib)
+
+# fuzzer-api is used for fuzzing tests.
+# They are run by OSS-Fuzz https://oss-fuzz.com/, but can also be run locally.
+# Note: -fsanitize=fuzzer currently requires the clang++ compiler.
+
+# LIB_FUZZING_ENGINE can be overridden by the caller.
+# This is used by OSS-Fuzz.
+LIB_FUZZING_ENGINE ?= -fsanitize=fuzzer
+
+fuzzer-api: libtesseract.la
+fuzzer-api: unittest/fuzzers/fuzzer-api.cpp
+ $(CXX) $(CXXFLAGS) -g $(LIB_FUZZING_ENGINE) \
+ -I $(top_srcdir)/include \
+ -I $(builddir)/include \
+ -I $(top_srcdir)/src/ccmain \
+ -I $(top_srcdir)/src/ccstruct \
+ -I $(top_srcdir)/src/ccutil \
+ $(LEPTONICA_CFLAGS) \
+ $(OPENMP_CXXFLAGS) \
+ $< \
+ $(builddir)/.libs/libtesseract.a \
+ $(LEPTONICA_LIBS) \
+ $(TENSORFLOW_LIBS) \
+ $(libarchive_LIBS) \
+ $(libcurl_LIBS) \
+ -o $@
+
+CLEANFILES += fuzzer-api
+
+if ASCIIDOC
+
+man_MANS = doc/combine_lang_model.1
+man_MANS += doc/combine_tessdata.1
+man_MANS += doc/dawg2wordlist.1
+man_MANS += doc/lstmeval.1
+man_MANS += doc/lstmtraining.1
+man_MANS += doc/merge_unicharsets.1
+man_MANS += doc/set_unicharset_properties.1
+man_MANS += doc/tesseract.1
+man_MANS += doc/text2image.1
+man_MANS += doc/unicharset.5
+man_MANS += doc/unicharset_extractor.1
+man_MANS += doc/wordlist2dawg.1
+
+if !DISABLED_LEGACY_ENGINE
+man_MANS += doc/ambiguous_words.1
+man_MANS += doc/classifier_tester.1
+man_MANS += doc/cntraining.1
+man_MANS += doc/mftraining.1
+man_MANS += doc/shapeclustering.1
+man_MANS += doc/unicharambigs.5
+endif
+
+man_xslt = http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
+
+EXTRA_DIST += $(man_MANS) doc/Doxyfile
+
+html: ${man_MANS:%=%.html}
+pdf: ${man_MANS:%=%.pdf}
+
+SUFFIXES = .asc .html .pdf
+
+.asc:
+if HAVE_XML_CATALOG_FILES
+ asciidoc -b docbook -d manpage -o - $< | \
+ XML_CATALOG_FILES=$(XML_CATALOG_FILES) xsltproc --nonet -o $@ $(man_xslt) -
+else
+ asciidoc -b docbook -d manpage -o - $< | \
+ xsltproc --nonet -o $@ $(man_xslt) -
+endif
+
+.asc.html:
+ asciidoc -b html5 -o $@ $<
+
+.asc.pdf:
+ asciidoc -b docbook -d manpage -o $*.dbk $<
+ docbook2pdf -o doc $*.dbk
+
+MAINTAINERCLEANFILES = $(man_MANS) Doxyfile
+
+endif
+
+# Absolute path of directory 'langdata'.
+LANGDATA_DIR=$(shell cd $(top_srcdir) && cd .. && pwd)/langdata_lstm
+
+# Absolute path of directory 'tessdata' with traineddata files
+# (must be on same level as top source directory).
+TESSDATA_DIR=$(shell cd $(top_srcdir) && cd .. && pwd)/tessdata
+
+# Absolute path of directory 'testing' with test images and ground truth texts
+# (using submodule test).
+TESTING_DIR=$(shell cd $(top_srcdir) && pwd)/test/testing
+# Absolute path of directory 'testdata' with test unicharset etc.
+# (using submodule test).
+TESTDATA_DIR=$(shell cd $(top_srcdir) && pwd)/test/testdata
+
+# Suppress some memory leaks reported by LeakSanitizer.
+export LSAN_OPTIONS=suppressions=$(top_srcdir)/unittest/tesseract_leaksanitizer.supp
+
+unittest_CPPFLAGS =
+unittest_CPPFLAGS += -DTESSBIN_DIR="\"$(abs_top_builddir)\""
+unittest_CPPFLAGS += -DLANGDATA_DIR="\"$(LANGDATA_DIR)\""
+unittest_CPPFLAGS += -DTESSDATA_DIR="\"$(TESSDATA_DIR)\""
+unittest_CPPFLAGS += -DTESTING_DIR="\"$(TESTING_DIR)\""
+unittest_CPPFLAGS += -DTESTDATA_DIR="\"$(TESTDATA_DIR)\""
+unittest_CPPFLAGS += -DPANGO_ENABLE_ENGINE
+if DISABLED_LEGACY_ENGINE
+unittest_CPPFLAGS += -DDISABLED_LEGACY_ENGINE
+endif # DISABLED_LEGACY_ENGINE
+unittest_CPPFLAGS += -DTESS_COMMON_TRAINING_API=
+unittest_CPPFLAGS += -DTESS_PANGO_TRAINING_API=
+unittest_CPPFLAGS += -DTESS_UNICHARSET_TRAINING_API=
+unittest_CPPFLAGS += -I$(top_builddir)/include
+unittest_CPPFLAGS += -I$(top_srcdir)/include
+unittest_CPPFLAGS += -I$(top_srcdir)/src/arch
+unittest_CPPFLAGS += -I$(top_srcdir)/src/ccmain
+unittest_CPPFLAGS += -I$(top_srcdir)/src/ccstruct
+unittest_CPPFLAGS += -I$(top_srcdir)/src/ccutil
+unittest_CPPFLAGS += -I$(top_srcdir)/src/classify
+unittest_CPPFLAGS += -I$(top_srcdir)/src/cutil
+unittest_CPPFLAGS += -I$(top_srcdir)/src/dict
+unittest_CPPFLAGS += -I$(top_srcdir)/src/display
+unittest_CPPFLAGS += -I$(top_srcdir)/src/lstm
+unittest_CPPFLAGS += -I$(top_srcdir)/src/textord
+unittest_CPPFLAGS += -I$(top_srcdir)/unittest/base
+unittest_CPPFLAGS += -I$(top_srcdir)/unittest/util
+unittest_CPPFLAGS += $(LEPTONICA_CFLAGS)
+if ENABLE_TRAINING
+unittest_CPPFLAGS += -I$(top_srcdir)/src/training
+unittest_CPPFLAGS += -I$(top_srcdir)/src/training/common
+unittest_CPPFLAGS += -I$(top_srcdir)/src/training/pango
+unittest_CPPFLAGS += -I$(top_srcdir)/src/training/unicharset
+unittest_CPPFLAGS += $(pangocairo_CFLAGS)
+endif # ENABLE_TRAINING
+unittest_CPPFLAGS += -I$(top_srcdir)/src/viewer
+unittest_CPPFLAGS += -I$(top_srcdir)/src/wordrec
+unittest_CPPFLAGS += -I$(top_srcdir)/abseil
+if TENSORFLOW
+unittest_CPPFLAGS += -DINCLUDE_TENSORFLOW
+unittest_CPPFLAGS += -I/usr/include/tensorflow
+endif # TENSORFLOW
+
+# Build googletest:
+check_LTLIBRARIES = libgtest.la libgtest_main.la libgmock.la libgmock_main.la
+libgtest_la_SOURCES = googletest/googletest/src/gtest-all.cc
+libgtest_la_CPPFLAGS = -I$(top_srcdir)/googletest/googletest/include -I$(top_srcdir)/googletest/googletest -pthread
+libgtest_main_la_SOURCES = googletest/googletest/src/gtest_main.cc
+libgtest_main_la_CPPFLAGS = $(libgtest_la_CPPFLAGS)
+
+# Build Abseil (needed for some unit tests).
+check_LTLIBRARIES += libabseil.la
+libabseil_la_SOURCES =
+libabseil_la_SOURCES += abseil/absl/base/internal/cycleclock.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/raw_logging.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/spinlock.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/spinlock_wait.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/sysinfo.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/throw_delegate.cc
+libabseil_la_SOURCES += abseil/absl/base/internal/unscaledcycleclock.cc
+libabseil_la_SOURCES += abseil/absl/numeric/int128.cc
+libabseil_la_SOURCES += abseil/absl/strings/ascii.cc
+libabseil_la_SOURCES += abseil/absl/strings/charconv.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/charconv_bigint.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/charconv_parse.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/memutil.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/arg.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/bind.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/extension.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/float_conversion.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/output.cc
+libabseil_la_SOURCES += abseil/absl/strings/internal/str_format/parser.cc
+libabseil_la_SOURCES += abseil/absl/strings/match.cc
+libabseil_la_SOURCES += abseil/absl/strings/numbers.cc
+libabseil_la_SOURCES += abseil/absl/strings/str_cat.cc
+libabseil_la_SOURCES += abseil/absl/strings/str_split.cc
+libabseil_la_SOURCES += abseil/absl/strings/string_view.cc
+libabseil_la_SOURCES += abseil/absl/time/clock.cc
+libabseil_la_SOURCES += abseil/absl/time/duration.cc
+libabseil_la_CPPFLAGS = -I$(top_srcdir)/abseil
+
+GMOCK_INCLUDES = -I$(top_srcdir)/googletest/googlemock/include \
+ -I$(top_srcdir)/googletest/googlemock \
+ -I$(top_srcdir)/googletest/googletest/include \
+ -I$(top_srcdir)/googletest/googletest
+
+libgmock_la_SOURCES = googletest/googlemock/src/gmock-all.cc
+libgmock_la_CPPFLAGS = $(GMOCK_INCLUDES) \
+ -pthread
+libgmock_main_la_SOURCES = googletest/googlemock/src/gmock_main.cc
+libgmock_main_la_CPPFLAGS = $(GMOCK_INCLUDES) \
+ -pthread
+
+# Build unittests
+ABSEIL_LIBS = libabseil.la
+GTEST_LIBS = libgtest.la libgtest_main.la -lpthread
+GMOCK_LIBS = libgmock.la libgmock_main.la
+TESS_LIBS = $(GTEST_LIBS)
+TESS_LIBS += libtesseract.la $(libarchive_LIBS)
+TESS_LIBS += $(TENSORFLOW_LIBS)
+TRAINING_LIBS = libtesseract_training.la
+TRAINING_LIBS += $(TESS_LIBS)
+unittest_CPPFLAGS += -isystem $(top_srcdir)/googletest/googletest/include
+unittest_CPPFLAGS += -isystem $(top_srcdir)/googletest/googlemock/include
+
+check_PROGRAMS = apiexample_test
+if ENABLE_TRAINING
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += applybox_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += baseapi_test
+check_PROGRAMS += baseapi_thread_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += bitvector_test
+endif # !DISABLED_LEGACY_ENGINE
+endif # ENABLE_TRAINING
+check_PROGRAMS += cleanapi_test
+check_PROGRAMS += colpartition_test
+if ENABLE_TRAINING
+check_PROGRAMS += commandlineflags_test
+check_PROGRAMS += dawg_test
+endif # ENABLE_TRAINING
+check_PROGRAMS += denorm_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += equationdetect_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += fileio_test
+check_PROGRAMS += heap_test
+check_PROGRAMS += imagedata_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += indexmapbidi_test
+check_PROGRAMS += intfeaturemap_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += intsimdmatrix_test
+check_PROGRAMS += lang_model_test
+check_PROGRAMS += layout_test
+check_PROGRAMS += ligature_table_test
+check_PROGRAMS += linlsq_test
+check_PROGRAMS += list_test
+if ENABLE_TRAINING
+check_PROGRAMS += lstm_recode_test
+check_PROGRAMS += lstm_squashed_test
+check_PROGRAMS += lstm_test
+check_PROGRAMS += lstmtrainer_test
+endif # ENABLE_TRAINING
+check_PROGRAMS += loadlang_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += mastertrainer_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += matrix_test
+check_PROGRAMS += networkio_test
+if ENABLE_TRAINING
+check_PROGRAMS += normstrngs_test
+endif # ENABLE_TRAINING
+check_PROGRAMS += nthitem_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += osd_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += pagesegmode_test
+if ENABLE_TRAINING
+check_PROGRAMS += pango_font_info_test
+endif # ENABLE_TRAINING
+check_PROGRAMS += paragraphs_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += params_model_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += progress_test
+check_PROGRAMS += qrsequence_test
+check_PROGRAMS += recodebeam_test
+check_PROGRAMS += rect_test
+check_PROGRAMS += resultiterator_test
+check_PROGRAMS += scanutils_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += shapetable_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += stats_test
+check_PROGRAMS += stridemap_test
+check_PROGRAMS += stringrenderer_test
+check_PROGRAMS += tablefind_test
+check_PROGRAMS += tablerecog_test
+check_PROGRAMS += tabvector_test
+check_PROGRAMS += tatweel_test
+if !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += textlineprojection_test
+endif # !DISABLED_LEGACY_ENGINE
+check_PROGRAMS += tfile_test
+if ENABLE_TRAINING
+check_PROGRAMS += unichar_test
+check_PROGRAMS += unicharcompress_test
+check_PROGRAMS += unicharset_test
+check_PROGRAMS += validate_grapheme_test
+check_PROGRAMS += validate_indic_test
+check_PROGRAMS += validate_khmer_test
+check_PROGRAMS += validate_myanmar_test
+check_PROGRAMS += validator_test
+endif # ENABLE_TRAINING
+
+check_PROGRAMS: libtesseract.la libtesseract_training.la
+
+TESTS = $(check_PROGRAMS)
+
+# List of source files needed to build the executable:
+
+apiexample_test_SOURCES = unittest/apiexample_test.cc
+apiexample_test_CPPFLAGS = $(unittest_CPPFLAGS)
+apiexample_test_LDFLAGS = $(OPENCL_LDFLAGS) $(LEPTONICA_LIBS)
+apiexample_test_LDADD = $(TESS_LIBS) $(LEPTONICA_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+applybox_test_SOURCES = unittest/applybox_test.cc
+applybox_test_CPPFLAGS = $(unittest_CPPFLAGS)
+applybox_test_LDADD = $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+baseapi_test_SOURCES = unittest/baseapi_test.cc
+baseapi_test_CPPFLAGS = $(unittest_CPPFLAGS)
+baseapi_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+
+baseapi_thread_test_SOURCES = unittest/baseapi_thread_test.cc
+baseapi_thread_test_CPPFLAGS = $(unittest_CPPFLAGS)
+baseapi_thread_test_LDADD = $(ABSEIL_LIBS)
+baseapi_thread_test_LDADD += $(TESS_LIBS) $(LEPTONICA_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+bitvector_test_SOURCES = unittest/bitvector_test.cc
+bitvector_test_CPPFLAGS = $(unittest_CPPFLAGS)
+bitvector_test_LDADD = $(TRAINING_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+cleanapi_test_SOURCES = unittest/cleanapi_test.cc
+cleanapi_test_CPPFLAGS = $(unittest_CPPFLAGS)
+cleanapi_test_LDADD = $(TESS_LIBS)
+
+colpartition_test_SOURCES = unittest/colpartition_test.cc
+colpartition_test_CPPFLAGS = $(unittest_CPPFLAGS)
+colpartition_test_LDADD = $(TESS_LIBS)
+
+commandlineflags_test_SOURCES = unittest/commandlineflags_test.cc
+commandlineflags_test_CPPFLAGS = $(unittest_CPPFLAGS)
+commandlineflags_test_LDADD = $(TRAINING_LIBS) $(ICU_UC_LIBS)
+
+dawg_test_SOURCES = unittest/dawg_test.cc
+dawg_test_CPPFLAGS = $(unittest_CPPFLAGS)
+dawg_test_LDADD = $(TRAINING_LIBS)
+
+denorm_test_SOURCES = unittest/denorm_test.cc
+denorm_test_CPPFLAGS = $(unittest_CPPFLAGS)
+denorm_test_LDADD = $(TESS_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+equationdetect_test_SOURCES = unittest/equationdetect_test.cc
+equationdetect_test_CPPFLAGS = $(unittest_CPPFLAGS)
+equationdetect_test_LDADD = $(TESS_LIBS) $(LEPTONICA_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+fileio_test_SOURCES = unittest/fileio_test.cc
+fileio_test_CPPFLAGS = $(unittest_CPPFLAGS)
+fileio_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+
+heap_test_SOURCES = unittest/heap_test.cc
+heap_test_CPPFLAGS = $(unittest_CPPFLAGS)
+heap_test_LDADD = $(TESS_LIBS)
+
+imagedata_test_SOURCES = unittest/imagedata_test.cc
+imagedata_test_CPPFLAGS = $(unittest_CPPFLAGS)
+imagedata_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+indexmapbidi_test_SOURCES = unittest/indexmapbidi_test.cc
+indexmapbidi_test_CPPFLAGS = $(unittest_CPPFLAGS)
+indexmapbidi_test_LDADD = $(TRAINING_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+if !DISABLED_LEGACY_ENGINE
+intfeaturemap_test_SOURCES = unittest/intfeaturemap_test.cc
+intfeaturemap_test_CPPFLAGS = $(unittest_CPPFLAGS)
+intfeaturemap_test_LDADD = $(TRAINING_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+intsimdmatrix_test_SOURCES = unittest/intsimdmatrix_test.cc
+intsimdmatrix_test_CPPFLAGS = $(unittest_CPPFLAGS)
+if HAVE_AVX2
+intsimdmatrix_test_CPPFLAGS += -DHAVE_AVX2
+endif
+if HAVE_SSE4_1
+intsimdmatrix_test_CPPFLAGS += -DHAVE_SSE4_1
+endif
+intsimdmatrix_test_LDADD = $(TESS_LIBS)
+
+lang_model_test_SOURCES = unittest/lang_model_test.cc
+lang_model_test_CPPFLAGS = $(unittest_CPPFLAGS)
+lang_model_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+layout_test_SOURCES = unittest/layout_test.cc
+layout_test_CPPFLAGS = $(unittest_CPPFLAGS)
+layout_test_LDADD = $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+
+ligature_table_test_SOURCES = unittest/ligature_table_test.cc
+ligature_table_test_CPPFLAGS = $(unittest_CPPFLAGS)
+ligature_table_test_LDADD = $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+ligature_table_test_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+ligature_table_test_LDADD += $(pangocairo_LIBS) $(pangoft2_LIBS)
+ligature_table_test_LDADD += $(cairo_LIBS) $(pango_LIBS)
+
+linlsq_test_SOURCES = unittest/linlsq_test.cc
+linlsq_test_CPPFLAGS = $(unittest_CPPFLAGS)
+linlsq_test_LDADD = $(TESS_LIBS)
+
+list_test_SOURCES = unittest/list_test.cc
+list_test_CPPFLAGS = $(unittest_CPPFLAGS)
+list_test_LDADD = $(TESS_LIBS)
+
+loadlang_test_SOURCES = unittest/loadlang_test.cc
+loadlang_test_CPPFLAGS = $(unittest_CPPFLAGS)
+loadlang_test_LDADD = $(TESS_LIBS) $(LEPTONICA_LIBS)
+
+lstm_recode_test_SOURCES = unittest/lstm_recode_test.cc
+lstm_recode_test_CPPFLAGS = $(unittest_CPPFLAGS)
+lstm_recode_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+
+lstm_squashed_test_SOURCES = unittest/lstm_squashed_test.cc
+lstm_squashed_test_CPPFLAGS = $(unittest_CPPFLAGS)
+lstm_squashed_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+
+lstm_test_SOURCES = unittest/lstm_test.cc
+lstm_test_CPPFLAGS = $(unittest_CPPFLAGS)
+lstm_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+
+lstmtrainer_test_SOURCES = unittest/lstmtrainer_test.cc
+lstmtrainer_test_CPPFLAGS = $(unittest_CPPFLAGS)
+lstmtrainer_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+mastertrainer_test_SOURCES = unittest/mastertrainer_test.cc
+mastertrainer_test_CPPFLAGS = $(unittest_CPPFLAGS)
+mastertrainer_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+matrix_test_SOURCES = unittest/matrix_test.cc
+matrix_test_CPPFLAGS = $(unittest_CPPFLAGS)
+matrix_test_LDADD = $(TESS_LIBS)
+
+networkio_test_SOURCES = unittest/networkio_test.cc
+networkio_test_CPPFLAGS = $(unittest_CPPFLAGS)
+networkio_test_LDADD = $(TESS_LIBS)
+
+normstrngs_test_SOURCES = unittest/normstrngs_test.cc
+if TENSORFLOW
+normstrngs_test_SOURCES += unittest/third_party/utf/rune.c
+normstrngs_test_SOURCES += unittest/util/utf8/unilib.cc
+endif # TENSORFLOW
+normstrngs_test_CPPFLAGS = $(unittest_CPPFLAGS)
+normstrngs_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+nthitem_test_SOURCES = unittest/nthitem_test.cc
+nthitem_test_CPPFLAGS = $(unittest_CPPFLAGS)
+nthitem_test_LDADD = $(TESS_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+osd_test_SOURCES = unittest/osd_test.cc
+osd_test_CPPFLAGS = $(unittest_CPPFLAGS)
+osd_test_LDADD = $(TESS_LIBS) $(LEPTONICA_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+pagesegmode_test_SOURCES = unittest/pagesegmode_test.cc
+pagesegmode_test_CPPFLAGS = $(unittest_CPPFLAGS)
+pagesegmode_test_LDADD = $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+
+pango_font_info_test_SOURCES = unittest/pango_font_info_test.cc
+if TENSORFLOW
+pango_font_info_test_SOURCES += unittest/third_party/utf/rune.c
+pango_font_info_test_SOURCES += unittest/util/utf8/unicodetext.cc
+pango_font_info_test_SOURCES += unittest/util/utf8/unilib.cc
+endif # TENSORFLOW
+pango_font_info_test_CPPFLAGS = $(unittest_CPPFLAGS)
+pango_font_info_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+pango_font_info_test_LDADD += $(ICU_I18N_LIBS)
+pango_font_info_test_LDADD += $(pangocairo_LIBS)
+pango_font_info_test_LDADD += $(pangoft2_LIBS)
+
+paragraphs_test_SOURCES = unittest/paragraphs_test.cc
+paragraphs_test_CPPFLAGS = $(unittest_CPPFLAGS)
+paragraphs_test_LDADD = $(ABSEIL_LIBS) $(TESS_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+params_model_test_SOURCES = unittest/params_model_test.cc
+params_model_test_CPPFLAGS = $(unittest_CPPFLAGS)
+params_model_test_LDADD = $(TRAINING_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+progress_test_SOURCES = unittest/progress_test.cc
+progress_test_CPPFLAGS = $(unittest_CPPFLAGS)
+progress_test_LDFLAGS = $(OPENCL_LDFLAGS) $(LEPTONICA_LIBS)
+progress_test_LDADD = $(GTEST_LIBS) $(GMOCK_LIBS) $(TESS_LIBS) $(LEPTONICA_LIBS)
+
+qrsequence_test_SOURCES = unittest/qrsequence_test.cc
+qrsequence_test_CPPFLAGS = $(unittest_CPPFLAGS)
+qrsequence_test_LDADD = $(ABSEIL_LIBS) $(TESS_LIBS)
+
+recodebeam_test_SOURCES = unittest/recodebeam_test.cc
+recodebeam_test_CPPFLAGS = $(unittest_CPPFLAGS)
+recodebeam_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+rect_test_SOURCES = unittest/rect_test.cc
+rect_test_CPPFLAGS = $(unittest_CPPFLAGS)
+rect_test_LDADD = $(TESS_LIBS)
+
+resultiterator_test_SOURCES = unittest/resultiterator_test.cc
+resultiterator_test_CPPFLAGS = $(unittest_CPPFLAGS)
+resultiterator_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+resultiterator_test_LDADD += $(LEPTONICA_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+scanutils_test_SOURCES = unittest/scanutils_test.cc
+scanutils_test_CPPFLAGS = $(unittest_CPPFLAGS)
+scanutils_test_LDADD = $(TRAINING_LIBS)
+
+if !DISABLED_LEGACY_ENGINE
+shapetable_test_SOURCES = unittest/shapetable_test.cc
+shapetable_test_CPPFLAGS = $(unittest_CPPFLAGS)
+shapetable_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS)
+endif # !DISABLED_LEGACY_ENGINE
+
+stats_test_SOURCES = unittest/stats_test.cc
+stats_test_CPPFLAGS = $(unittest_CPPFLAGS)
+stats_test_LDADD = $(TESS_LIBS)
+
+stridemap_test_SOURCES = unittest/stridemap_test.cc
+stridemap_test_CPPFLAGS = $(unittest_CPPFLAGS)
+stridemap_test_LDADD = $(TESS_LIBS)
+
+stringrenderer_test_SOURCES = unittest/stringrenderer_test.cc
+stringrenderer_test_CPPFLAGS = $(unittest_CPPFLAGS)
+stringrenderer_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+stringrenderer_test_LDADD += $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+stringrenderer_test_LDADD += $(pangocairo_LIBS) $(pangoft2_LIBS)
+stringrenderer_test_LDADD += $(cairo_LIBS) $(pango_LIBS)
+
+tablefind_test_SOURCES = unittest/tablefind_test.cc
+tablefind_test_CPPFLAGS = $(unittest_CPPFLAGS)
+tablefind_test_LDADD = $(TESS_LIBS)
+
+tablerecog_test_SOURCES = unittest/tablerecog_test.cc
+tablerecog_test_CPPFLAGS = $(unittest_CPPFLAGS)
+tablerecog_test_LDADD = $(TESS_LIBS)
+
+tabvector_test_SOURCES = unittest/tabvector_test.cc
+tabvector_test_CPPFLAGS = $(unittest_CPPFLAGS)
+tabvector_test_LDADD = $(TESS_LIBS)
+
+tatweel_test_SOURCES = unittest/tatweel_test.cc
+if TENSORFLOW
+tatweel_test_SOURCES += unittest/third_party/utf/rune.c
+tatweel_test_SOURCES += unittest/util/utf8/unicodetext.cc
+tatweel_test_SOURCES += unittest/util/utf8/unilib.cc
+endif # TENSORFLOW
+tatweel_test_CPPFLAGS = $(unittest_CPPFLAGS)
+tatweel_test_LDADD = $(TRAINING_LIBS)
+
+textlineprojection_test_SOURCES = unittest/textlineprojection_test.cc
+textlineprojection_test_CPPFLAGS = $(unittest_CPPFLAGS)
+textlineprojection_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(LEPTONICA_LIBS)
+
+tfile_test_SOURCES = unittest/tfile_test.cc
+tfile_test_CPPFLAGS = $(unittest_CPPFLAGS)
+tfile_test_LDADD = $(TESS_LIBS)
+
+unichar_test_SOURCES = unittest/unichar_test.cc
+unichar_test_CPPFLAGS = $(unittest_CPPFLAGS)
+unichar_test_LDADD = $(TRAINING_LIBS) $(ICU_UC_LIBS)
+
+unicharcompress_test_SOURCES = unittest/unicharcompress_test.cc
+unicharcompress_test_CPPFLAGS = $(unittest_CPPFLAGS)
+unicharcompress_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_UC_LIBS)
+
+unicharset_test_SOURCES = unittest/unicharset_test.cc
+unicharset_test_CPPFLAGS = $(unittest_CPPFLAGS)
+unicharset_test_LDADD = $(TRAINING_LIBS) $(ICU_UC_LIBS)
+
+validate_grapheme_test_SOURCES = unittest/validate_grapheme_test.cc
+validate_grapheme_test_CPPFLAGS = $(unittest_CPPFLAGS)
+validate_grapheme_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+validate_indic_test_SOURCES = unittest/validate_indic_test.cc
+validate_indic_test_CPPFLAGS = $(unittest_CPPFLAGS)
+validate_indic_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+validate_khmer_test_SOURCES = unittest/validate_khmer_test.cc
+validate_khmer_test_CPPFLAGS = $(unittest_CPPFLAGS)
+validate_khmer_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+validate_myanmar_test_SOURCES = unittest/validate_myanmar_test.cc
+validate_myanmar_test_CPPFLAGS = $(unittest_CPPFLAGS)
+validate_myanmar_test_LDADD = $(ABSEIL_LIBS) $(TRAINING_LIBS) $(ICU_I18N_LIBS) $(ICU_UC_LIBS)
+
+validator_test_SOURCES = unittest/validator_test.cc
+validator_test_CPPFLAGS = $(unittest_CPPFLAGS)
+validator_test_LDADD = $(TRAINING_LIBS) $(ICU_UC_LIBS)
+
+# for windows
+if T_WIN
+apiexample_test_LDADD += -lws2_32
+intsimdmatrix_test_LDADD += -lws2_32
+matrix_test_LDADD += -lws2_32
+if !DISABLED_LEGACY_ENGINE
+osd_test_LDADD += -lws2_32
+endif # !DISABLED_LEGACY_ENGINE
+loadlang_test_LDADD += -lws2_32
+endif
+
+EXTRA_apiexample_test_DEPENDENCIES = $(abs_top_builddir)/test/testing/phototest.tif
+EXTRA_apiexample_test_DEPENDENCIES += $(abs_top_builddir)/test/testing/phototest.txt
+
+$(abs_top_builddir)/test/testing/phototest.tif:
+ mkdir -p $(top_builddir)/test/testing
+ ln -s $(TESTING_DIR)/phototest.tif $(top_builddir)/test/testing/phototest.tif
+
+$(abs_top_builddir)/test/testing/phototest.txt:
+ mkdir -p $(top_builddir)/test/testing
+ ln -s $(TESTING_DIR)/phototest.txt $(top_builddir)/test/testing/phototest.txt
+
+# Some tests require a local tmp directory.
+
+$(check_PROGRAMS): | tmp
+
+tmp:
+ mkdir -p tmp
+
+# Some tests require a well defined set of the following font files.
+
+fonts = ae_Arab.ttf
+fonts += Arial_Bold_Italic.ttf
+fonts += DejaVuSans-ExtraLight.ttf
+fonts += Lohit-Hindi.ttf
+fonts += Times_New_Roman.ttf
+fonts += UnBatang.ttf
+fonts += Verdana.ttf
+
+# These tests depend on installed model files and fonts:
+#
+# apiexample_test baseapi_test lang_model_test layout_test
+# ligature_table_test loadlang_test lstm_recode_test lstm_squashed_test
+# lstm_test lstmtrainer_test mastertrainer_test osd_test
+# pagesegmode_test pango_font_info_test progress_test
+# recodebeam_test resultiterator_test stringrenderer_test
+# textlineprojection_test unicharcompress_test
+#
+# Instead of fine-tuned dependencies the following lines
+# simply require those dependencies for all tests.
+# That can be improved if necessary.
+
+$(check_PROGRAMS): | $(LANGDATA_DIR)
+$(check_PROGRAMS): | $(TESSDATA_DIR)
+$(check_PROGRAMS): | $(TESSDATA_BEST_DIR)
+$(check_PROGRAMS): | $(TESSDATA_FAST_DIR)
+$(check_PROGRAMS): | $(fonts:%=$(TESTING_DIR)/%)
+
+$(LANGDATA_DIR) $(TESSDATA_DIR) $(TESSDATA_BEST_DIR) $(TESSDATA_FAST_DIR):
+ @echo "Some unit tests require $@."
+ @echo "It can be installed manually by running this command:"
+ @echo " git clone https://github.com/tesseract-ocr/$$(basename $@).git $@"
+ @exit 1
+
+$(TESTING_DIR)/Arial_Bold_Italic.ttf:
+ curl -sSL -o Arial.exe https://sourceforge.net/projects/corefonts/files/the%20fonts/final/arial32.exe/download
+ cabextract -F Arialbi.TTF -q Arial.exe
+ rm Arial.exe
+ mv Arialbi.TTF $@
+
+$(TESTING_DIR)/DejaVuSans-ExtraLight.ttf:
+ curl -sSL http://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.tar.bz2 | \
+ tar -xjO dejavu-fonts-ttf-2.37/ttf/DejaVuSans-ExtraLight.ttf >$@
+
+$(TESTING_DIR)/Lohit-Hindi.ttf:
+ curl -sSL https://releases.pagure.org/lohit/lohit-hindi-ttf-2.4.3.tar.gz | \
+ tar -xzO lohit-hindi-ttf-2.4.3/Lohit-Hindi.ttf >$@
+
+$(TESTING_DIR)/Times_New_Roman.ttf:
+ curl -sSL -o Times.exe https://sourceforge.net/projects/corefonts/files/the%20fonts/final/times32.exe/download
+ cabextract -F Times.TTF -q Times.exe
+ rm Times.exe
+ mv Times.TTF $@
+
+$(TESTING_DIR)/UnBatang.ttf:
+ curl -sSL -o $@ https://salsa.debian.org/fonts-team/fonts-unfonts-core/-/raw/master/UnBatang.ttf
+
+$(TESTING_DIR)/Verdana.ttf:
+ curl -sSL -o Verdana.exe https://sourceforge.net/projects/corefonts/files/the%20fonts/final/verdan32.exe/download
+ cabextract -F Verdana.TTF -q Verdana.exe
+ rm Verdana.exe
+ mv Verdana.TTF $@
+
+$(TESTING_DIR)/ae_Arab.ttf:
+ curl -sSL -o $@ https://salsa.debian.org/fonts-team/fonts-arabeyes/-/raw/master/ae_Arab.ttf