tesseract-ocr / tesseract

Tesseract Open Source OCR Engine (main repository)
https://tesseract-ocr.github.io/
Apache License 2.0
59.57k stars 9.24k forks source link

5.0.0: build fails #3679

Closed kloczek closed 2 years ago

kloczek commented 2 years ago

cmake setup:

[tkloczko@ss-desktop x86_64-redhat-linux-gnu]$ cmake -L
CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
  become a fatal error in future CMake releases.

CMake Error: The source directory "/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
-- Cache values
BUILD_TESTS:BOOL=ON
BUILD_TRAINING_TOOLS:BOOL=ON
CMAKE_BUILD_TYPE:STRING=RelWithDebInfo
CMAKE_INSTALL_PREFIX:PATH=/usr
DISABLED_LEGACY_ENGINE:BOOL=OFF
DISABLE_ARCHIVE:BOOL=OFF
DISABLE_CURL:BOOL=OFF
ENABLE_LTO:BOOL=ON
FAST_FLOAT:BOOL=ON
GRAPHICS_DISABLED:BOOL=OFF
Leptonica_DIR:PATH=Leptonica_DIR-NOTFOUND
OPENMP_BUILD:BOOL=OFF
SW_BUILD:BOOL=OFF
TARGET_ARCHITECTURE:STRING=auto
USE_SYSTEM_ICU:BOOL=ON

And buuild fails in:

make[2]: Leaving directory '/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu'
make  -f src/training/CMakeFiles/classifier_tester.dir/build.make src/training/CMakeFiles/classifier_tester.dir/build
make[2]: Entering directory '/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu'
[ 82%] Linking CXX executable ../../bin/classifier_tester
cd /data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu/src/training && /usr/bin/cmake -E cmake_link_script CMakeFiles/classifier_tester.dir/link.txt --verbose=1
/usr/bin/g++ -O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none -DNDEBUG -Wl,-z,relro -Wl,--as-needed -Wl,--gc-sections -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -flto=auto -flto-partition=none -fuse-linker-plugin CMakeFiles/classifier_tester.dir/classifier_tester.cpp.o -o ../../bin/classifier_tester  -Wl,-rpath,/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu/src/training:/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu: libcommon_training.so ../../libtesseract.so.5.0.0 /usr/lib64/libarchive.so /usr/lib64/libcurl.so -llept
/usr/bin/ld: libcommon_training.so: undefined reference to `tesseract::Plumbing::AddToStack(tesseract::Network*)'
collect2: error: ld returned 1 exit status
make[2]: *** [src/training/CMakeFiles/classifier_tester.dir/build.make:104: bin/classifier_tester] Error 1
make[2]: Leaving directory '/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu'
make[1]: *** [CMakeFiles/Makefile2:272: src/training/CMakeFiles/classifier_tester.dir/all] Error 2
make[1]: Leaving directory '/data/home/tkloczko/rpmbuild/BUILD/tesseract-5.0.0/x86_64-redhat-linux-gnu'
make: *** [Makefile:139: all] Error 2
zdenop commented 2 years ago

I tried it on OpenSUSE linux and there is no problem. Please provide full information - not only error message.

kloczek commented 2 years ago

First I've been thinking that this issue is about removed by LTO symbol but that is not the case because even with disabled LTO I have the still the same error. (BTW ENABLE_LTO option can be removed because cmake handles LTO without any problems by just changeing content of the $CFLAGS, $CXFLAGS, $LDFLAGS, $AR, $NM and $RANLIB env variables)

I'm using Fedora gcc 11.2.1. Here is extracted part from generated by rpm build script which could be used to try reproduce the issue:

CFLAGS='-O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections'
CXXFLAGS='-O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections'
LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,--gc-sections -Wl,-z,now'
CC=/usr/bin/gcc
AR=/usr/bin/gcc-ar
NM=/usr/bin/gcc-nm
RANLIB=/usr/bin/gcc-ranlib
export CFLAGS CXXFLAGS FFLAGS FCFLAGS LDFLAGS CC CXX FC AR NM RANLIB
/usr/bin/cmake -B x86_64-redhat-linux-gnu -D BUILD_SHARED_LIBS=ON -D CMAKE_AR=/usr/bin/gcc-ar -D CMAKE_BUILD_TYPE=RelWithDebInfo -D CMAKE_C_FLAGS_RELEASE=-DNDEBUG -D CMAKE_CXX_FLAGS_RELEASE=-DNDEBUG -D CMAKE_Fortran_FLAGS_RELEASE=-DNDEBUG -D CMAKE_INSTALL_PREFIX=/usr -D CMAKE_NM=/usr/bin/gcc-nm -D CMAKE_RANLIB=/usr/bin/gcc-ranlib -D CMAKE_VERBOSE_MAKEFILE=ON -D INCLUDE_INSTALL_DIR=/usr/include -D LIB_INSTALL_DIR=/usr/lib64 -D LIB_SUFFIX=64 -D SHARE_INSTALL_PREFIX=/usr/share -D SYSCONF_INSTALL_DIR=/etc -S . -D BUILD_TESTS=ON -D CMAKE_INSTALL_LIBDIR=lib64 -D TESSDATA_PREFIX=/usr/share/tesseract -D USE_SYSTEM_ICU=ON
amitdo commented 2 years ago

Are you Fedora's Tesseract package maintainer? Did you try building with Autotutools?

kloczek commented 2 years ago

No I'm not Fedora's Tesseract package maintainer.

zdenop commented 2 years ago

Seems like problem with any customization of CFLAGS/CXXFLAGS/LDFLAGS... Can you just make clean build (cmake .. && make)?

kloczek commented 2 years ago

Hmm .. what you mean "clean build". I'm using exactly the same %cmake rpm macros across all packages which are using cmake

[tkloczko@ss-desktop SPECS]$ grep -w %cmake *.spec -l | wc -l
401

Does it mean that you've been able to reporoduce reported effect using scririp which I've provided?

kloczek commented 2 years ago

Nevertheless looks like it is issue with only one lbrary public symbol. I cannot fined anything specyfic in the cose which could make that tesseract::Plumbing::AddToStack non-public :/

zdenop commented 2 years ago

With clean build I mean this:

git clone --depth=1 https://github.com/tesseract-ocr/tesseract.git
cd tesseract
mkdir build & cd build
cmake ..
make
kloczek commented 2 years ago

It fails on

-- The C compiler identification is GNU 11.2.1
-- The CXX compiler identification is GNU 11.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
fatal: No names found, cannot describe anything.
Configuring tesseract version 5.0.0...
-- Setting build type to 'Release' as none was specified.
-- IPO / LTO supported
-- Performing Test COMPILER_SUPPORTS_MARCH_NATIVE
-- Performing Test COMPILER_SUPPORTS_MARCH_NATIVE - Success
CMAKE_SYSTEM_PROCESSOR=<x86_64>
CMake Warning (dev) in CMakeLists.txt:
  A logical block opening on the line

    /data/home/tkloczko/rpmbuild/g2v/SPECS/tesseract/CMakeLists.txt:152 (if)

  closes on the line

    /data/home/tkloczko/rpmbuild/g2v/SPECS/tesseract/CMakeLists.txt:236 (endif)

  with mis-matching arguments.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- Performing Test HAVE_AVX
-- Performing Test HAVE_AVX - Success
-- Performing Test HAVE_AVX2
-- Performing Test HAVE_AVX2 - Success
-- Performing Test HAVE_FMA
-- Performing Test HAVE_FMA - Success
-- Performing Test HAVE_SSE4_1
-- Performing Test HAVE_SSE4_1 - Success
-- target changed from "" to "auto"
-- Detected CPU: zen
-- Performing Test check_cxx_compiler_flag__march_znver1
-- Performing Test check_cxx_compiler_flag__march_znver1 - Success
-- Performing Test check_cxx_compiler_flag__msse2
-- Performing Test check_cxx_compiler_flag__msse2 - Success
-- Performing Test check_cxx_compiler_flag__msse3
-- Performing Test check_cxx_compiler_flag__msse3 - Success
-- Looking for C++ include pmmintrin.h
-- Looking for C++ include pmmintrin.h - found
-- Performing Test check_cxx_compiler_flag__mssse3
-- Performing Test check_cxx_compiler_flag__mssse3 - Success
-- Looking for C++ include tmmintrin.h
-- Looking for C++ include tmmintrin.h - found
-- Performing Test check_cxx_compiler_flag__msse4_1
-- Performing Test check_cxx_compiler_flag__msse4_1 - Success
-- Looking for C++ include smmintrin.h
-- Looking for C++ include smmintrin.h - found
-- Performing Test check_cxx_compiler_flag__msse4_2
-- Performing Test check_cxx_compiler_flag__msse4_2 - Success
-- Performing Test check_cxx_compiler_flag__msse4a
-- Performing Test check_cxx_compiler_flag__msse4a - Success
-- Looking for C++ include ammintrin.h
-- Looking for C++ include ammintrin.h - found
-- Performing Test check_cxx_compiler_flag__mavx
-- Performing Test check_cxx_compiler_flag__mavx - Success
-- Looking for C++ include immintrin.h
-- Looking for C++ include immintrin.h - found
-- Performing Test check_cxx_compiler_flag__mfma
-- Performing Test check_cxx_compiler_flag__mfma - Success
-- Performing Test check_cxx_compiler_flag__mbmi2
-- Performing Test check_cxx_compiler_flag__mbmi2 - Success
-- Performing Test check_cxx_compiler_flag__mavx2
-- Performing Test check_cxx_compiler_flag__mavx2 - Success
-- Performing Test check_cxx_compiler_flag__mno_xop
-- Performing Test check_cxx_compiler_flag__mno_xop - Success
-- Performing Test check_cxx_compiler_flag__mno_fma4
-- Performing Test check_cxx_compiler_flag__mno_fma4 - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512f
-- Performing Test check_cxx_compiler_flag__mno_avx512f - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512vl
-- Performing Test check_cxx_compiler_flag__mno_avx512vl - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512pf
-- Performing Test check_cxx_compiler_flag__mno_avx512pf - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512er
-- Performing Test check_cxx_compiler_flag__mno_avx512er - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512cd
-- Performing Test check_cxx_compiler_flag__mno_avx512cd - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512dq
-- Performing Test check_cxx_compiler_flag__mno_avx512dq - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512bw
-- Performing Test check_cxx_compiler_flag__mno_avx512bw - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512ifma
-- Performing Test check_cxx_compiler_flag__mno_avx512ifma - Success
-- Performing Test check_cxx_compiler_flag__mno_avx512vbmi
-- Performing Test check_cxx_compiler_flag__mno_avx512vbmi - Success
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0")
-- Could NOT find Leptonica (missing: Leptonica_DIR)
-- Checking for module 'lept>=1.74'
--   Found lept, version 1.82.0
-- Found TIFF: /usr/lib64/libtiff.so (found version "4.3.0")
-- Found LibArchive: /usr/lib64/libarchive.so (found version "3.5.2")
-- Found CURL: /usr/lib64/libcurl.so (found version "7.80.0")
-- Looking for include file dlfcn.h
-- Looking for include file dlfcn.h - found
-- Looking for include file inttypes.h
-- Looking for include file inttypes.h - found
-- Looking for include file memory.h
-- Looking for include file memory.h - found
-- Looking for include file stdint.h
-- Looking for include file stdint.h - found
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file string.h
-- Looking for include file string.h - found
-- Looking for include file sys/stat.h
-- Looking for include file sys/stat.h - found
-- Looking for include file sys/types.h
-- Looking for include file sys/types.h - found
-- Looking for include file unistd.h
-- Looking for include file unistd.h - found
-- Looking for include file cairo/cairo-version.h
-- Looking for include file cairo/cairo-version.h - found
-- Looking for include file CL/cl.h
-- Looking for include file CL/cl.h - found
-- Looking for include file OpenCL/cl.h
-- Looking for include file OpenCL/cl.h - not found
-- Looking for include file pango-1.0/pango/pango-features.h
-- Looking for include file pango-1.0/pango/pango-features.h - found
-- Looking for include file unicode/uchar.h
-- Looking for include file unicode/uchar.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of long long int
-- Check size of long long int - done
-- Check size of wchar_t
-- Check size of wchar_t - done
--
-- General configuration for Tesseract 5.0.0
-- --------------------------------------------------------
-- Build type: Release
-- Compiler: GNU
-- Used standard: C++17
-- CXX compiler options:  -DNDEBUG
-- Compile definitions = HAVE_AVX;HAVE_AVX2;HAVE_FMA;HAVE_SSE4_1;CMAKE_BUILD;HAVE_CONFIG_H
-- Linker options:
-- Install directory: /usr/local
-- Architecture flags: -march=znver1;-msse2;-msse3;-mssse3;-msse4.1;-msse4.2;-msse4a;-mavx;-mfma;-mbmi2;-mavx2;-mno-xop;-mno-fma4;-mno-avx512f;-mno-avx512vl;-mno-avx512pf;-mno-avx512er;-mno-avx512cd;-mno-avx512dq;-mno-avx512bw;-mno-avx512ifma;-mno-avx512vbmi
-- Vector unit list: sse2;sse3;ssse3;sse4.1;sse4.2;sse4a;avx;fma;bmi2;avx2
-- HAVE_AVX: 1
-- HAVE_AVX2: 1
-- HAVE_FMA: 1
-- HAVE_SSE4_1: 1
-- MARCH_NATIVE_OPT: ON
-- HAVE_NEON: FALSE
-- Link-time optimization: FALSE
-- --------------------------------------------------------
-- Build with sw [SW_BUILD]: OFF
-- Build with openmp support [OPENMP_BUILD]: OFF
-- Build with libarchive support [HAVE_LIBARCHIVE]: ON
-- Build with libcurl support [HAVE_LIBCURL]: ON
-- Enable float for LSTM [FAST_FLOAT]: ON
-- Disable disable graphics (ScrollView) [GRAPHICS_DISABLED]: OFF
-- Disable the legacy OCR engine [DISABLED_LEGACY_ENGINE]: OFF
-- Build training tools [BUILD_TRAINING_TOOLS]: ON
-- Build tests [BUILD_TESTS]: OFF
-- Use system ICU Library [USE_SYSTEM_ICU]: OFF
-- --------------------------------------------------------
--
-- Checking for modules 'icu-uc;icu-i18n'
--   Found icu-uc, version 69.1
--   Found icu-i18n, version 69.1
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Checking for module 'pango>=1.38.0'
--   Found pango, version 1.50.1
-- Checking for module 'cairo'
--   Found cairo, version 1.17.4
-- Checking for module 'pangoft2'
--   Found pangoft2, version 1.50.1
-- Checking for module 'pangocairo'
--   Found pangocairo, version 1.50.1
-- Checking for module 'fontconfig'
--   Found fontconfig, version 2.13.94
-- Configuring done
-- Generating done
-- Build files have been written to: /data/home/tkloczko/rpmbuild/g2v/SPECS/tesseract/build
Consolidate compiler generated dependencies of target libtesseract
[  0%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/equationdetect.cpp.o
[  1%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/control.cpp.o
[  1%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/fixxht.cpp.o
[  2%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/fixspace.cpp.o
[  3%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/ltrresultiterator.cpp.o
[  3%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/docqual.cpp.o
[  3%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/osdetect.cpp.o
[  3%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/mutableiterator.cpp.o
[  3%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/pageiterator.cpp.o
[  4%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/pagesegmain.cpp.o
[  4%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/output.cpp.o
[  4%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/linerec.cpp.o
[  5%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/pagewalk.cpp.o
[  5%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/par_control.cpp.o
[  5%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/paragraphs.cpp.o
[  6%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/paramsd.cpp.o
[  6%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/pgedit.cpp.o
[  7%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/recogtraining.cpp.o
[  7%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/reject.cpp.o
[  7%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/resultiterator.cpp.o
[  8%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/superscript.cpp.o
[  8%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/tessbox.cpp.o
[  8%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/tessedit.cpp.o
[  9%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/tesseractclass.cpp.o
[  9%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/tessvars.cpp.o
[  9%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/tfacepp.cpp.o
[ 10%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/thresholder.cpp.o
[ 10%] Building CXX object CMakeFiles/libtesseract.dir/src/ccmain/werdit.cpp.o
[ 10%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/blamer.cpp.o
[ 11%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/blobbox.cpp.o
[ 11%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/blobs.cpp.o
[ 11%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/blread.cpp.o
[ 12%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/boxread.cpp.o
[ 12%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/boxword.cpp.o
[ 12%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/ccstruct.cpp.o
[ 13%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/coutln.cpp.o
[ 13%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/detlinefit.cpp.o
[ 14%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/dppoint.cpp.o
[ 14%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/fontinfo.cpp.o
[ 14%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/image.cpp.o
[ 15%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/imagedata.cpp.o
[ 15%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/linlsq.cpp.o
[ 15%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/matrix.cpp.o
[ 16%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/mod128.cpp.o
[ 16%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/normalis.cpp.o
[ 16%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/ocrblock.cpp.o
[ 17%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/ocrpara.cpp.o
[ 17%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/ocrrow.cpp.o
[ 17%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/otsuthr.cpp.o
[ 18%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/pageres.cpp.o
[ 18%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/params_training_featdef.cpp.o
[ 18%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/pdblock.cpp.o
[ 19%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/points.cpp.o
[ 19%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/polyaprx.cpp.o
[ 19%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/polyblk.cpp.o
[ 20%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/quadlsq.cpp.o
[ 20%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/quspline.cpp.o
[ 21%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/ratngs.cpp.o
[ 21%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/rect.cpp.o
[ 21%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/rejctmap.cpp.o
[ 22%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/seam.cpp.o
[ 22%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/split.cpp.o
[ 22%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/statistc.cpp.o
[ 23%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/stepblob.cpp.o
[ 23%] Building CXX object CMakeFiles/libtesseract.dir/src/ccstruct/werd.cpp.o
[ 23%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/ambigs.cpp.o
[ 24%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/bitvector.cpp.o
[ 24%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/ccutil.cpp.o
[ 24%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/clst.cpp.o
[ 25%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/elst.cpp.o
[ 25%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/elst2.cpp.o
[ 25%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/errcode.cpp.o
[ 26%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/indexmapbidi.cpp.o
[ 26%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/params.cpp.o
[ 26%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/mainblk.cpp.o
[ 27%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/scanutils.cpp.o
[ 27%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/serialis.cpp.o
[ 28%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/tessdatamanager.cpp.o
[ 28%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/tprintf.cpp.o
[ 28%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/unichar.cpp.o
[ 29%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/unicharcompress.cpp.o
[ 29%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/unicharmap.cpp.o
[ 30%] Building CXX object CMakeFiles/libtesseract.dir/src/ccutil/unicharset.cpp.o
[ 30%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/adaptive.cpp.o
[ 30%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/adaptmatch.cpp.o
[ 30%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/blobclass.cpp.o
[ 31%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/classify.cpp.o
[ 31%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/cluster.cpp.o
[ 31%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/clusttool.cpp.o
[ 32%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/cutoffs.cpp.o
[ 32%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/featdefs.cpp.o
[ 32%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/float2int.cpp.o
[ 33%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/fpoint.cpp.o
[ 33%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/intfeaturespace.cpp.o
[ 33%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/intfx.cpp.o
[ 34%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/intmatcher.cpp.o
[ 34%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/intproto.cpp.o
[ 35%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/kdtree.cpp.o
[ 35%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/mf.cpp.o
[ 35%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/mfoutline.cpp.o
[ 36%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/mfx.cpp.o
[ 36%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/normfeat.cpp.o
[ 36%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/normmatch.cpp.o
[ 37%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/ocrfeatures.cpp.o
[ 37%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/outfeat.cpp.o
[ 37%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/picofeat.cpp.o
[ 38%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/protos.cpp.o
[ 38%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/shapeclassifier.cpp.o
[ 38%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/shapetable.cpp.o
[ 39%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/tessclassifier.cpp.o
[ 39%] Building CXX object CMakeFiles/libtesseract.dir/src/classify/trainingsample.cpp.o
[ 39%] Building CXX object CMakeFiles/libtesseract.dir/src/cutil/oldlist.cpp.o
[ 40%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/context.cpp.o
[ 40%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/dawg.cpp.o
[ 40%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/dawg_cache.cpp.o
[ 41%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/dict.cpp.o
[ 41%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/hyphen.cpp.o
[ 42%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/permdawg.cpp.o
[ 42%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/stopper.cpp.o
[ 42%] Building CXX object CMakeFiles/libtesseract.dir/src/dict/trie.cpp.o
[ 43%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/convolve.cpp.o
[ 43%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/fullyconnected.cpp.o
[ 43%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/functions.cpp.o
[ 44%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/input.cpp.o
[ 44%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/lstm.cpp.o
[ 44%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/lstmrecognizer.cpp.o
[ 45%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/maxpool.cpp.o
[ 45%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/network.cpp.o
[ 45%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/networkio.cpp.o
[ 46%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/parallel.cpp.o
[ 46%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/plumbing.cpp.o
[ 46%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/recodebeam.cpp.o
[ 47%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/reconfig.cpp.o
[ 47%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/reversed.cpp.o
[ 47%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/series.cpp.o
[ 48%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/stridemap.cpp.o
[ 48%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/tfnetwork.cpp.o
[ 48%] Building CXX object CMakeFiles/libtesseract.dir/src/lstm/weightmatrix.cpp.o
[ 49%] Building CXX object CMakeFiles/libtesseract.dir/src/opencl/openclwrapper.cpp.o
[ 49%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/alignedblob.cpp.o
[ 50%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/baselinedetect.cpp.o
[ 50%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/bbgrid.cpp.o
[ 50%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/blkocc.cpp.o
[ 51%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/blobgrid.cpp.o
[ 51%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/ccnontextdetect.cpp.o
[ 51%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/cjkpitch.cpp.o
[ 52%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/colfind.cpp.o
[ 52%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/colpartition.cpp.o
[ 52%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/colpartitiongrid.cpp.o
[ 53%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/colpartitionset.cpp.o
[ 53%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/devanagari_processing.cpp.o
[ 53%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/drawtord.cpp.o
[ 54%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/edgblob.cpp.o
[ 54%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/edgloop.cpp.o
[ 54%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/equationdetectbase.cpp.o
[ 55%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/fpchop.cpp.o
[ 55%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/gap_map.cpp.o
[ 55%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/imagefind.cpp.o
[ 56%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/linefind.cpp.o
[ 56%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/makerow.cpp.o
[ 57%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/oldbasel.cpp.o
[ 57%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/pithsync.cpp.o
[ 57%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/pitsync1.cpp.o
[ 58%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/scanedg.cpp.o
[ 58%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/sortflts.cpp.o
[ 58%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/strokewidth.cpp.o
[ 59%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tabfind.cpp.o
[ 59%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tablefind.cpp.o
[ 59%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tablerecog.cpp.o
[ 60%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tabvector.cpp.o
[ 60%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/textlineprojection.cpp.o
[ 60%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/textord.cpp.o
[ 61%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/topitch.cpp.o
[ 61%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tordmain.cpp.o
[ 61%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tospace.cpp.o
[ 62%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/tovars.cpp.o
[ 62%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/underlin.cpp.o
[ 62%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/wordseg.cpp.o
[ 63%] Building CXX object CMakeFiles/libtesseract.dir/src/textord/workingpartset.cpp.o
[ 63%] Building CXX object CMakeFiles/libtesseract.dir/src/viewer/scrollview.cpp.o
[ 64%] Building CXX object CMakeFiles/libtesseract.dir/src/viewer/svmnode.cpp.o
[ 64%] Building CXX object CMakeFiles/libtesseract.dir/src/viewer/svpaint.cpp.o
[ 64%] Building CXX object CMakeFiles/libtesseract.dir/src/viewer/svutil.cpp.o
[ 65%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/associate.cpp.o
[ 65%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/chop.cpp.o
[ 65%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/chopper.cpp.o
[ 66%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/drawfx.cpp.o
[ 66%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/findseam.cpp.o
[ 66%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/gradechop.cpp.o
[ 67%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/language_model.cpp.o
[ 67%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/lm_consistency.cpp.o
[ 68%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/lm_state.cpp.o
[ 68%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/lm_pain_points.cpp.o
[ 68%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/outlines.cpp.o
[ 68%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/params_model.cpp.o
[ 69%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/pieces.cpp.o
[ 69%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/plotedges.cpp.o
[ 69%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/render.cpp.o
[ 70%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/segsearch.cpp.o
[ 70%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/tface.cpp.o
[ 71%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/wordclass.cpp.o
[ 71%] Building CXX object CMakeFiles/libtesseract.dir/src/wordrec/wordrec.cpp.o
[ 71%] Building CXX object CMakeFiles/libtesseract.dir/src/api/baseapi.cpp.o
[ 72%] Building CXX object CMakeFiles/libtesseract.dir/src/api/capi.cpp.o
[ 72%] Building CXX object CMakeFiles/libtesseract.dir/src/api/renderer.cpp.o
[ 72%] Building CXX object CMakeFiles/libtesseract.dir/src/api/altorenderer.cpp.o
[ 73%] Building CXX object CMakeFiles/libtesseract.dir/src/api/hocrrenderer.cpp.o
[ 73%] Building CXX object CMakeFiles/libtesseract.dir/src/api/lstmboxrenderer.cpp.o
[ 73%] Building CXX object CMakeFiles/libtesseract.dir/src/api/pdfrenderer.cpp.o
[ 74%] Building CXX object CMakeFiles/libtesseract.dir/src/api/wordstrboxrenderer.cpp.o
[ 74%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/dotproduct.cpp.o
[ 74%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/simddetect.cpp.o
[ 75%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/intsimdmatrix.cpp.o
[ 75%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/dotproductavx.cpp.o
[ 75%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/intsimdmatrixavx2.cpp.o
[ 76%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/dotproductfma.cpp.o
[ 76%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/dotproductsse.cpp.o
[ 76%] Building CXX object CMakeFiles/libtesseract.dir/src/arch/intsimdmatrixsse.cpp.o
[ 77%] Linking CXX static library libtesseract.a
[ 77%] Built target libtesseract
[ 77%] Building CXX object src/training/CMakeFiles/common_training.dir/common/networkbuilder.cpp.o
[ 78%] Building CXX object CMakeFiles/tesseract.dir/src/tesseract.cpp.o
[ 79%] Building CXX object src/training/CMakeFiles/common_training.dir/common/commontraining.cpp.o
[ 80%] Building CXX object src/training/CMakeFiles/common_training.dir/common/intfeaturedist.cpp.o
[ 80%] Building CXX object src/training/CMakeFiles/common_training.dir/common/commandlineflags.cpp.o
[ 80%] Building CXX object src/training/CMakeFiles/common_training.dir/common/errorcounter.cpp.o
[ 80%] Building CXX object src/training/CMakeFiles/common_training.dir/common/sampleiterator.cpp.o
[ 80%] Building CXX object src/training/CMakeFiles/common_training.dir/common/intfeaturemap.cpp.o
[ 81%] Building CXX object src/training/CMakeFiles/common_training.dir/common/mastertrainer.cpp.o
[ 81%] Building CXX object src/training/CMakeFiles/common_training.dir/common/trainingsampleset.cpp.o
[ 81%] Building CXX object src/training/CMakeFiles/common_training.dir/common/ctc.cpp.o
[ 82%] Linking CXX static library libcommon_training.a
[ 82%] Linking CXX executable bin/tesseract
[ 82%] Built target common_training
[ 83%] Building CXX object src/training/CMakeFiles/classifier_tester.dir/classifier_tester.cpp.o
[ 83%] Building CXX object src/training/CMakeFiles/ambiguous_words.dir/ambiguous_words.cpp.o
[ 83%] Building CXX object src/training/CMakeFiles/shapeclustering.dir/shapeclustering.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/merge_unicharsets.dir/merge_unicharsets.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/cntraining.dir/cntraining.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/wordlist2dawg.dir/wordlist2dawg.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/combine_tessdata.dir/combine_tessdata.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/fileio.cpp.o
[ 86%] Building CXX object src/training/CMakeFiles/mftraining.dir/mergenf.cpp.o
[ 85%] Building CXX object src/training/CMakeFiles/mftraining.dir/mftraining.cpp.o
[ 86%] Building CXX object src/training/CMakeFiles/dawg2wordlist.dir/dawg2wordlist.cpp.o
[ 87%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/icuerrorcode.cpp.o
[ 87%] Linking CXX executable ../../bin/merge_unicharsets
[ 88%] Linking CXX executable ../../bin/cntraining
[ 89%] Linking CXX executable ../../bin/wordlist2dawg
[ 90%] Linking CXX executable ../../bin/dawg2wordlist
[ 90%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/lang_model_helpers.cpp.o
[ 90%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/lstmtester.cpp.o
[ 90%] Linking CXX executable ../../bin/mftraining
[ 90%] Linking CXX executable ../../bin/shapeclustering
[ 90%] Built target tesseract
[ 90%] Linking CXX executable ../../bin/ambiguous_words
[ 90%] Linking CXX executable ../../bin/combine_tessdata
[ 91%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/lstmtrainer.cpp.o
[ 91%] Linking CXX executable ../../bin/classifier_tester
[ 91%] Built target merge_unicharsets
[ 91%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/normstrngs.cpp.o
[ 91%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/unicharset_training_utils.cpp.o
[ 91%] Built target cntraining
[ 92%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validate_grapheme.cpp.o
[ 92%] Built target wordlist2dawg
[ 92%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validate_indic.cpp.o
[ 92%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validate_javanese.cpp.o
[ 92%] Built target combine_tessdata
[ 93%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validate_khmer.cpp.o
[ 93%] Built target mftraining
[ 93%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validate_myanmar.cpp.o
[ 93%] Built target ambiguous_words
[ 93%] Building CXX object src/training/CMakeFiles/unicharset_training.dir/unicharset/validator.cpp.o
[ 93%] Built target shapeclustering
[ 93%] Built target dawg2wordlist
[ 93%] Built target classifier_tester
[ 94%] Linking CXX static library libunicharset_training.a
[ 94%] Built target unicharset_training
[ 94%] Building CXX object src/training/CMakeFiles/combine_lang_model.dir/combine_lang_model.cpp.o
[ 94%] Building CXX object src/training/CMakeFiles/pango_training.dir/pango/pango_font_info.cpp.o
[ 94%] Building CXX object src/training/CMakeFiles/lstmtraining.dir/lstmtraining.cpp.o
[ 94%] Building CXX object src/training/CMakeFiles/lstmeval.dir/lstmeval.cpp.o
[ 94%] Building CXX object src/training/CMakeFiles/pango_training.dir/pango/boxchar.cpp.o
[ 96%] Building CXX object src/training/CMakeFiles/unicharset_extractor.dir/unicharset_extractor.cpp.o
[ 96%] Building CXX object src/training/CMakeFiles/pango_training.dir/pango/ligature_table.cpp.o
[ 96%] Building CXX object src/training/CMakeFiles/pango_training.dir/pango/stringrenderer.cpp.o
[ 97%] Building CXX object src/training/CMakeFiles/pango_training.dir/pango/tlog.cpp.o
[ 97%] Building CXX object src/training/CMakeFiles/set_unicharset_properties.dir/set_unicharset_properties.cpp.o
In file included from /data/home/tkloczko/rpmbuild/g2v/SPECS/tesseract/src/training/pango/pango_font_info.cpp:39:
/usr/include/pango-1.0/pango/pangofc-font.h:35:10: fatal error: ft2build.h: No such file or directory
   35 | #include <ft2build.h>
      |          ^~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/training/CMakeFiles/pango_training.dir/build.make:104: src/training/CMakeFiles/pango_training.dir/pango/pango_font_info.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 97%] Linking CXX executable ../../bin/combine_lang_model
[ 97%] Linking CXX executable ../../bin/unicharset_extractor
[ 98%] Linking CXX executable ../../bin/set_unicharset_properties
[ 99%] Linking CXX executable ../../bin/lstmeval
[ 99%] Linking CXX executable ../../bin/lstmtraining
make[1]: *** [CMakeFiles/Makefile2:653: src/training/CMakeFiles/pango_training.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 99%] Built target combine_lang_model
[ 99%] Built target unicharset_extractor
[ 99%] Built target set_unicharset_properties
[ 99%] Built target lstmeval
[ 99%] Built target lstmtraining
make: *** [Makefile:136: all] Error 2
kloczek commented 2 years ago
[tkloczko@ss-desktop build]$ rpm -qal | grep ft2build.h
/usr/include/freetype2/ft2build.h
[tkloczko@ss-desktop build]$ pkg-config --cflags freetype2
-I/usr/include/freetype2
zdenop commented 2 years ago

So classifier_tester was built and linked - the problem must be in rpm build script (outside of tesseract). I will have a look at how OpenSUSE gets info about location of ft2build.h.

kloczek commented 2 years ago

Here is the fix for pango:

--- a/src/training/CMakeLists.txt~      2021-12-17 11:00:16.000000000 +0000
+++ b/src/training/CMakeLists.txt       2021-12-17 11:21:12.056943863 +0000
@@ -297,7 +297,7 @@
 if (PKG_CONFIG_FOUND OR SW_BUILD)

 if (PKG_CONFIG_FOUND)
-pkg_check_modules(Pango REQUIRED pango>=1.38.0)
+pkg_check_modules(Pango REQUIRED pangoft2>=1.38.0)
 pkg_check_modules(Cairo REQUIRED cairo)
 pkg_check_modules(PangoFt2 REQUIRED pangoft2)
 pkg_check_modules(PangoCairo REQUIRED pangocairo)

Fix for missing symbol is in Fedora: https://src.fedoraproject.org/rpms/tesseract/raw/999433700af7345994ea2ccaa7e40076e1caebdd/f/tesseract_api.patch Here is 3rd patch to use standard cmake GNUInstallDirs module which allow use standard install paths;

--- a/CMakeLists.txt~   2021-12-17 11:15:45.750113296 +0000
+++ b/CMakeLists.txt    2021-12-17 11:14:24.000404153 +0000
@@ -1,6 +1,7 @@
 cmake_minimum_required (VERSION 3.0.0)

 include (utils.cmake)
+include (GNUInstallDirs)

 disallow_intree_builds()

@@ -55,14 +56,14 @@

 if (UTF8PROC_INSTALL)
   include(GNUInstallDirs)
-  install(FILES utf8proc.h DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
+  install(FILES utf8proc.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
   install(TARGETS utf8proc
-    ARCHIVE DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}"
-    LIBRARY DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}"
-    RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
   )
   configure_file(libutf8proc.pc.cmakein libutf8proc.pc @ONLY)
-  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libutf8proc.pc" DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig")
+  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libutf8proc.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 endif()

 if(UTF8PROC_ENABLE_TESTING)

Please let me know if you want those two patches as PR.

It is yet another issue. When is used BUILD_TESTS=ON you are including googletest git repo instead use system installed gtest libraries.

zdenop commented 2 years ago

Yes, please send it as 2 separate PR, so it can be checked by GH action.

Regarding your fist patch -I think it should be like this:

pkg_check_modules(Pango REQUIRED pango>=1.38.0)
pkg_check_modules(Cairo REQUIRED cairo)
- pkg_check_modules(PangoFt2 REQUIRED pangoft2)
+ pkg_check_modules(PangoFt2 REQUIRED pangoft2>=1.38.0)
 pkg_check_modules(PangoCairo REQUIRED pangocairo)

Can you test it on Fedora?

kloczek commented 2 years ago

I'm not using fedora.

kloczek commented 2 years ago

Regarding your fist patch -I think it should be like this:

pkg_check_modules(Pango REQUIRED pango>=1.38.0)
pkg_check_modules(Cairo REQUIRED cairo)
- pkg_check_modules(PangoFt2 REQUIRED pangoft2)
+ pkg_check_modules(PangoFt2 REQUIRED pangoft2>=1.38.0)
 pkg_check_modules(PangoCairo REQUIRED pangocairo)

Can you test it on Fedora?

This is not matter minimum version pangoft2.

[tkloczko@ss-desktop SPECS]$ pkg-config --cflags pangoft2
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2
[tkloczko@ss-desktop SPECS]$ pkg-config --cflags pango
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/harfbuzz

More cmake issues:

kloczek commented 2 years ago

I'm reverting my build procedure to GNU auto tools. cmake is not finished and/or broken at the moment.

However look slike GNU auto tools suffers sim,illar issues with test suit abcause it tries to compile google test submodule ainstead checking (using pkg-config) is gtest available. Buldling other projects is not good habit ..

kloczek commented 2 years ago

And yet another small detail. Compile time warnings:

In file included from /usr/include/CL/cl.h:20,
                 from ./src/opencl/openclwrapper.h:30,
                 from src/tesseract.cpp:38:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
In file included from /usr/include/CL/cl.h:20,
                 from ./src/opencl/openclwrapper.h:30,
                 from src/api/baseapi.cpp:45:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
In file included from /usr/include/CL/cl.h:20,
                 from ./src/opencl/openclwrapper.h:30,
                 from src/ccmain/thresholder.cpp:24:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
In file included from /usr/include/CL/cl.h:20,
                 from ./src/opencl/openclwrapper.h:30,
                 from src/ccstruct/otsuthr.cpp:25:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
In file included from /usr/include/CL/cl.h:20,
                 from ./src/opencl/openclwrapper.h:30,
                 from src/textord/linefind.cpp:31:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
src/textord/linefind.cpp: In static member function 'static void tesseract::LineFinder::GetLineMasks(int, tesseract::Image, tesseract::Image*, tesseract::Image*, tesseract::Image*, tesseract::Image*, tesseract::Image*, tesseract::Image*, Pixa*)':
src/textord/linefind.cpp:579:9: warning: unused variable 'clStatus' [-Wunused-variable]
  579 |     int clStatus =
      |         ^~~~~~~~
In file included from /usr/include/CL/cl.h:20,
                 from src/opencl/openclwrapper.h:30,
                 from src/opencl/openclwrapper.cpp:23:
/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)'
   22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)")
      |                                                                                                        ^
src/opencl/openclwrapper.cpp: In function 'tesseract::ds_status tesseract::initDSProfile(tesseract::ds_profile**, const char*)':
src/opencl/openclwrapper.cpp:166:9: warning: 'void* memset(void*, int, size_t)' clearing an object of type 'struct tesseract::ds_profile' with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]
  166 |   memset(profile, 0, sizeof(ds_profile));
      |   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/opencl/openclwrapper.cpp:105:8: note: 'struct tesseract::ds_profile' declared here
  105 | struct ds_profile {
      |        ^~~~~~~~~~
src/opencl/openclwrapper.cpp: In function 'void tesseract::populateGPUEnvFromDevice(tesseract::GPUEnv*, cl_device_id)':
src/opencl/openclwrapper.cpp:600:27: warning: '_cl_command_queue* clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*)' is deprecated [-Wdeprecated-declarations]
  600 |       clCreateCommandQueue(gpuInfo->mpContext, gpuInfo->mpDevID, queueProperties, &clStatus);
      |       ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/opencl/openclwrapper.h:30,
                 from src/opencl/openclwrapper.cpp:23:
/usr/include/CL/cl.h:1906:1: note: declared here
 1906 | clCreateCommandQueue(cl_context                     context,
      | ^~~~~~~~~~~~~~~~~~~~
src/opencl/openclwrapper.cpp: In static member function 'static int tesseract::OpenclDevice::HistogramRectOCL(void*, int, int, int, int, int, int, int, int*)':
src/opencl/openclwrapper.cpp:1594:10: warning: unused variable 'atomicSyncBuffer' [-Wunused-variable]
 1594 |   cl_mem atomicSyncBuffer =
      |          ^~~~~~~~~~~~~~~~
src/opencl/openclwrapper.cpp: In function 'double tesseract::histogramRectMicroBench(tesseract::GPUEnv*, tesseract::TessScoreEvaluationInputData, tesseract::ds_device_type)':
src/opencl/openclwrapper.cpp:1997:9: warning: unused variable 'retVal' [-Wunused-variable]
 1997 |     int retVal = OpenclDevice::HistogramRectOCL(input.imageData, input.numChannels, bytes_per_line,
      |         ^~~~~~
src/opencl/openclwrapper.cpp: In function 'double tesseract::thresholdRectToPixMicroBench(tesseract::GPUEnv*, tesseract::TessScoreEvaluationInputData, tesseract::ds_device_type)':
src/opencl/openclwrapper.cpp:2116:9: warning: unused variable 'retVal' [-Wunused-variable]
 2116 |     int retVal = OpenclDevice::ThresholdRectToPixOCL(
      |         ^~~~~~
src/opencl/openclwrapper.cpp: In static member function 'static tesseract::ds_device tesseract::OpenclDevice::getDeviceSelection()':
src/opencl/openclwrapper.cpp:2415:56: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
 2415 |         if (overrideDeviceIdx > 0 && overrideDeviceIdx <= profile->numDevices) {
      |                                      ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
src/opencl/openclwrapper.cpp:2443:38: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
 2443 |       selectedDevice.oclDeviceName = "(null)";
      |                                      ^~~~~~~~
kloczek commented 2 years ago

Just in case .. I'm not trying to critiocize yir work. What I;ve mention is more like ToDo list for 5.0.1 :)

Cheers

zdenop commented 2 years ago

Some notes for clarification:

  1. OpenCL is not supported - search issue tracker for an explanation.
  2. AFAIR cmake was primarily created for Windows as autotools is not available there, Nobody cares about manpages and for configs installation (I expect this is what you mean by $(datadir}/tesseract resources) I made an explanation here - I am not sure that current autotools install process is correct. Training tools are not built on windows with cmake as building e.g. pango on Windows is not easy.
  3. cmake build is working as expected. As I already mention it works without problem on openSUSE. I also tried it now on raspberry pi ("Raspbian GNU/Linux 10 (buster)) - no problem. And cmake build is automatically tested. You can check by yourself: https://github.com/tesseract-ocr/tesseract/actions/runs/1589437109.
  4. This is a community project. We share what we create/improve. If you want to run it on your system, you should contribute changes specific to your system. Do not expect somebody else will fix it.
stweil commented 2 years ago

it tries to compile google test submodule instead checking (using pkg-config) is gtest available

It should be possible to use an installed googletest on Linux hosts, but the current solution would still be needed for MacOS. Homebrew on MacOS has a googletest formula which conflicts with nss:

Error: Cannot install googletest because conflicting formulae are installed.
  nss: because both install `libgtest.a`

Debian has a package libgtest-dev which also installs the googletest 1.10.0 sources. Why would it be better to require an installation of those packages (which typically are not preinstalled) instead of using the existing Git submodule?

kloczek commented 2 years ago

Why would it be better to require an installation of those packages (which typically are not preinstalled) instead of using the existing Git submodule?

Do not waste time on compile those binaries.

If some MacOS gtest binaries have some issues it is the problem of those distributed binaries .. not the tesseract, Isn't it?

stweil commented 2 years ago

Do not waste time on compile those binaries.

time nohup make libgtest.la libgtest_main.la libgmock.la libgmock_main.la
nohup: ignoring input and appending output to 'nohup.out'

real    0m26.839s
user    0m25.440s
sys 0m1.426s

The googletest files take less than 30 seconds to compile (single threaded), and only once for a fresh build. This looks negligible compared to the total time for make check.

kloczek commented 2 years ago

The googletest files take less than 30 seconds to compile (single threaded), and only once for a fresh build.

So how long takes to compile other libratriues used by tesseract?🤔 Why not they are included in tesseract source tree?😱

stweil commented 2 years ago

@kloczek, your comment is not helpful. Feel free to contribute a pull request which uses an existing libgtest, but still allows to use the Git submodule.

amitdo commented 2 years ago

GoogleTest is not like other dependencies. It is used for unit testing which is not meant to be used bv most users.

kloczek commented 2 years ago

GoogleTest is not like other dependencies. It is used for unit testing which is not meant to be used bv most users.

Really? One sec .. let me check ..

[tkloczko@ss-desktop SPECS]$ grep BuildRequires:.*gtest *
dwgrep.spec:BuildRequires:      gtest-devel
google-benchmark.spec:BuildRequires:    gtest-devel
gumbo-parser.spec:BuildRequires:        gtest-devel
libecpint.spec:BuildRequires:   gtest-devel
libphonenumber.spec:BuildRequires:      gtest-devel
meson.spec:BuildRequires:       gtest-devel
msgpack.spec:BuildRequires:     gtest-devel
ninja-build.spec:BuildRequires: gtest-devel
proj.spec:BuildRequires:        pkgconfig(gtest)        >= 1.8.0
protobuf.spec:BuildRequires:    pkgconfig(gtest)
rapidjson.spec:BuildRequires:   gtest-devel
uriparser.spec:BuildRequires:   gtest-devel
utf8cpp.spec:BuildRequires:     gtest-devel
xsimd.spec:BuildRequires:       gtest-devel
zstd.spec:BuildRequires:        gtest-devel
stweil commented 2 years ago

Again your comment is not helpful. On Debian, very few packages require libgtest-dev. So most users won't have it installed.

kloczek commented 2 years ago

It is some reason why gtest provides public interface with header files and pkgconfig file as well. That reasdon is "please use that interface (only)". On debian gtest is packaged so there is no any obstacles to use system installed files.

I could understand to fall back to compile it if system gtest is not available but this is not the case here.

stweil commented 2 years ago

Is there still a build problem, or can this issue be closed?

kloczek commented 2 years ago

I don't remember. Let me check.

kloczek commented 2 years ago

Looks like local copy of the google test still is in use

+ /usr/bin/make -O -j12 V=1 VERBOSE=1 check
Making check in .
/usr/bin/make  apiexample_test applybox_test baseapi_test baseapi_thread_test bitvector_test cleanapi_test colpartition_test commandlineflags_test dawg_test denorm_test equationdetect_test fileio_test heap_test imagedata_test indexmapbidi_test intfeaturemap_test intsimdmatrix_test lang_model_test layout_test ligature_table_test linlsq_test list_test lstm_recode_test lstm_squashed_test lstm_test lstmtrainer_test loadlang_test mastertrainer_test matrix_test networkio_test normstrngs_test nthitem_test osd_test pagesegmode_test pango_font_info_test paragraphs_test params_model_test progress_test qrsequence_test recodebeam_test rect_test resultiterator_test scanutils_test shapetable_test stats_test stridemap_test stringrenderer_test tablefind_test tablerecog_test tabvector_test tatweel_test textlineprojection_test tfile_test unichar_test unicharcompress_test unicharset_test validate_grapheme_test validate_indic_test validate_khmer_test validate_myanmar_test validator_test libgtest.la libgtest_main.la libgmock.la libgmock_main.la
make[2]: *** No rule to make target 'unittest/third_party/googletest/googletest/src/gtest-all.cc', needed by 'unittest/third_party/googletest/googletest/src/libgtest_la-gtest-all.lo'.  Stop.
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:9033: check-am] Error 2
make: *** [Makefile:8151: check-recursive] Error 1
make: *** Waiting for unfinished jobs....
stweil commented 2 years ago

Yes, and the local copy works fine. In your build you just forgot to run git submodule update --init. If you want support for a pre-installed googletest, your pull request is welcome.

I close the issue as there seem to be no other problems.