Download raw body.
converters/k2pdfopt: unbreak/update to 2.55
Hi,
At the end of the email is a diff that unbreaks and updates
converters/k2pdfopt to 2.55.
I borrowed quite some patches from Debian to get it to work. See here
(I also added comments in the patch files themselves):
https://sources.debian.org/patches/k2pdfopt/2.55+ds-2/
The Debian-patched version does not use mupdf and uses leptonica from
the system. So for those two, we don't need the odd patching of files
anymore.
I attempted to get it to build with Tesseract but I failed to get
that to work (tail of the build log for that below in case someone
wants to have a look), so I decided to patch that away in CMakeLists.txt
(the chunk that starts with "pkg_check_modules(TESSERACT tesseract)").
Perhaps any of the disabled functionality can be added back later
(help or ideas are welcome), and maybe some of the old patches need to
come back for that, but I don't want to keep looking at this forever
before I send it out.
I heard that Paul is not interested in being MAINTAINER anymore, so
I'll make myself MAINTAINER (although I'll easily mark it BROKEN
again if the build breaks in weird ways).
Comments or OKs?
Caspar
---------------------------------------
Tail of log when build fails with Tesseract enabled.
tesseract_mod/tesscapi.cpp provides the necessary functions but I
couldn't quickly get it to work.
[1/1] : && /usr/ports/pobj/k2pdfopt-2.55/bin/cc -O2 -pipe -DUSE_CMAKE -Wall -DNDEBUG CMakeFiles/k2pdfopt.dir/k2pdfopt.c.o -o k2pdfopt -Wl,-z,origin,-rpath,/usr/local/lib: k2pdfoptlib/libk2pdfoptlib.a willuslib/libwilluslib.a -lm /usr/lib/libz.so.7.0 /usr/local/lib/libpng.so.18.0 /usr/local/lib/libjpeg.so.70.2 /usr/local/lib/libjasper.so.6.1 -L/usr/local/lib -lgsl -lgslcblas -lm -L/usr/local/lib -ldjvulibre -L/usr/local/lib -lleptonica -L/usr/local/lib -ltesseract -larchive -lcurl -lpthread /usr/lib/libz.so.7.0 /usr/local/lib/libpng.so.18.0 /usr/local/lib/libjpeg.so.70.2 /usr/local/lib/libjasper.so.6.1 -lgsl -lgslcblas -ldjvulibre -lleptonica -ltesseract -larchive -lcurl -lpthread -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
FAILED: k2pdfopt
: && /usr/ports/pobj/k2pdfopt-2.55/bin/cc -O2 -pipe -DUSE_CMAKE -Wall -DNDEBUG CMakeFiles/k2pdfopt.dir/k2pdfopt.c.o -o k2pdfopt -Wl,-z,origin,-rpath,/usr/local/lib: k2pdfoptlib/libk2pdfoptlib.a willuslib/libwilluslib.a -lm /usr/lib/libz.so.7.0 /usr/local/lib/libpng.so.18.0 /usr/local/lib/libjpeg.so.70.2 /usr/local/lib/libjasper.so.6.1 -L/usr/local/lib -lgsl -lgslcblas -lm -L/usr/local/lib -ldjvulibre -L/usr/local/lib -lleptonica -L/usr/local/lib -ltesseract -larchive -lcurl -lpthread /usr/lib/libz.so.7.0 /usr/local/lib/libpng.so.18.0 /usr/local/lib/libjpeg.so.70.2 /usr/local/lib/libjasper.so.6.1 -lgsl -lgslcblas -ldjvulibre -lleptonica -ltesseract -larchive -lcurl -lpthread -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
k2mark.c(k2mark.c.o:(mark_source_page) in archive k2pdfoptlib/libk2pdfoptlib.a): warning: sprintf() is often misused, please use snprintf()
k2file.c(k2file.c.o:(k2pdfopt_proc_file_or_folder) in archive k2pdfoptlib/libk2pdfoptlib.a): warning: strcpy() is almost always misused, please use strlcpy()
k2ocr.c(k2ocr.c.o:(k2ocr_init) in archive k2pdfoptlib/libk2pdfoptlib.a): warning: strcat() is almost always misused, please use strlcat()
wzfile.c(wzfile.c.o:(wzprintf) in archive willuslib/libwilluslib.a): warning: vsprintf() is often misused, please use vsnprintf()
wfile.c(wfile.c.o:(wfile_tempname) in archive willuslib/libwilluslib.a): warning: tempnam() possibly used unsafely; consider using mkstemp()
wfile.c(wfile.c.o:(wfile_tempname) in archive willuslib/libwilluslib.a): warning: tmpnam() possibly used unsafely; consider using mkstemp()
array.c(array.c.o:(array_load) in archive willuslib/libwilluslib.a): warning: rand() may return deterministic values, is that what you want?
ld: error: undefined symbol: tess_capi_set_logfile
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_set_logfile) in archive willuslib/libwilluslib.a
ld: error: undefined symbol: tess_capi_debug_message
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_debug_message) in archive willuslib/libwilluslib.a
ld: error: undefined symbol: tess_capi_init
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_init) in archive willuslib/libwilluslib.a
ld: error: undefined symbol: tess_capi_end
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_end) in archive willuslib/libwilluslib.a
ld: error: undefined symbol: tess_capi_get_ocr_multiword
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_ocrwords_from_bmp8) in archive willuslib/libwilluslib.a
ld: error: undefined symbol: tess_capi_get_ocr
>>> referenced by ocrtess.c
>>> ocrtess.c.o:(ocrtess_from_bmp8) in archive willuslib/libwilluslib.a
cc: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
*** Error 1 in . (/usr/ports/devel/cmake/cmake.port.mk:46 'do-build': @cd /usr/ports/pobj/k2pdfopt-2.55/build-aarch64 && exec /usr/bin/env -...)
*** Error 2 in . (/usr/ports/infrastructure/mk/bsd.port.mk:3057 '/usr/ports/pobj/k2pdfopt-2.55/build-aarch64/.build_done': @cd /usr/ports/co...)
*** Error 2 in /usr/ports/converters/k2pdfopt (/usr/ports/infrastructure/mk/bsd.port.mk:2704 'all': @lock=k2pdfopt-2.55; export _LOCKS_HELD...)
---------------------------------------
Index: Makefile
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/Makefile,v
retrieving revision 1.12
diff -u -p -r1.12 Makefile
--- Makefile 13 Nov 2023 09:40:49 -0000 1.12
+++ Makefile 17 Apr 2024 20:53:08 -0000
@@ -1,74 +1,36 @@
-BROKEN = k2pdfopt uses modified builds of MuPDF, Leptonica, Tesseract; at least some of these have been updated causing mods to fail
-
-BROKEN += also depends on graphics/opejpeg which no longer exists
-
-# Notes on updating:
-# - go to https://www.willus.com/k2pdfopt/k2pdfopt_version.txt;
-# some of the dependencies need modifying by replacing source
-# files with files from XXX_mod in k2pdfopt source; using the
-# above file you can figure out which version of those libs
-# is needed
-# - modify the port to:
-# 1. fetch those files
-# 2. move the files from XXX_mod/somefile to replace the relevant
-# file in the library (you'll also need to figure out where in
-# the library source that file is; they are dumped into the
-# one XXX_mod dir per library)
-# 3. replicate the library build process (make them static)
-# 4. build k2pdfopt, pointed at the newly built libraries
-#
-# Alternatively you may get away with removing use of mupdf (there's
-# some fallback to ghostscript) and patching use of the libraries;
-# debian packaging takes this approach. It's still very fragile though.
-
COMMENT = optimizes PDF/DJVU files for mobile e-readers
-V = 2.42
+V = 2.55
DISTNAME = k2pdfopt_v${V}_src
PKGNAME = k2pdfopt-${V}
-SITES = http://willus.com/k2pdfopt/src/
+SITES = https://willus.com/k2pdfopt/src/
EXTRACT_SUFX = .zip
-REVISION = 3
CATEGORIES = converters
-HOMEPAGE = http://willus.com/k2pdfopt/
-MAINTAINER = Paul Irofti <paul@irofti.net>
+HOMEPAGE = https://willus.com/k2pdfopt/
+MAINTAINER = Caspar Schutijser <caspar@openbsd.org>
# GPLv3
PERMIT_PACKAGE = Yes
MODULES = devel/cmake
-WANTLIB += ${COMPILER_LIBCXX} c freetype jbig2dec jpeg m png z \
- djvulibre jasper lept mupdf openjpeg tesseract
+WANTLIB += c djvulibre gsl gslcblas jasper jpeg leptonica m png
+WANTLIB += pthread z
COMPILER = base-clang ports-gcc base-gcc
-BUILD_DEPENDS += textproc/mupdf:patch \
- graphics/leptonica:configure \
- graphics/tesseract/tesseract:patch
-
-LIB_DEPENDS += graphics/png \
+LIB_DEPENDS += devel/gsl \
+ graphics/png \
+ graphics/jasper \
graphics/jpeg \
- graphics/jbig2dec \
- textproc/mupdf \
graphics/djvulibre \
graphics/leptonica \
- graphics/tesseract/tesseract
-
-# XXX we no longer have this port
-# LIB_DEPENDS += graphics/openjpeg
RUN_DEPENDS += print/ghostscript/gnu
WRKDIST = ${WRKDIR}/k2pdfopt_v${V}
-
-post-extract:
- ln -s ${WRKDIR}/graphics/leptonica/leptonica-* ${WRKSRC}/leptonica
- ln -s ${WRKDIR}/graphics/tesseract/tesseract/tesseract-* \
- ${WRKSRC}/tesseract
- ln -s ${WRKDIR}/textproc/mupdf/mupdf-* ${WRKSRC}/mupdf
pre-patch:
@cd ${WRKSRC}; perl -i -pe 's/\r$$//' `find . -type f`
Index: distinfo
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 distinfo
--- distinfo 18 Aug 2017 12:07:51 -0000 1.1.1.1
+++ distinfo 17 Apr 2024 20:53:08 -0000
@@ -1,2 +1,2 @@
-SHA256 (k2pdfopt_v2.42_src.zip) = mqvWsZzhFbl/wM0xlclaMPO60FBl2LtHkfVynU2gOuk=
-SIZE (k2pdfopt_v2.42_src.zip) = 2829697
+SHA256 (k2pdfopt_v2.55_src.zip) = Pni0x91iJ/3hITj9JGjdE8DEW1JRWSpPCqxn/ROauVM=
+SIZE (k2pdfopt_v2.55_src.zip) = 1364878
Index: patches/patch-CMakeLists_txt
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/patches/patch-CMakeLists_txt,v
retrieving revision 1.3
diff -u -p -r1.3 patch-CMakeLists_txt
--- patches/patch-CMakeLists_txt 11 Mar 2022 18:27:03 -0000 1.3
+++ patches/patch-CMakeLists_txt 17 Apr 2024 20:53:08 -0000
@@ -1,3 +1,14 @@
+Fix compilation with Jasper library.
+
+Patch from Debian: "do not detect ghostscript at compile time", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0003-CMakeLists.txt-do-not-detect-ghostscript-at-compile-.patch/
+
+Patch from Debian: "use system gsl", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0008-willuslib-gslpolyfit.c-use-system-gsl.patch/
+
+Patch from Debian: "add missing install command", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0001-CMakeLists.txt-add-missing-install-command.patch/
+
Index: CMakeLists.txt
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -6,8 +17,8 @@ Index: CMakeLists.txt
+project(k2pdfopt)
cmake_minimum_required(VERSION 2.6)
- # ---- Test for packages
-@@ -52,6 +52,8 @@ endif(JPEG_FOUND)
+ #
+@@ -57,22 +57,18 @@ endif(JPEG_FOUND)
include(FindJasper)
if(JASPER_FOUND)
set(HAVE_JASPER_LIB 1)
@@ -15,68 +26,58 @@ Index: CMakeLists.txt
+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${JASPER_LIBRARY})
endif(JASPER_FOUND)
- # paths from willuslib/wgs.c
-@@ -84,6 +86,22 @@ if(MUPDF_FOUND)
- )
- endif(MUPDF_FOUND)
-
-+find_library(FREETYPE_LIB freetype PATHS /usr/X11R6/lib)
-+if(FREETYPE_LIB)
-+ include_directories(SYSTEM /usr/X11R6/include /usr/X11R6/include/freetype2)
-+ message(STATUS "freetype libraries: ${FREETYPE_LIB}")
-+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${FREETYPE_LIB})
-+endif()
-+
-+find_library(MUPDF_LIB mupdf PATHS ${CMAKE_INSTALL_PREFIX}/lib)
-+if(MUPDF_LIB)
-+ set(HAVE_MUPDF_LIB 1)
-+ include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include)
-+ message(STATUS "mupdf libraries: ${MUPDF_LIB}")
-+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${MUPDF_LIB}
-+ -lopenjpeg -ljbig2dec -ljpeg)
-+endif()
-+
- pkg_check_modules(DJVU ddjvuapi)
- if(DJVU_FOUND)
- set(HAVE_DJVU_LIB 1)
-@@ -92,14 +110,30 @@ if(DJVU_FOUND)
- endif(DJVU_FOUND)
-
- # HAVE_GOCR_LIB
--# HAVE_LEPTONICA_LIB
-+# LEPTONICA
-+find_library(LEPT_LIB lept PATHS ${CMAKE_INSTALL_PREFIX}/lib)
-+if(LEPT_LIB)
-+ set(HAVE_LEPTONICA_LIB 1)
-+ include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include leptonica_mod)
-+ message(STATUS "leptonica libraries: ${LEPT_LIB}")
-+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${LEPT_LIB})
-+endif()
-+
- # HAVE_TESSERACT_LIB
-+find_library(TESSERACT_LIB tesseract PATHS ${CMAKE_INSTALL_PREFIX}/lib)
-+if(TESSERACT_LIB)
-+ set(HAVE_TESSERACT_LIB 1)
-+ include_directories(SYSTEM ${CMAKE_INSTALL_PREFIX}/include)
-+ message(STATUS "tesseract libraries: ${TESSERACT_LIB}")
-+ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${TESSERACT_LIB})
-+endif()
-
-+
+-# paths from willuslib/wgs.c
+-find_program(GHOSTSCRIPT_EXECUTABLE gs
+-# PATHS /usr/bin /usr/share/gs /usr/local/gs /opt/gs
+-# /usr/share/gs* /usr/local/gs* /opt/gs*
+-)
+-if(GHOSTSCRIPT_EXECUTABLE)
+- set(HAVE_GHOSTSCRIPT 1)
+- message(STATUS "Found ghostscript executable")
+-else()
+- message(STATUS "Could NOT find ghostscript executable")
+-endif(GHOSTSCRIPT_EXECUTABLE)
++set(HAVE_GHOSTSCRIPT 1)
+
+-# willus.h
+-# HAVE_GSL_LIB
++pkg_check_modules(GSL gsl)
++if(GSL_FOUND)
++ set(HAVE_GSL_LIB 1)
++ include_directories(SYSTEM ${GSL_INCLUDEDIR})
++ set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${GSL_LDFLAGS})
++endif(GSL_FOUND)
+
+
+ # libfreetype6 (>= 2.3.9), libjbig2dec0, libjpeg8 (>= 8c), libx11-6, libxext6, zlib1g (>= 1:1.2.0)
+@@ -105,13 +101,6 @@ if(LEPT_FOUND)
+ include_directories(SYSTEM ${LEPT_INCLUDEDIR})
+ endif(LEPT_FOUND)
+
+-pkg_check_modules(TESSERACT tesseract)
+-if(TESSERACT_FOUND)
+- set(HAVE_TESSERACT_LIB 1)
+- set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${TESSERACT_LDFLAGS})
+- include_directories(SYSTEM ${TESSERACT_INCLUDEDIR})
+-endif(TESSERACT_FOUND)
+-
# ---- Describe project
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_CMAKE -Wall")
-
--include_directories(. willuslib k2pdfoptlib)
-+include_directories(. ${PROJECT_BINARY_DIR} include_mod willuslib k2pdfoptlib)
-
- configure_file (
+@@ -122,6 +111,7 @@ configure_file (
"${PROJECT_SOURCE_DIR}/config.h.in"
-@@ -113,6 +147,7 @@ add_subdirectory(k2pdfoptlib)
+ "${PROJECT_BINARY_DIR}/config.h"
+ )
++include_directories(${PROJECT_BINARY_DIR})
+
+ add_subdirectory(willuslib)
+ add_subdirectory(k2pdfoptlib)
+@@ -129,6 +119,8 @@ add_subdirectory(k2pdfoptlib)
+ # ms
add_executable(k2pdfopt k2pdfopt.c)
- target_link_libraries (k2pdfopt k2pdfoptlib willuslib ${K2PDFOPT_LIB})
-
-+install (TARGETS k2pdfopt RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
-
+ target_link_libraries (k2pdfopt k2pdfoptlib willuslib ${K2PDFOPT_LIB} pthread)
++
++install(TARGETS k2pdfopt RUNTIME DESTINATION bin)
+
+
message("")
- message("-- Summary --")
Index: patches/patch-k2pdfoptlib_k2master_c
===================================================================
RCS file: patches/patch-k2pdfoptlib_k2master_c
diff -N patches/patch-k2pdfoptlib_k2master_c
--- patches/patch-k2pdfoptlib_k2master_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,26 +0,0 @@
-Index: k2pdfoptlib/k2master.c
---- k2pdfoptlib/k2master.c.orig
-+++ k2pdfoptlib/k2master.c
-@@ -248,8 +248,10 @@ printf("masterinfo->landscape=%d\n",masterinfo->landsc
- wfile_written_info("dewarp_image.png",stdout);
- aprintf(TTEXT_NORMAL);
- }
-+#ifdef HAVE_LEPTONICA_LIB
- wlept_bmp_dewarp(dwbmp,src,srcgrey,white,k2settings->dewarp,
- k2settings->debug?"k2opt_dewarp_model.pdf":NULL);
-+#endif
- if (k2settings->debug)
- {
- aprintf(TTEXT_BOLD);
-@@ -2681,7 +2683,11 @@ printf("@k2master_rows_color: %d x %d\n",srcbmp->widt
- /* Parse region into columns */
- pageregions=&_pageregions;
- pageregions_init(pageregions);
-+#ifdef HAVE_OCR_LIB
- if (k2settings->ocr_max_columns==2 || k2settings->max_columns>1)
-+#else
-+ if (k2settings->max_columns>1)
-+#endif
- maxlevels = 2;
- else
- maxlevels = 3;
Index: patches/patch-k2pdfoptlib_k2ocr_c
===================================================================
RCS file: patches/patch-k2pdfoptlib_k2ocr_c
diff -N patches/patch-k2pdfoptlib_k2ocr_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-k2pdfoptlib_k2ocr_c 17 Apr 2024 20:53:08 -0000
@@ -0,0 +1,55 @@
+Patch from Debian: "conditionally enable tesseract-related functions", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0007-k2pdfoptlib-k2ocr.c-conditionally-enable-tesseract-r.patch/
+
+Index: k2pdfoptlib/k2ocr.c
+--- k2pdfoptlib/k2ocr.c.orig
++++ k2pdfoptlib/k2ocr.c
+@@ -41,16 +41,16 @@ typedef struct
+ int ni;
+ char initstr[256];
+ } OCRTESSINITINFO;
+-#endif
+ static void k2ocr_show_envvar(char *buf,char *color,char *var);
+ static void k2ocr_status_line(char *buf,char *color,char *label,char *string);
+ static void k2ocr_tesslang_init(char *lang,int assume_yes);
++#endif
+ static void k2ocr_ocrwords_add_subregion_to_queue(MASTERINFO *masterinfo,OCRWORDS *words,
+ BMPREGION *region,K2PDFOPT_SETTINGS *k2settings);
+ #endif /* HAVE_OCR_LIB */
+
+ /* Functions to support extracting text from PDF using MuPDF lib */
+-#ifdef HAVE_MUPDF_LIB
++#if (defined(HAVE_MUPDF_LIB) || defined(HAVE_DJVU_LIB))
+ static void k2ocr_ocrwords_get_from_ocrlayer(MASTERINFO *masterinfo,OCRWORDS *words,
+ BMPREGION *region,K2PDFOPT_SETTINGS *k2settings);
+ static int ocrword_map_to_bitmap(OCRWORD *word,MASTERINFO *masterinfo,BMPREGION *region,
+@@ -425,6 +425,7 @@ static void *otinit(void *data)
+ void k2ocr_showlog(void)
+
+ {
++#ifdef HAVE_TESSERACT_LIB
+ static char *funcname="k2ocr_showlog";
+
+ if (k2ocr_tess_status<0 && k2ocr_logfile!=NULL && wfile_status(k2ocr_logfile)==1
+@@ -468,6 +469,7 @@ void k2ocr_showlog(void)
+ k2printf(header,divider,"End","\n");
+ willus_mem_free((double **)&bigbuf,funcname);
+ }
++#endif
+ }
+
+
+@@ -724,9 +726,13 @@ printf("Done k2ocr_ocrwords_add_subregion_to_queue()\n
+ void k2ocr_multithreaded_ocr(OCRWORDS *words,K2PDFOPT_SETTINGS *k2settings)
+
+ {
++#ifdef HAVE_TESSERACT_LIB
+ ocr_cpu_time_secs += ocrwords_multithreaded_ocr(words,ocrtess_api,maxthreads,
+ k2settings->dst_ocr,
+ k2settings->ocr_dpi);
++#else
++ printf("k2ocr_multithreaded_ocr(): tesseract unsupported\n");
++#endif
+ }
+
+
Index: patches/patch-k2pdfoptlib_k2pdfopt_h
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/patches/patch-k2pdfoptlib_k2pdfopt_h,v
retrieving revision 1.2
diff -u -p -r1.2 patch-k2pdfoptlib_k2pdfopt_h
--- patches/patch-k2pdfoptlib_k2pdfopt_h 11 Mar 2022 18:27:03 -0000 1.2
+++ patches/patch-k2pdfoptlib_k2pdfopt_h 17 Apr 2024 20:53:08 -0000
@@ -1,12 +1,15 @@
+Patch from Debian: "dst_ocr_visibility_flags workaround", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0006-k2pdfopt.h-dst_ocr_visibility_flags-workaround.patch/
+
Index: k2pdfoptlib/k2pdfopt.h
--- k2pdfoptlib/k2pdfopt.h.orig
+++ k2pdfoptlib/k2pdfopt.h
-@@ -95,7 +95,7 @@
- #endif
- */
+@@ -267,7 +267,7 @@ typedef struct
+ int text_only; /* Do not send figures to output file */
--#if (defined(HAVE_MUPDF) || defined(HAVE_GOCR_LIB) || defined(HAVE_TESSERACT_LIB))
-+#if (defined(HAVE_MUPDF_LIB) || defined(HAVE_GOCR_LIB) || defined(HAVE_TESSERACT_LIB))
- #if (!defined(HAVE_OCR_LIB))
- #define HAVE_OCR_LIB
- #endif
+ /* OCR */
+-#ifdef HAVE_OCR_LIB
++#if 1
+ char ocrout[128];
+ int dst_ocr;
+ int ocrvbb; /* New in v2.53 -ocrvbb option */
Index: patches/patch-k2pdfoptlib_textrows_c
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/patches/patch-k2pdfoptlib_textrows_c,v
retrieving revision 1.2
diff -u -p -r1.2 patch-k2pdfoptlib_textrows_c
--- patches/patch-k2pdfoptlib_textrows_c 11 Mar 2022 18:27:03 -0000 1.2
+++ patches/patch-k2pdfoptlib_textrows_c 17 Apr 2024 20:53:08 -0000
@@ -1,7 +1,7 @@
Index: k2pdfoptlib/textrows.c
--- k2pdfoptlib/textrows.c.orig
+++ k2pdfoptlib/textrows.c
-@@ -956,6 +956,11 @@ static int maxval(int *x,int n,int n0,int dx,int *inde
+@@ -996,6 +996,11 @@ static int maxval(int *x,int n,int n0,int dx,int *inde
if (imax<0 || x[i]>x[imax])
imax=i;
}
Index: patches/patch-leptonica_mod_allheaders_h
===================================================================
RCS file: patches/patch-leptonica_mod_allheaders_h
diff -N patches/patch-leptonica_mod_allheaders_h
--- patches/patch-leptonica_mod_allheaders_h 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,96 +0,0 @@
-Fix build with newer leptonica.
-
-Index: leptonica_mod/allheaders.h
---- leptonica_mod/allheaders.h.orig
-+++ leptonica_mod/allheaders.h
-@@ -2146,17 +2146,17 @@ LEPT_DLL extern PIX * pixReadMem ( const l_uint8 *data
- LEPT_DLL extern l_int32 pixReadHeaderMem ( const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap );
- LEPT_DLL extern l_int32 writeImageFileInfo ( const char *filename, FILE *fpout, l_int32 headeronly );
- LEPT_DLL extern l_int32 ioFormatTest ( const char *filename );
--LEPT_DLL extern L_RECOGA * recogaCreateFromRecog ( L_RECOG *recog );
--LEPT_DLL extern L_RECOGA * recogaCreateFromPixaa ( PIXAA *paa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift );
--LEPT_DLL extern L_RECOGA * recogaCreate ( l_int32 n );
--LEPT_DLL extern void recogaDestroy ( L_RECOGA **precoga );
--LEPT_DLL extern l_int32 recogaAddRecog ( L_RECOGA *recoga, L_RECOG *recog );
-+LEPT_DLL extern L_RECOG * recogaCreateFromRecog ( L_RECOG *recog );
-+LEPT_DLL extern L_RECOG * recogaCreateFromPixaa ( PIXAA *paa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift );
-+LEPT_DLL extern L_RECOG * recogaCreate ( l_int32 n );
-+LEPT_DLL extern void recogaDestroy ( L_RECOG **precoga );
-+LEPT_DLL extern l_int32 recogaAddRecog ( L_RECOG *recoga, L_RECOG *recog );
- LEPT_DLL extern l_int32 recogReplaceInRecoga ( L_RECOG **precog1, L_RECOG *recog2 );
--LEPT_DLL extern L_RECOG * recogaGetRecog ( L_RECOGA *recoga, l_int32 index );
--LEPT_DLL extern l_int32 recogaGetCount ( L_RECOGA *recoga );
-+LEPT_DLL extern L_RECOG * recogaGetRecog ( L_RECOG *recoga, l_int32 index );
-+LEPT_DLL extern l_int32 recogaGetCount ( L_RECOG *recoga );
- LEPT_DLL extern l_int32 recogGetCount ( L_RECOG *recog );
- LEPT_DLL extern l_int32 recogGetIndex ( L_RECOG *recog, l_int32 *pindex );
--LEPT_DLL extern L_RECOGA * recogGetParent ( L_RECOG *recog );
-+LEPT_DLL extern L_RECOG * recogGetParent ( L_RECOG *recog );
- LEPT_DLL extern l_int32 recogSetBootflag ( L_RECOG *recog );
- LEPT_DLL extern L_RECOG * recogCreateFromRecog ( L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift );
- LEPT_DLL extern L_RECOG * recogCreateFromPixa ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift );
-@@ -2167,13 +2167,13 @@ LEPT_DLL extern l_int32 recogGetClassIndex ( L_RECOG *
- LEPT_DLL extern l_int32 recogStringToIndex ( L_RECOG *recog, char *text, l_int32 *pindex );
- LEPT_DLL extern l_int32 recogGetClassString ( L_RECOG *recog, l_int32 index, char **pcharstr );
- LEPT_DLL extern l_int32 l_convertCharstrToInt ( const char *str, l_int32 *pval );
--LEPT_DLL extern L_RECOGA * recogaRead ( const char *filename );
--LEPT_DLL extern L_RECOGA * recogaReadStream ( FILE *fp );
--LEPT_DLL extern L_RECOGA * recogaReadMem ( const l_uint8 *data, size_t size );
--LEPT_DLL extern l_int32 recogaWrite ( const char *filename, L_RECOGA *recoga );
--LEPT_DLL extern l_int32 recogaWriteStream ( FILE *fp, L_RECOGA *recoga );
--LEPT_DLL extern l_int32 recogaWriteMem ( l_uint8 **pdata, size_t *psize, L_RECOGA *recoga );
--LEPT_DLL extern l_int32 recogaWritePixaa ( const char *filename, L_RECOGA *recoga );
-+LEPT_DLL extern L_RECOG * recogaRead ( const char *filename );
-+LEPT_DLL extern L_RECOG * recogaReadStream ( FILE *fp );
-+LEPT_DLL extern L_RECOG * recogaReadMem ( const l_uint8 *data, size_t size );
-+LEPT_DLL extern l_int32 recogaWrite ( const char *filename, L_RECOG *recoga );
-+LEPT_DLL extern l_int32 recogaWriteStream ( FILE *fp, L_RECOG *recoga );
-+LEPT_DLL extern l_int32 recogaWriteMem ( l_uint8 **pdata, size_t *psize, L_RECOG *recoga );
-+LEPT_DLL extern l_int32 recogaWritePixaa ( const char *filename, L_RECOG *recoga );
- LEPT_DLL extern L_RECOG * recogRead ( const char *filename );
- LEPT_DLL extern L_RECOG * recogReadStream ( FILE *fp );
- LEPT_DLL extern L_RECOG * recogReadMem ( const l_uint8 *data, size_t size );
-@@ -2189,11 +2189,11 @@ LEPT_DLL extern l_int32 recogDestroyDid ( L_RECOG *rec
- LEPT_DLL extern l_int32 recogDidExists ( L_RECOG *recog );
- LEPT_DLL extern L_RDID * recogGetDid ( L_RECOG *recog );
- LEPT_DLL extern l_int32 recogSetChannelParams ( L_RECOG *recog, l_int32 nlevels );
--LEPT_DLL extern l_int32 recogaIdentifyMultiple ( L_RECOGA *recoga, PIX *pixs, l_int32 nitems, l_int32 minw, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit );
-+LEPT_DLL extern l_int32 recogaIdentifyMultiple ( L_RECOG *recoga, PIX *pixs, l_int32 nitems, l_int32 minw, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit );
- LEPT_DLL extern l_int32 recogSplitIntoCharacters ( L_RECOG *recog, PIX *pixs, l_int32 minw, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, NUMA **pnaid, l_int32 debug );
- LEPT_DLL extern l_int32 recogCorrelationBestRow ( L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug );
- LEPT_DLL extern l_int32 recogCorrelationBestChar ( L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb );
--LEPT_DLL extern l_int32 recogaIdentifyPixa ( L_RECOGA *recoga, PIXA *pixa, NUMA *naid, PIX **ppixdb );
-+LEPT_DLL extern l_int32 recogaIdentifyPixa ( L_RECOG *recoga, PIXA *pixa, NUMA *naid, PIX **ppixdb );
- LEPT_DLL extern l_int32 recogIdentifyPixa ( L_RECOG *recog, PIXA *pixa, NUMA *naid, PIX **ppixdb );
- LEPT_DLL extern l_int32 recogIdentifyPix ( L_RECOG *recog, PIX *pixs, PIX **ppixdb );
- LEPT_DLL extern l_int32 recogSkipIdentify ( L_RECOG *recog );
-@@ -2204,7 +2204,7 @@ LEPT_DLL extern l_int32 rchExtract ( L_RCH *rch, l_int
- LEPT_DLL extern PIX * recogProcessToIdentify ( L_RECOG *recog, PIX *pixs, l_int32 pad );
- LEPT_DLL extern PIX * recogPreSplittingFilter ( L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_int32 debug );
- LEPT_DLL extern l_int32 recogSplittingFilter ( L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_int32 *premove, l_int32 debug );
--LEPT_DLL extern SARRAY * recogaExtractNumbers ( L_RECOGA *recoga, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa );
-+LEPT_DLL extern SARRAY * recogaExtractNumbers ( L_RECOG *recoga, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa );
- LEPT_DLL extern l_int32 recogSetTemplateType ( L_RECOG *recog, l_int32 templ_type );
- LEPT_DLL extern l_int32 recogSetScaling ( L_RECOG *recog, l_int32 scalew, l_int32 scaleh, l_int32 templ_type );
- LEPT_DLL extern l_int32 recogTrainLabelled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 multflag, l_int32 debug );
-@@ -2216,16 +2216,16 @@ LEPT_DLL extern l_int32 recogAverageSamples ( L_RECOG
- LEPT_DLL extern l_int32 pixaAccumulateSamples ( PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py );
- LEPT_DLL extern l_int32 recogTrainingFinished ( L_RECOG *recog, l_int32 debug );
- LEPT_DLL extern l_int32 recogRemoveOutliers ( L_RECOG *recog, l_float32 targetscore, l_float32 minfract, l_int32 debug );
--LEPT_DLL extern l_int32 recogaTrainingDone ( L_RECOGA *recoga, l_int32 *pdone );
--LEPT_DLL extern l_int32 recogaFinishAveraging ( L_RECOGA *recoga );
-+LEPT_DLL extern l_int32 recogaTrainingDone ( L_RECOG *recoga, l_int32 *pdone );
-+LEPT_DLL extern l_int32 recogaFinishAveraging ( L_RECOG *recoga );
- LEPT_DLL extern L_RECOG * recogTrainFromBoot ( PIXA *pixa, L_RECOG *recogboot, l_float32 minscore, l_int32 threshold, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 debug );
- LEPT_DLL extern l_int32 recogTrainUnlabelled ( L_RECOG *recog, L_RECOG *recogboot, PIX *pixs, BOX *box, l_float32 minscore, l_int32 debug );
- LEPT_DLL extern l_int32 recogPadTrainingSet ( L_RECOG **precog, l_int32 debug );
--LEPT_DLL extern l_int32 recogBestCorrelForPadding ( L_RECOG *recog, L_RECOGA *recoga, NUMA **pnaset, NUMA **pnaindex, NUMA **pnascore, NUMA **pnasum, PIXA *pixadb );
-+LEPT_DLL extern l_int32 recogBestCorrelForPadding ( L_RECOG *recog, L_RECOG *recoga, NUMA **pnaset, NUMA **pnaindex, NUMA **pnascore, NUMA **pnasum, PIXA *pixadb );
- LEPT_DLL extern l_int32 recogCorrelAverages ( L_RECOG *recog1, L_RECOG *recog2, NUMA **pnaindex, NUMA **pnascore, PIXA *pixadb );
- LEPT_DLL extern l_int32 recogSetPadParams ( L_RECOG *recog, const char *bootdir, const char *bootpattern, const char *bootpath, l_int32 boot_iters, l_int32 type, l_int32 min_nopad, l_int32 max_afterpad, l_int32 min_samples );
- LEPT_DLL extern L_RECOG * recogMakeBootDigitRecog ( l_int32 templ_type, l_int32 maxyshift, l_int32 display );
--LEPT_DLL extern l_int32 recogaShowContent ( FILE *fp, L_RECOGA *recoga, l_int32 display );
-+LEPT_DLL extern l_int32 recogaShowContent ( FILE *fp, L_RECOG *recoga, l_int32 display );
- LEPT_DLL extern l_int32 recogShowContent ( FILE *fp, L_RECOG *recog, l_int32 display );
- LEPT_DLL extern l_int32 recogDebugAverages ( L_RECOG *recog, l_int32 debug );
- LEPT_DLL extern l_int32 recogShowAverageTemplates ( L_RECOG *recog );
Index: patches/patch-mupdf_mod_font_c
===================================================================
RCS file: patches/patch-mupdf_mod_font_c
diff -N patches/patch-mupdf_mod_font_c
--- patches/patch-mupdf_mod_font_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,57 +0,0 @@
-Index: mupdf_mod/font.c
---- mupdf_mod/font.c.orig
-+++ mupdf_mod/font.c
-@@ -200,8 +200,8 @@ struct fz_font_context_s
- int ctx_refs;
- FT_Library ftlib;
- int ftlib_refs;
-- fz_load_system_font_func load_font;
-- fz_load_system_cjk_font_func load_cjk_font;
-+ fz_load_system_font_fn load_font;
-+ fz_load_system_cjk_font_fn load_cjk_font;
-
- /* Cached fallback fonts */
- struct { fz_font *serif, *sans; } fallback[256];
-@@ -258,7 +258,7 @@ void fz_drop_font_context(fz_context *ctx)
- }
- }
-
--void fz_install_load_system_font_funcs(fz_context *ctx, fz_load_system_font_func f, fz_load_system_cjk_font_func f_cjk)
-+void fz_install_load_system_font_funcs(fz_context *ctx, fz_load_system_font_fn f, fz_load_system_cjk_font_fn f_cjk, fz_load_system_fallback_font_fn f_fallback)
- {
- ctx->font->load_font = f;
- ctx->font->load_cjk_font = f_cjk;
-@@ -1354,27 +1354,27 @@ fz_render_t3_glyph_direct(fz_context *ctx, fz_device *
- void
- fz_print_font(fz_context *ctx, fz_output *out, fz_font *font)
- {
-- fz_printf(ctx, out, "font '%s' {\n", font->name);
-+ fz_write_printf(ctx, out, "font '%s' {\n", font->name);
-
- if (font->ft_face)
- {
-- fz_printf(ctx, out, "\tfreetype face %p\n", font->ft_face);
-+ fz_write_printf(ctx, out, "\tfreetype face %p\n", font->ft_face);
- if (font->flags.ft_substitute)
-- fz_printf(ctx, out, "\tsubstitute font\n");
-+ fz_write_printf(ctx, out, "\tsubstitute font\n");
- }
-
- if (font->t3procs)
- {
-- fz_printf(ctx, out, "\ttype3 matrix [%g %g %g %g]\n",
-+ fz_write_printf(ctx, out, "\ttype3 matrix [%g %g %g %g]\n",
- font->t3matrix.a, font->t3matrix.b,
- font->t3matrix.c, font->t3matrix.d);
-
-- fz_printf(ctx, out, "\ttype3 bbox [%g %g %g %g]\n",
-+ fz_write_printf(ctx, out, "\ttype3 bbox [%g %g %g %g]\n",
- font->bbox.x0, font->bbox.y0,
- font->bbox.x1, font->bbox.y1);
- }
-
-- fz_printf(ctx, out, "}\n");
-+ fz_write_printf(ctx, out, "}\n");
- }
-
- fz_rect *
Index: patches/patch-mupdf_mod_pdf-colorspace_c
===================================================================
RCS file: patches/patch-mupdf_mod_pdf-colorspace_c
diff -N patches/patch-mupdf_mod_pdf-colorspace_c
--- patches/patch-mupdf_mod_pdf-colorspace_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-Index: mupdf_mod/pdf-colorspace.c
---- mupdf_mod/pdf-colorspace.c.orig
-+++ mupdf_mod/pdf-colorspace.c
-@@ -109,7 +109,7 @@ load_separation(fz_context *ctx, pdf_document *doc, pd
- sep->base = base;
- sep->tint = tint;
-
-- cs = fz_new_colorspace(ctx, n == 1 ? "Separation" : "DeviceN", n, separation_to_rgb, NULL, free_separation, sep,
-+ cs = fz_new_colorspace(ctx, n == 1 ? "Separation" : "DeviceN", 0, n, separation_to_rgb, NULL, free_separation, sep,
- sizeof(struct separation) + (base ? base->size : 0) + fz_function_size(ctx, tint));
- }
- fz_catch(ctx)
Index: patches/patch-mupdf_mod_stext-device_c
===================================================================
RCS file: patches/patch-mupdf_mod_stext-device_c
diff -N patches/patch-mupdf_mod_stext-device_c
--- patches/patch-mupdf_mod_stext-device_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,12 +0,0 @@
-Index: mupdf_mod/stext-device.c
---- mupdf_mod/stext-device.c.orig
-+++ mupdf_mod/stext-device.c
-@@ -1097,7 +1097,7 @@ fz_parse_stext_options(fz_context *ctx, fz_stext_optio
- fz_device *
- fz_new_stext_device(fz_context *ctx, fz_stext_sheet *sheet, fz_stext_page *page, const fz_stext_options *opts)
- {
-- fz_stext_device *dev = fz_new_device(ctx, sizeof *dev);
-+ fz_stext_device *dev = fz_new_derived_device(ctx, fz_stext_device);
-
- dev->super.hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE;
-
Index: patches/patch-willuslib_CMakeLists_txt
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/patches/patch-willuslib_CMakeLists_txt,v
retrieving revision 1.2
diff -u -p -r1.2 patch-willuslib_CMakeLists_txt
--- patches/patch-willuslib_CMakeLists_txt 11 Mar 2022 18:27:03 -0000 1.2
+++ patches/patch-willuslib_CMakeLists_txt 17 Apr 2024 20:53:08 -0000
@@ -1,78 +1,35 @@
+Patch from Debian: "conditionally add source files", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0012-willuslib-CMakeLists.txt-conditionally-add-source-fi.patch/
+
Index: willuslib/CMakeLists.txt
--- willuslib/CMakeLists.txt.orig
+++ willuslib/CMakeLists.txt
-@@ -1,4 +1,4 @@
--project(k2pdfopt C)
-+project(k2pdfopt)
- cmake_minimum_required(VERSION 2.6)
-
- include_directories(..)
-@@ -6,13 +6,37 @@ include_directories(..)
+@@ -9,14 +9,26 @@ include_directories(..)
set(WILLUSLIB_SRC
ansi.c array.c bmp.c bmpdjvu.c bmpmupdf.c dtcompress.c filelist.c
fontdata.c fontrender.c gslpolyfit.c linux.c math.c mem.c ocr.c
-- ocrjocr.c ocrtess.c pdfwrite.c point2d.c render.c strbuf.c string.c
-+ ocrtess.c pdfwrite.c point2d.c render.c strbuf.c string.c
- token.c wfile.c wgs.c wgui.c willusversion.c win.c winbmp.c
- wincomdlg.c winmbox.c winshell.c wmupdf.c wmupdfinfo.c wpdf.c wsys.c
-- wzfile.c wleptonica.c
-+ wzfile.c
-+
-+ # mupdf mods
-+ ../mupdf_mod/font.c
-+ ../mupdf_mod/font-win32.c
-+ ../mupdf_mod/pdf-annot.c
-+ ../mupdf_mod/pdf-colorspace.c
-+ ../mupdf_mod/pdf-font.c
-+ ../mupdf_mod/pdf-parse.c
-+ ../mupdf_mod/pdf-type3.c
-+ ../mupdf_mod/stext-device.c
-+ ../mupdf_mod/string.c
-+
-+ # tesseract mods
-+ ../tesseract_mod/dawg.cpp
-+ ../tesseract_mod/imagedata.cpp
-+ ../tesseract_mod/tesscapi.cpp
-+ ../tesseract_mod/tessedit.cpp
-+ ../tesseract_mod/thresholder.cpp
-+
-+ # leptonica mods
-+ wleptonica.c
-+ ../leptonica_mod/dewarp2.c
+- ocrgocr.c ocrtess.c ocrwords.c pdffonts.c pdfwrite.c point2d.c
+- render.c strbuf.c string.c token.c wfile.c wgs.c wgui.c
++ ocrwords.c pdffonts.c pdfwrite.c point2d.c
++ render.c strbuf.c string.c token.c wfile.c wgui.c
+ willusversion.c win.c winbmp.c wincomdlg.c wininet.c winmbox.c
+ winshell.c winshellwapi.c wleptonica.c wmupdf.c wmupdfinfo.c wpdf.c
+ wpdfoutline.c wpdfutil.c wsys.c wzfile.c
)
-+
# ocr.c
# win.c winbmp.c winmbox.c wincomdlg.c wgui.c winshell.c
-+# wleptonica.c
++
++if(HAVE_GHOSTSCRIPT)
++ set(WILLUSLIB_SRC ${WILLUSLIB_SRC} wgs.c)
++endif(HAVE_GHOSTSCRIPT)
++
++if(GOCR_FOUND)
++ set(WILLUSLIB_SRC ${WILLUSLIB_SRC} ocrgocr.c)
++endif(GOCR_FOUND)
++
++if(TESSERACT_FOUND)
++ set(WILLUSLIB_SRC ${WILLUSLIB_SRC} ocrtess.c)
++endif(TESSERACT_FOUND)
if(DJVU_FOUND)
set(WILLUSLIB_SRC ${WILLUSLIB_SRC} bmpdjvu.c)
-@@ -21,10 +45,28 @@ endif(DJVU_FOUND)
- if(MUPDF_FOUND)
- set(WILLUSLIB_SRC ${WILLUSLIB_SRC} bmpmupdf.c wmupdf.c)
- endif(MUPDF_FOUND)
-+if(MUPDF_LIB)
-+ set(WILLUSLIB_SRC ${WILLUSLIB_SRC} bmpmupdf.c wmupdf.c)
-+ include_directories(SYSTEM ../mupdf/source/fitz)
-+endif(MUPDF_LIB)
-
-+if(LEPT_LIB)
-+ include_directories(SYSTEM ../leptonica/src)
-+endif()
-+
-+if(TESSERACT_LIB)
-+ include_directories(SYSTEM ../tesseract/ccutil ../tesseract/api
-+ ../tesseract/ccmain ../tesseract/ccstruct ../tesseract/viewer
-+ ../tesseract/dict ../tesseract/textord ../tesseract/cutil
-+ ../tesseract/wordrec ../tesseract/classify)
-+endif()
-+
- message("-- Willuslib sources: ${WILLUSLIB_SRC}")
-
- add_library(willuslib ${WILLUSLIB_SRC})
-+if(MUPDF_LIB)
-+ target_link_libraries(willuslib ${MUPDF_LIB})
-+endif(MUPDF_LIB)
-
- # HAVE_GOCR_LIB: ocrjocr.c
- # HAVE_TESSERACT_LIB: ocrtess.c
Index: patches/patch-willuslib_bmpdjvu_c
===================================================================
RCS file: patches/patch-willuslib_bmpdjvu_c
diff -N patches/patch-willuslib_bmpdjvu_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-willuslib_bmpdjvu_c 17 Apr 2024 20:53:08 -0000
@@ -0,0 +1,15 @@
+Patch from Debian: "use system djvu", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0010-willuslib-use-system-djvu.patch/
+
+Index: willuslib/bmpdjvu.c
+--- willuslib/bmpdjvu.c.orig
++++ willuslib/bmpdjvu.c
+@@ -23,7 +23,7 @@
+ #include "willus.h"
+
+ #ifdef HAVE_DJVU_LIB
+-#include <djvu.h>
++#include <libdjvu/ddjvuapi.h>
+
+ static void handle(int wait,ddjvu_context_t *ctx);
+ static void djvu_add_page_info(char *buf,ddjvu_document_t *doc,int page,int npages);
Index: patches/patch-willuslib_gslpolyfit_c
===================================================================
RCS file: patches/patch-willuslib_gslpolyfit_c
diff -N patches/patch-willuslib_gslpolyfit_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-willuslib_gslpolyfit_c 17 Apr 2024 20:53:08 -0000
@@ -0,0 +1,15 @@
+Patch from Debian: "use system gsl", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0008-willuslib-gslpolyfit.c-use-system-gsl.patch/
+
+Index: willuslib/gslpolyfit.c
+--- willuslib/gslpolyfit.c.orig
++++ willuslib/gslpolyfit.c
+@@ -24,7 +24,7 @@
+ #include <stdlib.h>
+ #include "willus.h"
+ #ifdef HAVE_GSL_LIB
+-#include <gsl.h>
++#include <gsl/gsl_multifit.h>
+ #endif
+
+ void gslpolyfit(double *x,double *y0,int n,int d,double *c0)
Index: patches/patch-willuslib_ocrtess_c
===================================================================
RCS file: patches/patch-willuslib_ocrtess_c
diff -N patches/patch-willuslib_ocrtess_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-willuslib_ocrtess_c 17 Apr 2024 20:53:08 -0000
@@ -0,0 +1,16 @@
+Patch from Debian: "use system leptonica", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0005-willuslib-use-system-leptonica.patch/
+
+Index: willuslib/ocrtess.c
+--- willuslib/ocrtess.c.orig
++++ willuslib/ocrtess.c
+@@ -25,8 +25,7 @@
+ #include <string.h>
+ #include <ctype.h>
+ #include <locale.h>
+-#include <leptonica.h>
+-#include <tesseract.h>
++#include <leptonica/allheaders.h>
+ #include "willus.h"
+
+ char *ocrtess_langnames[] =
Index: patches/patch-willuslib_pdfwrite_c
===================================================================
RCS file: patches/patch-willuslib_pdfwrite_c
diff -N patches/patch-willuslib_pdfwrite_c
Index: patches/patch-willuslib_willus_h
===================================================================
RCS file: /cvs/ports/converters/k2pdfopt/patches/patch-willuslib_willus_h,v
retrieving revision 1.2
diff -u -p -r1.2 patch-willuslib_willus_h
--- patches/patch-willuslib_willus_h 11 Mar 2022 18:27:03 -0000 1.2
+++ patches/patch-willuslib_willus_h 17 Apr 2024 20:53:08 -0000
@@ -4,7 +4,7 @@
Index: willuslib/willus.h
--- willuslib/willus.h.orig
+++ willuslib/willus.h
-@@ -107,7 +107,7 @@ typedef double real;
+@@ -113,7 +113,7 @@ typedef double real;
#define MINGW
#endif
@@ -13,7 +13,7 @@ Index: willuslib/willus.h
#define UNIX
#endif
-@@ -160,7 +160,8 @@ typedef double real;
+@@ -166,7 +166,8 @@ typedef double real;
#define WILLUS_X86
#endif
Index: patches/patch-willuslib_wleptonica_c
===================================================================
RCS file: patches/patch-willuslib_wleptonica_c
diff -N patches/patch-willuslib_wleptonica_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-willuslib_wleptonica_c 17 Apr 2024 20:53:08 -0000
@@ -0,0 +1,24 @@
+Patch from Debian: "use system leptonica", see
+https://sources.debian.org/patches/k2pdfopt/2.55%2Bds-2/0005-willuslib-use-system-leptonica.patch/
+
+Index: willuslib/wleptonica.c
+--- willuslib/wleptonica.c.orig
++++ willuslib/wleptonica.c
+@@ -23,7 +23,7 @@
+ #include "willus.h"
+
+ #ifdef HAVE_LEPTONICA_LIB
+-#include <leptonica.h>
++#include <leptonica/allheaders.h>
+
+ static void wlept_pix_from_bmp(PIX **pixptr,WILLUSBITMAP *bmp);
+ static void wlept_bmp_from_pix(WILLUSBITMAP *bmp,PIX *pix);
+@@ -135,7 +135,7 @@ pixWrite("pixb.png",pixb,IFF_PNG);
+ dew1=dewarpCreate(pixb,1);
+ pixDestroy(&pixb);
+ dewarpaInsertDewarp(dewa,dew1);
+- dewarpBuildPageModel_ex(dew1,debug,fit_order);
++ dewarpBuildPageModel(dew1,debug);
+ if (bmp1!=NULL)
+ {
+ PIX *pix2,*pix2d;
Index: patches/patch-willuslib_wmupdf_c
===================================================================
RCS file: patches/patch-willuslib_wmupdf_c
diff -N patches/patch-willuslib_wmupdf_c
--- patches/patch-willuslib_wmupdf_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,21 +0,0 @@
-Index: willuslib/wmupdf.c
---- willuslib/wmupdf.c.orig
-+++ willuslib/wmupdf.c
-@@ -1051,7 +1051,7 @@ printf(" srcptr = %p\n",srcbuf->data);
-
- whitespace[0]=' ';
- whitespace[1]='\0';
-- fz_write_buffer(ctx,dstbuf,whitespace,1);
-+ fz_append_data(ctx,dstbuf,whitespace,1);
- }
- /* mupdf 1.10a--replace write with append */
- /*
-@@ -1153,7 +1153,7 @@ static int new_stream_object(pdf_document *xref,fz_con
- pdf_update_object(ctx,xref,ref,obj);
- pdf_drop_obj(ctx,obj);
- fzbuf=fz_new_buffer(ctx,strlen(buf));
-- fz_write_buffer(ctx,fzbuf,(unsigned char *)buf,strlen(buf));
-+ fz_append_data(ctx,fzbuf,(unsigned char *)buf,strlen(buf));
- wmupdf_update_stream(ctx,xref,ref,fzbuf);
- fz_drop_buffer(ctx,fzbuf);
- return(ref);
Index: patches/patch-willuslib_wmupdfinfo_c
===================================================================
RCS file: patches/patch-willuslib_wmupdfinfo_c
diff -N patches/patch-willuslib_wmupdfinfo_c
--- patches/patch-willuslib_wmupdfinfo_c 11 Mar 2022 18:27:03 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,293 +0,0 @@
-Index: willuslib/wmupdfinfo.c
---- willuslib/wmupdfinfo.c.orig
-+++ willuslib/wmupdfinfo.c
-@@ -227,7 +227,7 @@ static void showglobalinfo(fz_context *ctx, globals *g
- fz_printf(ctx, out, "\nPages: %d\n\n", glo->pagecount);
- }
- */
-- fz_printf(ctx,out,"PDF VERSION: %d.%d\n",doc->version/10,doc->version%10);
-+ fz_write_printf(ctx,out,"PDF VERSION: %d.%d\n",doc->version/10,doc->version%10);
-
- obj = pdf_dict_gets(ctx,pdf_trailer(ctx,doc), "Info");
- if (obj)
-@@ -241,7 +241,7 @@ static void showglobalinfo(fz_context *ctx, globals *g
- buf=malloc(n+2);
- if (buf==NULL)
- {
-- fz_printf(ctx,out,"Info object (%d %d R):\n",pdf_to_num(ctx,obj),pdf_to_gen(ctx,obj));
-+ fz_write_printf(ctx,out,"Info object (%d %d R):\n",pdf_to_num(ctx,obj),pdf_to_gen(ctx,obj));
- pdf_print_obj(ctx,out,robj,1);
- }
- else
-@@ -263,18 +263,18 @@ static void showglobalinfo(fz_context *ctx, globals *g
- sprintf(buf1,"PAGE SIZE: %.2f x %.2f in\n",
- (glo->dim[0].u.dim.bbox->x1-glo->dim[0].u.dim.bbox->x0)/72.,
- (glo->dim[0].u.dim.bbox->y1-glo->dim[0].u.dim.bbox->y0)/72.);
-- fz_printf(ctx,out,"%s",buf1);
-+ fz_write_printf(ctx,out,"%s",buf1);
- }
- else
- {
- if (glo->dims>1)
-- fz_printf(ctx,out,"PAGE SIZE: (varies)\n");
-+ fz_write_printf(ctx,out,"PAGE SIZE: (varies)\n");
- }
-- fz_printf(ctx,out, "PAGES: %d\n\n", glo->pagecount);
-+ fz_write_printf(ctx,out, "PAGES: %d\n\n", glo->pagecount);
- obj = pdf_dict_gets(ctx,pdf_trailer(ctx,doc), "Encrypt");
- if (obj)
- {
-- fz_printf(ctx,out, "\nEncryption object (%d %d R):\n", pdf_to_num(ctx,obj), pdf_to_gen(ctx,obj));
-+ fz_write_printf(ctx,out, "\nEncryption object (%d %d R):\n", pdf_to_num(ctx,obj), pdf_to_gen(ctx,obj));
- pdf_print_obj(ctx,out, pdf_resolve_indirect(ctx,obj), 1);
- }
- }
-@@ -302,15 +302,15 @@ static void display_pdf_field(fz_context *ctx,fz_outpu
- int j;
- for (j=i+lenfn+1;buf[j]!='\0' && buf[j]!=')';j++);
- buf[j]='\0';
-- fz_printf(ctx,out,"%s",label3);
-+ fz_write_printf(ctx,out,"%s",label3);
- if (in_string(fieldname,"date")>=0)
- {
- char newdate[128];
- date_convert(newdate,&buf[i+lenfn+1]);
-- fz_printf(ctx,out,"%s\n",newdate);
-+ fz_write_printf(ctx,out,"%s\n",newdate);
- }
- else
-- fz_printf(ctx,out,"%s\n",&buf[i+lenfn+1]);
-+ fz_write_printf(ctx,out,"%s\n",&buf[i+lenfn+1]);
- break;
- }
- }
-@@ -334,7 +334,7 @@ static void display_file_size(fz_context *ctx,fz_outpu
- fclose(f);
- str_format_int_grouped(sizecommas,sz);
- sprintf(buf,"FILE SIZE: %.1f kB (%s bytes)\n",sz/1024.,sizecommas);
-- fz_printf(ctx,out,"%s",buf);
-+ fz_write_printf(ctx,out,"%s",buf);
- }
-
-
-@@ -819,7 +819,7 @@ static void gatherpageinfo(fz_context *ctx, globals *g
-
- if (page > glo->pagecount)
- {
-- fz_printf(ctx,glo->out,"[Error: Page %d not found.]\n",page);
-+ fz_write_printf(ctx,glo->out,"[Error: Page %d not found.]\n",page);
- return;
- }
- pageref = pdf_lookup_page_obj(ctx, glo->doc, page-1);
-@@ -845,7 +845,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
-
- if (show & DIMENSIONS && glo->dims > 0)
- {
-- fz_printf(ctx, out, "Mediaboxes (%d):\n", glo->dims);
-+ fz_write_printf(ctx, out, "Mediaboxes (%d):\n", glo->dims);
- for (i = 0; i < glo->dims; i++)
- {
- char buf1[64];
-@@ -853,7 +853,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- sprintf(buf1,"%.2f x %.2f",
- (glo->dim[i].u.dim.bbox->x1-glo->dim[i].u.dim.bbox->x0)/72.,
- (glo->dim[i].u.dim.bbox->y1-glo->dim[i].u.dim.bbox->y0)/72.);
-- fz_printf(ctx, out, PAGE_FMT "[ %g %g %g %g ] (%s in)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "[ %g %g %g %g ] (%s in)\n",
- glo->dim[i].page,
- pdf_to_num(ctx, glo->dim[i].pageref),
- pdf_to_gen(ctx, glo->dim[i].pageref),
-@@ -862,15 +862,15 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- glo->dim[i].u.dim.bbox->x1,
- glo->dim[i].u.dim.bbox->y1,buf1);
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & FONTS && glo->fonts > 0)
- {
-- fz_printf(ctx, out, "Fonts (%d):\n", glo->fonts);
-+ fz_write_printf(ctx, out, "Fonts (%d):\n", glo->fonts);
- for (i = 0; i < glo->fonts; i++)
- {
-- fz_printf(ctx, out, PAGE_FMT "%s '%s' (%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "%s '%s' (%d %d R)\n",
- glo->font[i].page,
- pdf_to_num(ctx, glo->font[i].pageref),
- pdf_to_gen(ctx, glo->font[i].pageref),
-@@ -879,18 +879,18 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- pdf_to_num(ctx, glo->font[i].u.font.obj),
- pdf_to_gen(ctx, glo->font[i].u.font.obj));
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & IMAGES && glo->images > 0)
- {
-- fz_printf(ctx, out, "Images (%d):\n", glo->images);
-+ fz_write_printf(ctx, out, "Images (%d):\n", glo->images);
- for (i = 0; i < glo->images; i++)
- {
- char *cs = NULL;
- char *altcs = NULL;
-
-- fz_printf(ctx, out, PAGE_FMT "[ ",
-+ fz_write_printf(ctx, out, PAGE_FMT "[ ",
- glo->image[i].page,
- pdf_to_num(ctx, glo->image[i].pageref),
- pdf_to_gen(ctx, glo->image[i].pageref));
-@@ -906,7 +906,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- if (strstr(filter, "Decode"))
- *(strstr(filter, "Decode")) = '\0';
-
-- fz_printf(ctx, out, "%s%s",
-+ fz_write_printf(ctx, out, "%s%s",
- filter,
- j == pdf_array_len(ctx, glo->image[i].u.image.filter) - 1 ? "" : " ");
- fz_free(ctx, filter);
-@@ -920,11 +920,11 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- if (strstr(filter, "Decode"))
- *(strstr(filter, "Decode")) = '\0';
-
-- fz_printf(ctx, out, "%s", filter);
-+ fz_write_printf(ctx, out, "%s", filter);
- fz_free(ctx, filter);
- }
- else
-- fz_printf(ctx, out, "Raw");
-+ fz_write_printf(ctx, out, "Raw");
-
- if (glo->image[i].u.image.cs)
- {
-@@ -965,7 +965,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- fz_strlcpy(altcs, "Sep", 4);
- }
-
-- fz_printf(ctx, out, " ] %dx%d %dbpc %s%s%s (%d %d R)\n",
-+ fz_write_printf(ctx, out, " ] %dx%d %dbpc %s%s%s (%d %d R)\n",
- pdf_to_int(ctx, glo->image[i].u.image.width),
- pdf_to_int(ctx, glo->image[i].u.image.height),
- glo->image[i].u.image.bpc ? pdf_to_int(ctx, glo->image[i].u.image.bpc) : 1,
-@@ -978,12 +978,12 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- fz_free(ctx, cs);
- fz_free(ctx, altcs);
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & SHADINGS && glo->shadings > 0)
- {
-- fz_printf(ctx, out, "Shading patterns (%d):\n", glo->shadings);
-+ fz_write_printf(ctx, out, "Shading patterns (%d):\n", glo->shadings);
- for (i = 0; i < glo->shadings; i++)
- {
- char *shadingtype[] =
-@@ -998,7 +998,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- "Tensor patch",
- };
-
-- fz_printf(ctx, out, PAGE_FMT "%s (%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "%s (%d %d R)\n",
- glo->shading[i].page,
- pdf_to_num(ctx, glo->shading[i].pageref),
- pdf_to_gen(ctx, glo->shading[i].pageref),
-@@ -1006,12 +1006,12 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- pdf_to_num(ctx, glo->shading[i].u.shading.obj),
- pdf_to_gen(ctx, glo->shading[i].u.shading.obj));
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & PATTERNS && glo->patterns > 0)
- {
-- fz_printf(ctx, out, "Patterns (%d):\n", glo->patterns);
-+ fz_write_printf(ctx, out, "Patterns (%d):\n", glo->patterns);
- for (i = 0; i < glo->patterns; i++)
- {
- if (pdf_to_int(ctx, glo->pattern[i].u.pattern.type) == 1)
-@@ -1030,7 +1030,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- "Constant/fast tiling",
- };
-
-- fz_printf(ctx, out, PAGE_FMT "Tiling %s %s (%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "Tiling %s %s (%d %d R)\n",
- glo->pattern[i].page,
- pdf_to_num(ctx, glo->pattern[i].pageref),
- pdf_to_gen(ctx, glo->pattern[i].pageref),
-@@ -1041,7 +1041,7 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- }
- else
- {
-- fz_printf(ctx, out, PAGE_FMT "Shading %d %d R (%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "Shading %d %d R (%d %d R)\n",
- glo->pattern[i].page,
- pdf_to_num(ctx, glo->pattern[i].pageref),
- pdf_to_gen(ctx, glo->pattern[i].pageref),
-@@ -1051,15 +1051,15 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- pdf_to_gen(ctx, glo->pattern[i].u.pattern.obj));
- }
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & XOBJS && glo->forms > 0)
- {
-- fz_printf(ctx, out, "Form xobjects (%d):\n", glo->forms);
-+ fz_write_printf(ctx, out, "Form xobjects (%d):\n", glo->forms);
- for (i = 0; i < glo->forms; i++)
- {
-- fz_printf(ctx, out, PAGE_FMT "Form%s%s%s%s (%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "Form%s%s%s%s (%d %d R)\n",
- glo->form[i].page,
- pdf_to_num(ctx, glo->form[i].pageref),
- pdf_to_gen(ctx, glo->form[i].pageref),
-@@ -1070,22 +1070,22 @@ printinfo(fz_context *ctx, globals *glo, char *filenam
- pdf_to_num(ctx, glo->form[i].u.form.obj),
- pdf_to_gen(ctx, glo->form[i].u.form.obj));
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
-
- if (show & XOBJS && glo->psobjs > 0)
- {
-- fz_printf(ctx, out, "Postscript xobjects (%d):\n", glo->psobjs);
-+ fz_write_printf(ctx, out, "Postscript xobjects (%d):\n", glo->psobjs);
- for (i = 0; i < glo->psobjs; i++)
- {
-- fz_printf(ctx, out, PAGE_FMT "(%d %d R)\n",
-+ fz_write_printf(ctx, out, PAGE_FMT "(%d %d R)\n",
- glo->psobj[i].page,
- pdf_to_num(ctx, glo->psobj[i].pageref),
- pdf_to_gen(ctx, glo->psobj[i].pageref),
- pdf_to_num(ctx, glo->psobj[i].u.form.obj),
- pdf_to_gen(ctx, glo->psobj[i].u.form.obj));
- }
-- fz_printf(ctx, out, "\n");
-+ fz_write_printf(ctx, out, "\n");
- }
- }
-
-@@ -1121,7 +1121,7 @@ static void pdfinfo_info(fz_context *ctx, fz_output *o
-
- glo.out = out;
- glo.ctx = ctx;
-- fz_printf(ctx,out,"FILE: %s\n",filename);
-+ fz_write_printf(ctx,out,"FILE: %s\n",filename);
- glo.doc = pdf_open_document(ctx,filename);
- if (pdf_needs_password(ctx,glo.doc))
- if (!pdf_authenticate_password(ctx, glo.doc, password))
-@@ -1129,7 +1129,7 @@ static void pdfinfo_info(fz_context *ctx, fz_output *o
- glo.pagecount=pdf_count_pages(ctx,glo.doc);
- gather_all_info(ctx,&glo,filename,show,pagelist);
- showglobalinfo(ctx,&glo,filename);
-- fz_printf(ctx,glo.out," Page Ref Details\n");
-+ fz_write_printf(ctx,glo.out," Page Ref Details\n");
- printinfo(ctx,&glo,filename,show);
- closexref(ctx,&glo);
- }
converters/k2pdfopt: unbreak/update to 2.55