build.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/bin/bash
  2. # GitHub actions - Create Tesseract installer for Windows
  3. # Author: Stefan Weil (2010-2024)
  4. set -e
  5. set -x
  6. LANG=C.UTF-8
  7. ARCH=$1
  8. if [ "$ARCH" = "i686" ]; then
  9. MINGW=/mingw32
  10. else
  11. ARCH=x86_64
  12. MINGW=/mingw64
  13. fi
  14. ROOTDIR=$PWD
  15. DISTDIR=$ROOTDIR/dist
  16. HOST=$ARCH-w64-mingw32
  17. TAG=$(cat VERSION).$(date +%Y%m%d)
  18. BUILDDIR=bin/ndebug/$HOST-$TAG
  19. PKG_ARCH=mingw-w64-${ARCH/_/-}
  20. # Install packages.
  21. sudo apt-get update --quiet
  22. sudo apt-get install --assume-yes --no-install-recommends --quiet \
  23. asciidoc curl xsltproc docbook-xml docbook-xsl \
  24. automake dpkg-dev libtool pkg-config default-jdk-headless \
  25. mingw-w64-tools nsis g++-"$PKG_ARCH" \
  26. makepkg pacman-package-manager python3-venv unzip
  27. # Configure pacman.
  28. # Enable mirrorlist.
  29. sudo sed -Ei 's/^#.*(Include.*mirrorlist)/\1/' /etc/pacman.conf
  30. (
  31. # Add msys key for pacman.
  32. cd /usr/share/keyrings
  33. sudo curl -OsS https://raw.githubusercontent.com/msys2/MSYS2-keyring/master/msys2.gpg
  34. sudo curl -OsS https://raw.githubusercontent.com/msys2/MSYS2-keyring/master/msys2-revoked
  35. sudo curl -OsS https://raw.githubusercontent.com/msys2/MSYS2-keyring/master/msys2-trusted
  36. )
  37. (
  38. # Add active environments for pacman.
  39. # See https://www.msys2.org/docs/repos-mirrors/.
  40. sudo mkdir -p /etc/pacman.d
  41. cd /etc/pacman.d
  42. cat <<eod | sudo tee mirrorlist >/dev/null
  43. [mingw64]
  44. Include = /etc/pacman.d/mirrorlist.mingw
  45. eod
  46. sudo curl -OsS https://raw.githubusercontent.com/msys2/MSYS2-packages/master/pacman-mirrors/mirrorlist.mingw
  47. # sudo curl -OsS https://raw.githubusercontent.com/msys2/MSYS2-packages/master/pacman-mirrors/mirrorlist.msys
  48. )
  49. sudo pacman-key --init
  50. sudo pacman-key --populate msys2
  51. sudo pacman -Syu --noconfirm
  52. # Install required pacman packages.
  53. sudo pacman -S --noconfirm \
  54. mingw-w64-x86_64-curl-winssl \
  55. mingw-w64-x86_64-giflib \
  56. mingw-w64-x86_64-icu \
  57. mingw-w64-x86_64-leptonica \
  58. mingw-w64-x86_64-libarchive \
  59. mingw-w64-x86_64-libidn2 \
  60. mingw-w64-x86_64-openjpeg2 \
  61. mingw-w64-x86_64-openssl \
  62. mingw-w64-x86_64-pango \
  63. mingw-w64-x86_64-libpng \
  64. mingw-w64-x86_64-libtiff \
  65. mingw-w64-x86_64-libwebp
  66. git config --global user.email "sw@weilnetz.de"
  67. git config --global user.name "Stefan Weil"
  68. git tag -a "v$TAG" -m "Tesseract $TAG"
  69. # Run autogen.
  70. ./autogen.sh
  71. # Build Tesseract installer.
  72. mkdir -p "$BUILDDIR" && cd "$BUILDDIR"
  73. # Run configure.
  74. PKG_CONFIG_PATH=$MINGW/lib/pkgconfig
  75. export PKG_CONFIG_PATH
  76. # Disable OpenMP (see https://github.com/tesseract-ocr/tesseract/issues/1662).
  77. ../../../configure --disable-openmp --host="$HOST" --prefix="/usr/$HOST" \
  78. CXX="$HOST-g++-posix" \
  79. CXXFLAGS="-fno-math-errno -Wall -Wextra -Wpedantic -g -O2 -isystem $MINGW/include" \
  80. LDFLAGS="-L$MINGW/lib"
  81. make all training
  82. MINGW_INSTALL=${PWD}${MINGW}
  83. make install-jars install training-install html prefix="$MINGW_INSTALL" INSTALL_STRIP_FLAG=-s
  84. test -d venv || python3 -m venv venv
  85. source venv/bin/activate
  86. pip install pefile
  87. mkdir -p dll
  88. ln -sv $("$ROOTDIR/nsis/find_deps.py" "$MINGW_INSTALL"/bin/*.exe "$MINGW_INSTALL"/bin/*.dll) dll/
  89. ln -svf /usr/lib/gcc/x86_64-w64-mingw32/*-win32/libstdc++-6.dll dll/
  90. ln -svf /usr/lib/gcc/x86_64-w64-mingw32/*-win32/libgcc_s_seh-1.dll dll/
  91. make winsetup prefix="$MINGW_INSTALL"
  92. # Copy result for upload.
  93. mkdir -p "$DISTDIR" && cp nsis/tesseract-ocr-w*-setup-*.exe "$DISTDIR"