Commit abf5a75d for tesseract

commit abf5a75dba5b6f927edadf18e37e003398846f36
Author: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Date:   Mon Jun 15 20:29:04 2026 +0000

    Remove SW_BUILD option from CMake and CI

diff --git a/.github/workflows/cmake-win64.yml b/.github/workflows/cmake-win64.yml
index 7c64299a..7778e066 100644
--- a/.github/workflows/cmake-win64.yml
+++ b/.github/workflows/cmake-win64.yml
@@ -101,7 +101,7 @@ jobs:
              echo "Building leptonica..."
              git clone --depth 1 https://github.com/DanBloomberg/leptonica.git
              cd leptonica
-             cmake -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DSW_BUILD=OFF -DBUILD_PROG=OFF -DBUILD_SHARED_LIBS=ON
+             cmake -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_PROG=OFF -DBUILD_SHARED_LIBS=ON
              cmake --build build --target install

       - name: Remove not needed tools Before building tesseract
@@ -112,7 +112,7 @@ jobs:
       - name: Build and Install tesseract
         shell: cmd
         run: |
-             cmake -Bbuild -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DSW_BUILD=OFF -DBUILD_SHARED_LIBS=ON -DENABLE_LTO=ON -DBUILD_TRAINING_TOOLS=OFF -DFAST_FLOAT=ON -DGRAPHICS_DISABLED=ON -DOPENMP_BUILD=OFF
+             cmake -Bbuild -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=${{env.ILOC}} -DCMAKE_INSTALL_PREFIX=${{env.ILOC}} -DBUILD_SHARED_LIBS=ON -DENABLE_LTO=ON -DBUILD_TRAINING_TOOLS=OFF -DFAST_FLOAT=ON -DGRAPHICS_DISABLED=ON -DOPENMP_BUILD=OFF
              cmake --build build --target install

       - name: Upload Build Results
diff --git a/.github/workflows/vcpkg.yml b/.github/workflows/vcpkg.yml
index 92696169..79c50c9b 100644
--- a/.github/workflows/vcpkg.yml
+++ b/.github/workflows/vcpkg.yml
@@ -38,7 +38,7 @@ jobs:

       - name: Configure and Build Tesseract (--head from main branch) with cmake
         run: |
-             cmake . -B build -DCMAKE_BUILD_TYPE=Release -DSW_BUILD=OFF -DOPENMP_BUILD=OFF -DBUILD_TRAINING_TOOLS=OFF "-DCMAKE_TOOLCHAIN_FILE=${env:GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake"
+             cmake . -B build -DCMAKE_BUILD_TYPE=Release -DOPENMP_BUILD=OFF -DBUILD_TRAINING_TOOLS=OFF "-DCMAKE_TOOLCHAIN_FILE=${env:GITHUB_WORKSPACE}/vcpkg/scripts/buildsystems/vcpkg.cmake"
              cmake --build build --config Release --target install

       - name: Display Tesseract Version
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d39f78b5..dba2aced 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -79,12 +79,6 @@ set(MINIMUM_LEPTONICA_VERSION 1.74)

 message(STATUS "Configuring tesseract version ${PACKAGE_VERSION}...")

-if(WIN32)
-  option(SW_BUILD "Build with sw" ON)
-else()
-  option(SW_BUILD "Build with sw" OFF)
-endif()
-
 # Apple's toolchains dont populate CMAKE_SYSTEM_PROCESSOR when crosscompiling
 # instead it uses CMAKE_OSX_ARCHITECTURES which can contain multiple architectures
 if(APPLE AND NOT CMAKE_SYSTEM_PROCESSOR AND CMAKE_OSX_ARCHITECTURES)
@@ -440,95 +434,79 @@ endif()
 # ##############################################################################
 include(CheckFunctions)

-if(SW_BUILD)
-  find_package(SW REQUIRED)
-  if(BUILD_SHARED_LIBS)
-    set(SW_BUILD_SHARED_LIBS 1)
-  else()
-    set(SW_BUILD_SHARED_LIBS 0)
-  endif()
-  sw_add_package(org.sw.demo.danbloomberg.leptonica
-                 org.sw.demo.libarchive.libarchive)
-  if(BUILD_TRAINING_TOOLS)
-    sw_add_package(org.sw.demo.gnome.pango.pangocairo
-                   org.sw.demo.unicode.icu.i18n)
+find_package(PkgConfig)
+if(APPLE)
+  if(DEFINED ENV{HOMEBREW_PREFIX})
+    set(HOMEBREW_PREFIX $ENV{HOMEBREW_PREFIX})
+    set(PKG_CONFIG_PATH "${HOMEBREW_PREFIX}/opt/icu4c/lib/pkgconfig:${HOMEBREW_PREFIX}/opt/libarchive/lib/pkgconfig")
+    set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}")
   endif()
-  sw_execute()
+endif()
+# Check for required library. option -DLeptonica_DIR=path => cmake hint where
+# to find leptonica
+find_package(Leptonica ${MINIMUM_LEPTONICA_VERSION} CONFIG)
+if(NOT Leptonica_FOUND AND PKG_CONFIG_EXECUTABLE)
+  pkg_check_modules(Leptonica lept>=${MINIMUM_LEPTONICA_VERSION})
+  link_directories(${Leptonica_LIBRARY_DIRS})
+endif()
+if(NOT Leptonica_FOUND)
+  message(FATAL_ERROR "Cannot find required library Leptonica. Quitting!")
 else()
-  find_package(PkgConfig)
-  if(APPLE)
-    if(DEFINED ENV{HOMEBREW_PREFIX})
-      set(HOMEBREW_PREFIX $ENV{HOMEBREW_PREFIX})
-      set(PKG_CONFIG_PATH "${HOMEBREW_PREFIX}/opt/icu4c/lib/pkgconfig:${HOMEBREW_PREFIX}/opt/libarchive/lib/pkgconfig")
-      set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}")
-    endif()
+  message(STATUS "Found leptonica version: ${Leptonica_VERSION}")
+endif(NOT Leptonica_FOUND)
+include_directories(${Leptonica_INCLUDE_DIRS})
+
+check_leptonica_tiff_support()
+if ((NOT LEPT_TIFF_RESULT EQUAL 0) AND LEPT_TIFF_COMPILE_SUCCESS)
+  message(NOTICE "Leptonica was build without TIFF support! Disabling TIFF support...")
+  set(DISABLE_TIFF ON)
+elseif(NOT ${CMAKE_VERSION} VERSION_LESS "3.25")
+  message(STATUS "Leptonica was build with TIFF support.")
+endif()
+
+# Check for optional libraries.
+if(DISABLE_TIFF)
+  set(HAVE_TIFFIO_H OFF)
+  message(STATUS "TIFF support disabled.")
+else(DISABLE_TIFF)
+  find_package(TIFF) # for tesseract
+  if(NOT TIFF_FOUND AND PKG_CONFIG_EXECUTABLE)
+    # try PKG_CONFIG to find libtiff if cmake failed
+    pkg_check_modules(TIFF libtiff-4)
   endif()
-  # Check for required library. option -DLeptonica_DIR=path => cmake hint where
-  # to find leptonica
-  find_package(Leptonica ${MINIMUM_LEPTONICA_VERSION} CONFIG)
-  if(NOT Leptonica_FOUND AND PKG_CONFIG_EXECUTABLE)
-    pkg_check_modules(Leptonica lept>=${MINIMUM_LEPTONICA_VERSION})
-    link_directories(${Leptonica_LIBRARY_DIRS})
+  if(TIFF_FOUND)
+    set(HAVE_TIFFIO_H ON)
+    include_directories(${TIFF_INCLUDE_DIRS})
+  endif(TIFF_FOUND)
+endif(DISABLE_TIFF)
+if(DISABLE_ARCHIVE)
+  set(HAVE_LIBARCHIVE OFF)
+  message(STATUS "LibArchive support disabled.")
+else(DISABLE_ARCHIVE)
+  find_package(LibArchive)
+  if(NOT LibArchive_FOUND AND PKG_CONFIG_EXECUTABLE)
+    # try PKG_CONFIG to find libarchive if cmake failed
+    pkg_check_modules(LibArchive libarchive)
   endif()
-  if(NOT Leptonica_FOUND)
-    message(FATAL_ERROR "Cannot find required library Leptonica. Quitting!")
-  else()
-    message(STATUS "Found leptonica version: ${Leptonica_VERSION}")
-  endif(NOT Leptonica_FOUND)
-  include_directories(${Leptonica_INCLUDE_DIRS})
-
-  check_leptonica_tiff_support()
-  if ((NOT LEPT_TIFF_RESULT EQUAL 0) AND LEPT_TIFF_COMPILE_SUCCESS)
-    message(NOTICE "Leptonica was build without TIFF support! Disabling TIFF support...")
-    set(DISABLE_TIFF ON)
-  elseif(NOT ${CMAKE_VERSION} VERSION_LESS "3.25")
-    message(STATUS "Leptonica was build with TIFF support.")
+  if(LibArchive_FOUND)
+    set(HAVE_LIBARCHIVE ON)
+    include_directories(${LibArchive_INCLUDE_DIRS})
+  endif(LibArchive_FOUND)
+endif(DISABLE_ARCHIVE)
+if(DISABLE_CURL)
+  set(HAVE_LIBCURL OFF)
+  message(STATUS "CURL support disabled.")
+else(DISABLE_CURL)
+  find_package(CURL)
+  if(NOT CURL_FOUND AND PKG_CONFIG_EXECUTABLE)
+    # try PKG_CONFIG to find libcurl if cmake failed
+    pkg_check_modules(CURL libcurl)
   endif()
-
-  # Check for optional libraries.
-  if(DISABLE_TIFF)
-    set(HAVE_TIFFIO_H OFF)
-    message(STATUS "TIFF support disabled.")
-  else(DISABLE_TIFF)
-    find_package(TIFF) # for tesseract
-    if(NOT TIFF_FOUND AND PKG_CONFIG_EXECUTABLE)
-      # try PKG_CONFIG to find libtiff if cmake failed
-      pkg_check_modules(TIFF libtiff-4)
-    endif()
-    if(TIFF_FOUND)
-      set(HAVE_TIFFIO_H ON)
-      include_directories(${TIFF_INCLUDE_DIRS})
-    endif(TIFF_FOUND)
-  endif(DISABLE_TIFF)
-  if(DISABLE_ARCHIVE)
-    set(HAVE_LIBARCHIVE OFF)
-    message(STATUS "LibArchive support disabled.")
-  else(DISABLE_ARCHIVE)
-    find_package(LibArchive)
-    if(NOT LibArchive_FOUND AND PKG_CONFIG_EXECUTABLE)
-      # try PKG_CONFIG to find libarchive if cmake failed
-      pkg_check_modules(LibArchive libarchive)
-    endif()
-    if(LibArchive_FOUND)
-      set(HAVE_LIBARCHIVE ON)
-      include_directories(${LibArchive_INCLUDE_DIRS})
-    endif(LibArchive_FOUND)
-  endif(DISABLE_ARCHIVE)
-  if(DISABLE_CURL)
-    set(HAVE_LIBCURL OFF)
-    message(STATUS "CURL support disabled.")
-  else(DISABLE_CURL)
-    find_package(CURL)
-    if(NOT CURL_FOUND AND PKG_CONFIG_EXECUTABLE)
-      # try PKG_CONFIG to find libcurl if cmake failed
-      pkg_check_modules(CURL libcurl)
-    endif()
-    if(CURL_FOUND)
-      set(HAVE_LIBCURL ON)
-      include_directories(${CURL_INCLUDE_DIRS})
-    endif(CURL_FOUND)
-  endif(DISABLE_CURL)
-endif()
+  if(CURL_FOUND)
+    set(HAVE_LIBCURL ON)
+    include_directories(${CURL_INCLUDE_DIRS})
+  endif(CURL_FOUND)
+endif(DISABLE_CURL)

 # ##############################################################################
 #
@@ -607,7 +585,6 @@ message(STATUS "MARCH_NATIVE_OPT: ${MARCH_NATIVE_OPT}")
 message(STATUS "HAVE_NEON: ${HAVE_NEON}")
 message(STATUS "Link-time optimization: ${CMAKE_INTERPROCEDURAL_OPTIMIZATION}")
 message(STATUS "--------------------------------------------------------")
-message(STATUS "Build with sw [SW_BUILD]: ${SW_BUILD}")
 message(STATUS "Build with openmp support [OPENMP_BUILD]: ${OPENMP_BUILD}")
 message(STATUS "Build with libarchive support [HAVE_LIBARCHIVE]: "
                "${HAVE_LIBARCHIVE}")
@@ -859,23 +836,11 @@ set_target_properties(
     tesseract$<$<BOOL:${WIN32}>:${VERSION_MAJOR}${VERSION_MINOR}$<$<CONFIG:DEBUG>:d>>
 )

-if(SW_BUILD)
-  target_link_libraries(libtesseract PUBLIC org.sw.demo.danbloomberg.leptonica
-                                            org.sw.demo.libarchive.libarchive)
-  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/TesseractTargets.cmake
-       "include(${CMAKE_CURRENT_BINARY_DIR}/cppan.cmake)\n")
-  export(
-    TARGETS libtesseract
-    APPEND
-    FILE ${CMAKE_CURRENT_BINARY_DIR}/TesseractTargets.cmake
-    NAMESPACE Tesseract::)
-else()
-  target_link_libraries(libtesseract PUBLIC ${Leptonica_LIBRARIES})
+target_link_libraries(libtesseract PUBLIC ${Leptonica_LIBRARIES})
   export(
     TARGETS libtesseract
     FILE ${CMAKE_CURRENT_BINARY_DIR}/TesseractTargets.cmake
     NAMESPACE Tesseract::)
-endif()

 if(WIN32
    AND CLANG
diff --git a/src/training/CMakeLists.txt b/src/training/CMakeLists.txt
index 32cd5f78..354df753 100644
--- a/src/training/CMakeLists.txt
+++ b/src/training/CMakeLists.txt
@@ -8,18 +8,13 @@ endif()
 # Include build optimizations
 include(BuildOptimizations)

-if(SW_BUILD)
-  set(ICU_FOUND 1)
-else() # NOT SW_BUILD
-  find_package(PkgConfig)
-endif()
+find_package(PkgConfig)

 # experimental
 # If PkgConfig is not present training tools will not be build,
 # so it does not make sense to set ICU.
 if(MSVC
    AND PKG_CONFIG_FOUND
-   AND NOT SW_BUILD
    AND NOT USE_SYSTEM_ICU)
   include(CheckTypeSize)
   check_type_size("void *" SIZEOF_VOID_P)
@@ -67,18 +62,16 @@ if(MSVC
 endif()
 # experimental

-if(NOT SW_BUILD)
-  if(PKG_CONFIG_FOUND)
-    pkg_check_modules(ICU REQUIRED IMPORTED_TARGET icu-uc icu-i18n)
-  else()
-    find_package(ICU 52.1 COMPONENTS uc i18n)
-  endif()
-  if(ICU_FOUND)
-    message(">> ICU_FOUND ${ICU_FOUND} ${ICU_VERSION} ${ICU_LIBRARIES} ${ICU_INCLUDE_DIRS}")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ICU_CXX_FLAGS}")
-  else()
-    message(">> ICU not found!")
-  endif()
+if(PKG_CONFIG_FOUND)
+  pkg_check_modules(ICU REQUIRED IMPORTED_TARGET icu-uc icu-i18n)
+else()
+  find_package(ICU 52.1 COMPONENTS uc i18n)
+endif()
+if(ICU_FOUND)
+  message(">> ICU_FOUND ${ICU_FOUND} ${ICU_VERSION} ${ICU_LIBRARIES} ${ICU_INCLUDE_DIRS}")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ICU_CXX_FLAGS}")
+else()
+  message(">> ICU not found!")
 endif()


@@ -272,9 +265,7 @@ if (MSVC)
 endif()

 if(ICU_FOUND)
-  if(NOT SW_BUILD)
-    include_directories(${ICU_INCLUDE_DIRS})
-  endif()
+  include_directories(${ICU_INCLUDE_DIRS})

   # ############################################################################
   # LIBRARY unicharset_training
@@ -283,15 +274,10 @@ if(ICU_FOUND)
   file(GLOB unicharset_training_src unicharset/*)

   add_library(unicharset_training ${unicharset_training_src})
-  if(SW_BUILD)
-    target_link_libraries(unicharset_training
-                          PUBLIC common_training org.sw.demo.unicode.icu.i18n)
+  if(PKG_CONFIG_FOUND)
+    target_link_libraries(unicharset_training PUBLIC common_training PkgConfig::ICU)
   else()
-    if(PKG_CONFIG_FOUND)
-      target_link_libraries(unicharset_training PUBLIC common_training PkgConfig::ICU)
-    else()
-      target_link_libraries(unicharset_training PUBLIC common_training ${ICU_LIBRARIES})
-    endif()
+    target_link_libraries(unicharset_training PUBLIC common_training ${ICU_LIBRARIES})
   endif()
   target_include_directories(unicharset_training
                              PUBLIC unicharset ${CMAKE_CURRENT_BINARY_DIR})
@@ -406,19 +392,16 @@ if(ICU_FOUND)

   # ############################################################################

-  if(PKG_CONFIG_FOUND OR SW_BUILD)
-
-    if(PKG_CONFIG_FOUND)
-      pkg_check_modules(
-        PANGO
-        REQUIRED
-        IMPORTED_TARGET
-        pango>=1.38.0
-        cairo
-        pangoft2
-        pangocairo
-        fontconfig)
-    endif()
+  if(PKG_CONFIG_FOUND)
+    pkg_check_modules(
+      PANGO
+      REQUIRED
+      IMPORTED_TARGET
+      pango>=1.38.0
+      cairo
+      pangoft2
+      pangocairo
+      fontconfig)

     # ##########################################################################
     # LIBRARY pango_training
@@ -428,17 +411,10 @@ if(ICU_FOUND)

     add_library(pango_training ${pango_training_src})
     target_link_libraries(pango_training PUBLIC unicharset_training)
-    if(SW_BUILD)
-      target_link_libraries(pango_training
-                            PUBLIC org.sw.demo.gnome.pango.pangocairo)
-    else()
-      if(PKG_CONFIG_FOUND)
-        target_include_directories(pango_training BEFORE
-                                   PUBLIC ${PANGO_INCLUDE_DIRS})
-        target_compile_definitions(pango_training PUBLIC -DPANGO_ENABLE_ENGINE)
-        target_link_libraries(pango_training PUBLIC PkgConfig::PANGO)
-      endif()
-    endif()
+    target_include_directories(pango_training BEFORE
+                               PUBLIC ${PANGO_INCLUDE_DIRS})
+    target_compile_definitions(pango_training PUBLIC -DPANGO_ENABLE_ENGINE)
+    target_link_libraries(pango_training PUBLIC PkgConfig::PANGO)
     target_include_directories(pango_training
                                PUBLIC pango ${CMAKE_CURRENT_BINARY_DIR})
     generate_export_header(pango_training EXPORT_MACRO_NAME