summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/0040-remove_git.patch12
-rw-r--r--debian/patches/0050-Use-python3-shebang.patch16
-rw-r--r--debian/patches/0060-cross.patch54
-rw-r--r--debian/patches/0100-source_spelling.patch194
-rw-r--r--debian/patches/0125-multiarch_dll_search_path.patch44
-rw-r--r--debian/patches/0140-avahi.patch90
-rw-r--r--debian/patches/0145-avahi.patch34
-rw-r--r--debian/patches/0150-i386-test.patch48
-rw-r--r--debian/patches/0155-hurd_PATH_MAX.patch364
-rw-r--r--debian/patches/0175-fix_tests.patch96
-rw-r--r--debian/patches/0180-Escl_force_idle_status.patch253
-rw-r--r--debian/patches/0200-disable-check-equal-stderr.patch23
-rw-r--r--debian/patches/0605-fix_groff-warnings.patch20
-rw-r--r--debian/patches/0610-fix_groff_font_warnings.patch55
-rw-r--r--debian/patches/0705-kfreebsd.patch17
-rw-r--r--debian/patches/series15
16 files changed, 1335 insertions, 0 deletions
diff --git a/debian/patches/0040-remove_git.patch b/debian/patches/0040-remove_git.patch
new file mode 100644
index 0000000..cc70771
--- /dev/null
+++ b/debian/patches/0040-remove_git.patch
@@ -0,0 +1,12 @@
+Description: fix missing .tarball-version if git isn't used
+Author: Jörg Frings-Fürst <debian@jff.email>
+Bug: https://gitlab.com/sane-project/backends/-/issues/440
+Last-Update: 2021-02-17
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/.tarball-version
+===================================================================
+--- /dev/null
++++ trunk/.tarball-version
+@@ -0,0 +1 @@
++1.2.1-debian
diff --git a/debian/patches/0050-Use-python3-shebang.patch b/debian/patches/0050-Use-python3-shebang.patch
new file mode 100644
index 0000000..c3e85be
--- /dev/null
+++ b/debian/patches/0050-Use-python3-shebang.patch
@@ -0,0 +1,16 @@
+Description: Use python3 shebang
+Author: Jörg Frings-Fürst <debian@jff.email>
+Forwarded: not-needed
+Last-Update: 2020-08-28
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/backend/pixma/scripts/pixma_gen_options.py
+===================================================================
+--- trunk.orig/backend/pixma/scripts/pixma_gen_options.py
++++ trunk/backend/pixma/scripts/pixma_gen_options.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+
+ from __future__ import print_function
+ import sys,os,re
diff --git a/debian/patches/0060-cross.patch b/debian/patches/0060-cross.patch
new file mode 100644
index 0000000..2bb5965
--- /dev/null
+++ b/debian/patches/0060-cross.patch
@@ -0,0 +1,54 @@
+Description: Make gphoto2 detection use the host architecture pkg-config
+Author: Helmut Grohne <helmut@subdivi.de>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=948711
+Forwarded: not-needed
+Last-Update: 2020-08-30
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/acinclude.m4
+===================================================================
+--- trunk.orig/acinclude.m4
++++ trunk/acinclude.m4
+@@ -422,15 +422,19 @@ AC_DEFUN([SANE_CHECK_GPHOTO2],
+ # a program. And, if that works, then add the -l flags to
+ # GPHOTO2_LIBS and any other flags to GPHOTO2_LDFLAGS to pass to
+ # sane-config.
+- if test "$with_gphoto2" != "no" ; then
+- AC_CHECK_TOOL(HAVE_GPHOTO2, pkg-config, false)
++ AS_IF([test "$with_gphoto2" != "no"],[
++ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++ if test "x$PKG_CONFIG" = x; then
++ HAVE_GPHOTO2=false
++ else
++ HAVE_GPHOTO2=$PKG_CONFIG
++ fi
+
+ if test ${HAVE_GPHOTO2} != "false" ; then
+- if pkg-config --exists libgphoto2 ; then
+- with_gphoto2="`pkg-config --modversion libgphoto2`"
+- GPHOTO2_CPPFLAGS="`pkg-config --cflags libgphoto2`"
+- GPHOTO2_LIBS="`pkg-config --libs libgphoto2`"
+-
++ if $PKG_CONFIG --exists libgphoto2 ; then
++ with_gphoto2="`$PKG_CONFIG --modversion libgphoto2`"
++ GPHOTO2_CPPFLAGS="`$PKG_CONFIG --cflags libgphoto2`"
++ GPHOTO2_LIBS="`$PKG_CONFIG --libs libgphoto2`"
+ saved_CPPFLAGS="${CPPFLAGS}"
+ CPPFLAGS="${GPHOTO2_CPPFLAGS}"
+ saved_LIBS="${LIBS}"
+@@ -450,13 +454,13 @@ AC_DEFUN([SANE_CHECK_GPHOTO2],
+ GPHOTO2_LIBS=""
+ else
+ SANE_EXTRACT_LDFLAGS(GPHOTO2_LIBS, GPHOTO2_LDFLAGS)
+- if pkg-config --atleast-version=2.5.0 libgphoto2; then
++ if $PKG_CONFIG --atleast-version=2.5.0 libgphoto2; then
+ AC_DEFINE([GPLOGFUNC_NO_VARGS], [1],
+ [Define if GPLogFunc does not take a va_list.])
+ fi
+ fi
+ fi
+- fi
++ ])
+ AC_SUBST(GPHOTO2_CPPFLAGS)
+ AC_SUBST(GPHOTO2_LIBS)
+ AC_SUBST(GPHOTO2_LDFLAGS)
diff --git a/debian/patches/0100-source_spelling.patch b/debian/patches/0100-source_spelling.patch
new file mode 100644
index 0000000..b91aa72
--- /dev/null
+++ b/debian/patches/0100-source_spelling.patch
@@ -0,0 +1,194 @@
+Description: Correct source typos
+Author: Jörg Frings-Fürst <debian@jff.email>
+Forwarded: not-needed
+Last-Update: 2022-02-04
+----
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/backend/epsonds-jpeg.c
+===================================================================
+--- trunk.orig/backend/epsonds-jpeg.c
++++ trunk/backend/epsonds-jpeg.c
+@@ -194,7 +194,7 @@ void eds_decode_jpeg(epsonds_scanner*s,
+ }
+ }
+ }
+- DBG(10,"decodded lines = %d\n", sum);
++ DBG(10,"decoded lines = %d\n", sum);
+
+ // abandon unncessary data
+ if ((JDIMENSION)sum < jpeg_cinfo.output_height)
+Index: trunk/frontend/jpegtopdf.c
+===================================================================
+--- trunk.orig/frontend/jpegtopdf.c
++++ trunk/frontend/jpegtopdf.c
+@@ -289,7 +289,7 @@ SANE_Int sane_pdf_start_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -330,7 +330,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -350,7 +350,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -364,7 +364,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -380,7 +380,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -390,7 +390,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( _get_current_time( &tm, &sign_c, &tz_h, &tz_m ) == SANE_ERR ) {
+- fprintf ( stderr, " Error is occured in _get_current_time.\n" );
++ fprintf ( stderr, " Error is occurred in _get_current_time.\n" );
+ goto EXIT;
+ }
+ /* Dates format */
+@@ -408,7 +408,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -424,7 +424,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -438,7 +438,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count += SANE_PDF_FIRST_PAGE_ID - 1;
+@@ -454,7 +454,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count ++;
+@@ -476,7 +476,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -572,7 +572,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -590,7 +590,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ /* write Contents(2) */
+@@ -602,7 +602,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -613,7 +613,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -631,7 +631,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -652,7 +652,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -684,7 +684,7 @@ SANE_Int sane_pdf_end_page( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -702,7 +702,7 @@ SANE_Int sane_pdf_end_page( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
diff --git a/debian/patches/0125-multiarch_dll_search_path.patch b/debian/patches/0125-multiarch_dll_search_path.patch
new file mode 100644
index 0000000..67b9484
--- /dev/null
+++ b/debian/patches/0125-multiarch_dll_search_path.patch
@@ -0,0 +1,44 @@
+Description: Keep /usr/lib/sane as a fallback for SANE backends
+ Make /usr/lib/arch_triplet/sane the default location for SANE backends,
+ but keep /usr/lib/sane as a fallback for now.
+Author: Julien BLACHE <jblache@debian.org>
+
+Index: trunk/backend/dll.c
+===================================================================
+--- trunk.orig/backend/dll.c
++++ trunk/backend/dll.c
+@@ -468,18 +468,18 @@ load (struct backend *be)
+
+ if (path)
+ {
+- src_len = strlen (path) + strlen (DIR_SEP) + strlen(LIBDIR) + 1;
++ src_len = strlen (path) + strlen (DIR_SEP) + strlen(DEB_DLL_LIBDIR) + 1;
+ src = malloc (src_len);
+ if (!src)
+ {
+ DBG (1, "load: malloc failed: %s\n", strerror (errno));
+ return SANE_STATUS_NO_MEM;
+ }
+- snprintf (src, src_len, "%s%s%s", path, DIR_SEP, LIBDIR);
++ snprintf (src, src_len, "%s%s%s", path, DIR_SEP, DEB_DLL_LIBDIR);
+ }
+ else
+ {
+- src = LIBDIR;
++ src = DEB_DLL_LIBDIR;
+ src = strdup (src);
+ if (!src)
+ {
+Index: trunk/backend/Makefile.am
+===================================================================
+--- trunk.orig/backend/Makefile.am
++++ trunk/backend/Makefile.am
+@@ -5,7 +5,7 @@
+ ## This file is part of the "Sane" build infra-structure. See
+ ## included LICENSE file for license information.
+
+-AM_CPPFLAGS += -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include $(USB_CFLAGS) -DLIBDIR="\"$(libdir)/sane\""
++AM_CPPFLAGS += -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include $(USB_CFLAGS) -DLIBDIR="\"$(libdir)/sane\"" -DDEB_DLL_LIBDIR="\"$(libdir)/sane:$(prefix)/lib/sane\:$(prefix)/lib64/sane\""
+
+ AM_LDFLAGS += $(STRICT_LDFLAGS)
+ # The -rpath option is added because we are creating _LTLIBRARIES based
diff --git a/debian/patches/0140-avahi.patch b/debian/patches/0140-avahi.patch
new file mode 100644
index 0000000..799b350
--- /dev/null
+++ b/debian/patches/0140-avahi.patch
@@ -0,0 +1,90 @@
+Description: Avoid assertion failure when net_avahi_init failed
+Author: Andreas Henriksson <andreas@fatal.se>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=861112
+Forwarded: not-needed
+Last-Update: 2017-06-20
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/backend/net.c
+===================================================================
+--- trunk.orig/backend/net.c
++++ trunk/backend/net.c
+@@ -798,7 +798,7 @@ net_avahi_browse_callback (AvahiServiceB
+ {
+ case AVAHI_BROWSER_FAILURE:
+ DBG (1, "net_avahi_browse_callback: %s\n", avahi_strerror (avahi_client_errno (avahi_service_browser_get_client (b))));
+- avahi_threaded_poll_quit (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_quit (avahi_thread);
+ return;
+
+ case AVAHI_BROWSER_NEW:
+@@ -863,7 +863,7 @@ net_avahi_callback (AvahiClient *c, Avah
+ if (avahi_browser == NULL)
+ {
+ DBG (1, "net_avahi_callback: could not create service browser: %s\n", avahi_strerror (avahi_client_errno (c)));
+- avahi_threaded_poll_quit (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_quit (avahi_thread);
+ }
+ break;
+
+@@ -886,14 +886,14 @@ net_avahi_callback (AvahiClient *c, Avah
+ if (avahi_client == NULL)
+ {
+ DBG (1, "net_avahi_init: could not create Avahi client: %s\n", avahi_strerror (error));
+- avahi_threaded_poll_quit (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_quit (avahi_thread);
+ }
+ }
+ else
+ {
+ /* Another error happened - game over */
+ DBG (1, "net_avahi_callback: server connection failure: %s\n", avahi_strerror (error));
+- avahi_threaded_poll_quit (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_quit (avahi_thread);
+ }
+ break;
+ }
+@@ -1072,12 +1072,12 @@ sane_init (SANE_Int * version_code, SANE
+ continue;
+ }
+ #if WITH_AVAHI
+- avahi_threaded_poll_lock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_lock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ DBG (2, "sane_init: trying to add %s\n", device_name);
+ add_device (device_name, 0);
+ #if WITH_AVAHI
+- avahi_threaded_poll_unlock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_unlock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ }
+
+@@ -1123,12 +1123,12 @@ sane_init (SANE_Int * version_code, SANE
+ continue;
+ #endif /* ENABLE_IPV6 */
+ #if WITH_AVAHI
+- avahi_threaded_poll_lock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_lock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ DBG (2, "sane_init: trying to add %s\n", host);
+ add_device (host, 0);
+ #if WITH_AVAHI
+- avahi_threaded_poll_unlock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_unlock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ }
+ free (copy);
+@@ -1546,11 +1546,11 @@ sane_open (SANE_String_Const full_name,
+ "sane_open: device %s not found, trying to register it anyway\n",
+ nd_name);
+ #if WITH_AVAHI
+- avahi_threaded_poll_lock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_lock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ status = add_device (nd_name, &dev);
+ #if WITH_AVAHI
+- avahi_threaded_poll_unlock (avahi_thread);
++ if (avahi_thread) avahi_threaded_poll_unlock (avahi_thread);
+ #endif /* WITH_AVAHI */
+ if (status != SANE_STATUS_GOOD)
+ {
diff --git a/debian/patches/0145-avahi.patch b/debian/patches/0145-avahi.patch
new file mode 100644
index 0000000..c63aea5
--- /dev/null
+++ b/debian/patches/0145-avahi.patch
@@ -0,0 +1,34 @@
+Description: scanimage assert failure: *** Error in `scanimage': double free or corruption (top)
+Author: Laurent Vivier Laurent@vivier.eu
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/1208091
+Forwarded: not-needed
+Last-Update: 2017-06-20
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/backend/net.c
+===================================================================
+--- trunk.orig/backend/net.c
++++ trunk/backend/net.c
+@@ -991,10 +991,6 @@ sane_init (SANE_Int * version_code, SANE
+ first_device = NULL;
+ first_handle = NULL;
+
+-#if WITH_AVAHI
+- net_avahi_init ();
+-#endif /* WITH_AVAHI */
+-
+ auth_callback = authorize;
+
+ /* Return the version number of the sane-backends package to allow
+@@ -1146,6 +1142,11 @@ sane_init (SANE_Int * version_code, SANE
+ DBG (2, "sane_init: connect timeout set to %d seconds from env\n", connect_timeout);
+ }
+
++#if WITH_AVAHI
++ net_avahi_init ();
++#endif /* WITH_AVAHI */
++
++
+ DBG (2, "sane_init: done\n");
+ return SANE_STATUS_GOOD;
+ }
diff --git a/debian/patches/0150-i386-test.patch b/debian/patches/0150-i386-test.patch
new file mode 100644
index 0000000..70681dd
--- /dev/null
+++ b/debian/patches/0150-i386-test.patch
@@ -0,0 +1,48 @@
+Description: Disable some tests that fail on i386
+Author: Jörg Frings-Fürst <debian@jff.email>
+Forwarded: not-needed
+Last-Update: 2020-04-01
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/testsuite/backend/genesys/tests_image.cpp
+===================================================================
+--- trunk.orig/testsuite/backend/genesys/tests_image.cpp
++++ trunk/testsuite/backend/genesys/tests_image.cpp
+@@ -122,14 +122,14 @@ void test_set_pixel_to_row()
+
+ pixel = Pixel(0x1200, 0x1200, 0x1200);
+ set_pixel_to_row(data.data(), 0, pixel, PixelFormat::I8);
+- ASSERT_EQ(data, Data({0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
++// ASSERT_EQ(data, Data({0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
++// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
+ reset();
+
+ pixel = Pixel(0x1200, 0x1200, 0x1200);
+ set_pixel_to_row(data.data(), 2, pixel, PixelFormat::I8);
+- ASSERT_EQ(data, Data({0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
++// ASSERT_EQ(data, Data({0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
++// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
+ reset();
+
+ pixel = Pixel(0x1200, 0x3400, 0x5600);
+@@ -158,14 +158,14 @@ void test_set_pixel_to_row()
+
+ pixel = Pixel(0x1234, 0x1234, 0x1234);
+ set_pixel_to_row(data.data(), 0, pixel, PixelFormat::I16);
+- ASSERT_EQ(data, Data({0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
++// ASSERT_EQ(data, Data({0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
++// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
+ reset();
+
+ pixel = Pixel(0x1234, 0x1234, 0x1234);
+ set_pixel_to_row(data.data(), 1, pixel, PixelFormat::I16);
+- ASSERT_EQ(data, Data({0x00, 0x00, 0x34, 0x12, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
++// ASSERT_EQ(data, Data({0x00, 0x00, 0x34, 0x12, 0x00, 0x00,
++// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
+ reset();
+
+ pixel = Pixel(0x1234, 0x5678, 0x9abc);
diff --git a/debian/patches/0155-hurd_PATH_MAX.patch b/debian/patches/0155-hurd_PATH_MAX.patch
new file mode 100644
index 0000000..71d4c68
--- /dev/null
+++ b/debian/patches/0155-hurd_PATH_MAX.patch
@@ -0,0 +1,364 @@
+Description: Add PATH_MAX if undefined
+Author: Jörg Frings-Fürst <debian@jff.email>
+Last-Update: 2020-04-17
+Index: trunk/backend/escl/escl_capabilities.c
+===================================================================
+--- trunk.orig/backend/escl/escl_capabilities.c
++++ trunk/backend/escl/escl_capabilities.c
+@@ -34,6 +34,10 @@
+
+ #include "../include/sane/saneopts.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 4096
++#endif
++
+ struct cap
+ {
+ char *memory;
+Index: trunk/backend/escl/escl.h
+===================================================================
+--- trunk.orig/backend/escl/escl.h
++++ trunk/backend/escl/escl.h
+@@ -67,6 +67,10 @@
+ # define DBGDUMP(level, buf, size)
+ #endif
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ #define ESCL_CONFIG_FILE "escl.conf"
+
+
+Index: trunk/backend/canon630u.c
+===================================================================
+--- trunk.orig/backend/canon630u.c
++++ trunk/backend/canon630u.c
+@@ -65,6 +65,10 @@
+
+ #include "canon630u-common.c"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ typedef struct Canon_Device
+ {
+ struct Canon_Device *next;
+Index: trunk/backend/canon_pp.c
+===================================================================
+--- trunk.orig/backend/canon_pp.c
++++ trunk/backend/canon_pp.c
+@@ -77,6 +77,11 @@
+ #include "../include/sane/sanei_backend.h"
+ /* #include "../include/sane/sanei_debug.h" */
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
++
+
+ /* Prototypes */
+ static SANE_Status init_device(struct parport *pp);
+Index: trunk/backend/gt68xx.h
+===================================================================
+--- trunk.orig/backend/gt68xx.h
++++ trunk/backend/gt68xx.h
+@@ -51,4 +51,8 @@
+
+ #define GT68XX_CONFIG_FILE "gt68xx.conf"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ #endif /* not GT68XX_H */
+Index: trunk/backend/hp3900_sane.c
+===================================================================
+--- trunk.orig/backend/hp3900_sane.c
++++ trunk/backend/hp3900_sane.c
+@@ -53,6 +53,11 @@
+
+ #include "hp3900_rts8822.c"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
++
+ struct st_convert
+ {
+ SANE_Int colormode;
+Index: trunk/backend/hp4200.h
+===================================================================
+--- trunk.orig/backend/hp4200.h
++++ trunk/backend/hp4200.h
+@@ -26,6 +26,10 @@
+ #define min(a, b) (((a) < (b)) ? (a) : (b))
+ #define max(a, b) (((a) > (b)) ? (a) : (b))
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+
+ /*--------------------------------------------------------------------------*/
+
+Index: trunk/backend/hp5400_sane.c
+===================================================================
+--- trunk.orig/backend/hp5400_sane.c
++++ trunk/backend/hp5400_sane.c
+@@ -87,6 +87,9 @@
+
+ #define NUM_GAMMA_ENTRIES 65536
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
+
+ /* options enumerator */
+ typedef enum
+Index: trunk/backend/hpsj5s.c
+===================================================================
+--- trunk.orig/backend/hpsj5s.c
++++ trunk/backend/hpsj5s.c
+@@ -56,6 +56,9 @@
+ #include <stdio.h>
+ #include <unistd.h>
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
+
+ #define LINES_TO_FEED 480 /*Default feed length */
+
+Index: trunk/backend/leo.c
+===================================================================
+--- trunk.orig/backend/leo.c
++++ trunk/backend/leo.c
+@@ -75,6 +75,10 @@
+
+ #include "leo.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+
+ /* Lists of possible scan modes. */
+Index: trunk/backend/lexmark.c
+===================================================================
+--- trunk.orig/backend/lexmark.c
++++ trunk/backend/lexmark.c
+@@ -45,6 +45,10 @@
+
+ #include "lexmark.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ #define LEXMARK_CONFIG_FILE "lexmark.conf"
+ #define BUILD 32
+ #define MAX_OPTION_STRING_SIZE 255
+Index: trunk/backend/matsushita.c
+===================================================================
+--- trunk.orig/backend/matsushita.c
++++ trunk/backend/matsushita.c
+@@ -79,6 +79,10 @@
+
+ #include "matsushita.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+
+ /* Lists of possible scan modes. */
+Index: trunk/backend/p5_device.c
+===================================================================
+--- trunk.orig/backend/p5_device.c
++++ trunk/backend/p5_device.c
+@@ -1,3 +1,8 @@
++
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /**
+ * Description of the Primax PagePartner model
+ */
+Index: trunk/backend/pie.c
+===================================================================
+--- trunk.orig/backend/pie.c
++++ trunk/backend/pie.c
+@@ -132,8 +132,11 @@
+
+ #define min(a,b) (((a)<(b))?(a):(b))
+ #define max(a,b) (((a)>(b))?(a):(b))
+-
+-
++
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /* names of scanners that are supported because */
+ /* the inquiry_return_block is ok and driver is tested */
+
+Index: trunk/backend/pieusb.c
+===================================================================
+--- trunk.orig/backend/pieusb.c
++++ trunk/backend/pieusb.c
+@@ -107,6 +107,10 @@ extern void write_tiff_rgbi_header (FILE
+ #define DBG_info_scan 11 /* information scanner commands */
+ #define DBG_info_usb 13 /* information usb level functions */
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /* device flags */
+
+ #define FLAG_SLIDE_TRANSPORT 0x01
+Index: trunk/backend/plustek-usb.c
+===================================================================
+--- trunk.orig/backend/plustek-usb.c
++++ trunk/backend/plustek-usb.c
+@@ -117,6 +117,10 @@ static TabDef usbVendors[] = {
+ /** we use at least 8 megs for scanning... */
+ #define _SCANBUF_SIZE (8 * 1024 * 1024)
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /********************** the USB scanner interface ****************************/
+
+ /** remove the slash out of the model-name to obtain a valid filename
+Index: trunk/backend/sceptre.c
+===================================================================
+--- trunk.orig/backend/sceptre.c
++++ trunk/backend/sceptre.c
+@@ -77,6 +77,10 @@
+
+ #include "sceptre.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+
+ static const SANE_String scan_mode_list[] = { LINEART_STR, HALFTONE_STR,
+Index: trunk/backend/sp15c.c
+===================================================================
+--- trunk.orig/backend/sp15c.c
++++ trunk/backend/sp15c.c
+@@ -225,6 +225,10 @@
+ #include "sp15c-scsi.h"
+ #include "sp15c.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /* ------------------------------------------------------------------------- */
+
+ static const char negativeStr[] = "Negative";
+Index: trunk/backend/stv680.c
+===================================================================
+--- trunk.orig/backend/stv680.c
++++ trunk/backend/stv680.c
+@@ -98,6 +98,10 @@
+
+ #define TIMEOUT 1000
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+ /* Lists of possible scan modes. */
+ static SANE_String_Const scan_mode_list[] = {
+Index: trunk/backend/teco1.c
+===================================================================
+--- trunk.orig/backend/teco1.c
++++ trunk/backend/teco1.c
+@@ -83,6 +83,10 @@
+ #define sanei_scsi_close(a) SANE_STATUS_GOOD
+ #endif
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+
+ /* Lists of possible scan modes. */
+Index: trunk/backend/teco2.c
+===================================================================
+--- trunk.orig/backend/teco2.c
++++ trunk/backend/teco2.c
+@@ -103,6 +103,10 @@
+ #define sanei_scsi_close(a) SANE_STATUS_GOOD
+ #endif
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /* For debugging purposes: output a stream straight out from the
+ * scanner without reordering the colors, 0=normal, 1 = raw. */
+ static int raw_output = 0;
+Index: trunk/backend/teco3.c
+===================================================================
+--- trunk.orig/backend/teco3.c
++++ trunk/backend/teco3.c
+@@ -75,6 +75,10 @@
+
+ #include "teco3.h"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ /*--------------------------------------------------------------------------*/
+
+ /* Lists of possible scan modes. */
+Index: trunk/backend/test.c
+===================================================================
+--- trunk.orig/backend/test.c
++++ trunk/backend/test.c
+@@ -74,6 +74,10 @@
+
+ #define TEST_CONFIG_FILE "test.conf"
+
++#ifndef PATH_MAX
++ #define PATH_MAX 1024
++#endif
++
+ static SANE_Bool inited = SANE_FALSE;
+ static SANE_Device **sane_device_list = 0;
+ static Test_Device *first_test_device = 0;
+Index: trunk/backend/pixma/pixma_bjnp.c
+===================================================================
+--- trunk.orig/backend/pixma/pixma_bjnp.c
++++ trunk/backend/pixma/pixma_bjnp.c
+@@ -117,6 +117,12 @@
+ # endif
+ #endif
+
++#ifndef HOST_NAME_MAX
++ #define HOST_NAME_MAX 64
++#endif
++
++
++
+ /* static data */
+ static bjnp_device_t device[BJNP_NO_DEVICES];
+ static int bjnp_no_devices = 0;
diff --git a/debian/patches/0175-fix_tests.patch b/debian/patches/0175-fix_tests.patch
new file mode 100644
index 0000000..4b9f4f9
--- /dev/null
+++ b/debian/patches/0175-fix_tests.patch
@@ -0,0 +1,96 @@
+Description: Fix test
+Author: Jörg Frings-Fürst <debian@jff.email>
+Bug: https://gitlab.com/sane-project/backends/-/issues/443
+Last-Update: 2021-02-17
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/testsuite/tools/data/db.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/db.ref
++++ trunk/testsuite/tools/data/db.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # The entries below are used to detect a USB device when it's plugged in
+ # and then run a script to change the ownership and
+Index: trunk/testsuite/tools/data/html-backends-split.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/html-backends-split.ref
++++ trunk/testsuite/tools/data/html-backends-split.ref
+@@ -16496,6 +16496,6 @@ Grandtek Scopecam
+ >Contact</a>
+ </address>
+ <font size=-1>
+-This page was created by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++This page was created by sane-desc 3.6 from sane-backends 1.2.1-debian
+ </font>
+ </body> </html>
+Index: trunk/testsuite/tools/data/html-mfgs.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/html-mfgs.ref
++++ trunk/testsuite/tools/data/html-mfgs.ref
+@@ -23910,6 +23910,6 @@ qcam<br>(unmaintained)
+ >Contact</a>
+ </address>
+ <font size=-1>
+-This page was created by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++This page was created by sane-desc 3.6 from sane-backends 1.2.1-debian
+ </font>
+ </body> </html>
+Index: trunk/testsuite/tools/data/hwdb.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/hwdb.ref
++++ trunk/testsuite/tools/data/hwdb.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # hwdb file for supported USB devices
+ #
+Index: trunk/testsuite/tools/data/udev+acl.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/udev+acl.ref
++++ trunk/testsuite/tools/data/udev+acl.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.31-118-g5d3ce7806
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # udev rules file for supported USB and SCSI devices
+ #
+Index: trunk/testsuite/tools/data/udev+hwdb.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/udev+hwdb.ref
++++ trunk/testsuite/tools/data/udev+hwdb.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # udev rules file for supported USB and SCSI devices
+ #
+Index: trunk/testsuite/tools/data/udev.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/udev.ref
++++ trunk/testsuite/tools/data/udev.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.31-118-g5d3ce7806
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # udev rules file for supported USB and SCSI devices
+ #
+Index: trunk/testsuite/tools/data/usermap.ref
+===================================================================
+--- trunk.orig/testsuite/tools/data/usermap.ref
++++ trunk/testsuite/tools/data/usermap.ref
+@@ -1,5 +1,5 @@
+ # This file was generated from description files (*.desc)
+-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
++# by sane-desc 3.6 from sane-backends 1.2.1-debian
+ #
+ # The entries below are used to detect a USB device and change owner
+ # and permissions on the "device node" used by libusb.
diff --git a/debian/patches/0180-Escl_force_idle_status.patch b/debian/patches/0180-Escl_force_idle_status.patch
new file mode 100644
index 0000000..8df17d2
--- /dev/null
+++ b/debian/patches/0180-Escl_force_idle_status.patch
@@ -0,0 +1,253 @@
+Description: Escl force idle status
+Origin: https://gitlab.com/sane-project/backends/-/merge_requests/835/diffs
+Bug: https://gitlab.com/sane-project/backends/-/issues/742
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1068794
+Forwarded: not-needed
+Last-Update: 2024-11-15
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/backend/escl/escl.c
+===================================================================
+--- trunk.orig/backend/escl/escl.c
++++ trunk/backend/escl/escl.c
+@@ -1345,7 +1345,7 @@ sane_cancel(SANE_Handle h)
+ }
+ handler->scanner->work = SANE_FALSE;
+ handler->cancel = SANE_TRUE;
+- escl_scanner(handler->device, handler->scanner->scanJob, handler->result);
++ escl_scanner(handler->device, handler->scanner->scanJob, handler->result, SANE_TRUE);
+ free(handler->result);
+ handler->result = NULL;
+ free(handler->scanner->scanJob);
+@@ -1566,6 +1566,7 @@ sane_start(SANE_Handle h)
+ handler->decompress_scan_data = SANE_FALSE;
+ handler->end_read = SANE_FALSE;
+ if (handler->scanner->work == SANE_FALSE) {
++ escl_reset_all_jobs(handler->device);
+ SANE_Status st = escl_status(handler->device,
+ handler->scanner->source,
+ NULL,
+Index: trunk/backend/escl/escl.h
+===================================================================
+--- trunk.orig/backend/escl/escl.h
++++ trunk/backend/escl/escl.h
+@@ -252,7 +252,11 @@ SANE_Status escl_scan(capabilities_t *sc
+
+ void escl_scanner(const ESCL_Device *device,
+ char *scanJob,
+- char *result);
++ char *result,
++ SANE_Bool status);
++
++SANE_Status escl_reset_all_jobs(ESCL_Device *device);
++
+
+ typedef void CURL;
+
+Index: trunk/backend/escl/escl_reset.c
+===================================================================
+--- trunk.orig/backend/escl/escl_reset.c
++++ trunk/backend/escl/escl_reset.c
+@@ -44,7 +44,32 @@ write_callback(void __sane_unused__*str,
+ * This function is called in the 'sane_cancel' function.
+ */
+ void
+-escl_scanner(const ESCL_Device *device, char *scanJob, char *result)
++escl_delete(const ESCL_Device *device, char *uri)
++{
++ CURL *curl_handle = NULL;
++ long answer = 0;
++
++ if (uri == NULL)
++ return;
++ curl_handle = curl_easy_init();
++ if (curl_handle != NULL) {
++ escl_curl_url(curl_handle, device, uri);
++ curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, "DELETE");
++ if (curl_easy_perform(curl_handle) == CURLE_OK) {
++ curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &answer);
++ return;
++ }
++ curl_easy_cleanup(curl_handle);
++ }
++}
++
++/**
++ * \fn void escl_scanner(const ESCL_Device *device, char *result)
++ * \brief Function that resets the scanner after each scan, using curl.
++ * This function is called in the 'sane_cancel' function.
++ */
++void
++escl_scanner(const ESCL_Device *device, char *scanJob, char *result, SANE_Bool status)
+ {
+ CURL *curl_handle = NULL;
+ const char *scan_jobs = "/eSCL/";
+@@ -70,10 +95,15 @@ CURL_CALL:
+ if (i >= 15) return;
+ }
+ curl_easy_cleanup(curl_handle);
+- if (SANE_STATUS_GOOD != escl_status(device,
+- PLATEN,
+- NULL,
+- NULL))
+- goto CURL_CALL;
++ char* end = strrchr(scan_cmd, '/');
++ *end = 0;
++ escl_delete(device, scan_cmd);
++ if (status) {
++ if (SANE_STATUS_GOOD != escl_status(device,
++ PLATEN,
++ NULL,
++ NULL))
++ goto CURL_CALL;
++ }
+ }
+ }
+Index: trunk/backend/escl/escl_status.c
+===================================================================
+--- trunk.orig/backend/escl/escl_status.c
++++ trunk/backend/escl/escl_status.c
+@@ -29,6 +29,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <unistd.h>
+
+ #include <libxml/parser.h>
+
+@@ -270,3 +271,135 @@ clean_data:
+ }
+ return (status);
+ }
++
++static void
++print_xml_job_finish(xmlNode *node,
++ SANE_Status *job)
++{
++ while (node) {
++ if (node->type == XML_ELEMENT_NODE) {
++ if (find_nodes_s(node)) {
++ if (strcmp((const char *)node->name, "JobState") == 0) {
++ const char *state = (const char *)xmlNodeGetContent(node);
++ if (!strcmp(state, "Canceled")) {
++ *job = SANE_STATUS_GOOD;
++ DBG(10, "jobId Completed SANE_STATUS_GOOD\n");
++ }
++ else if (!strcmp(state, "Aborted")) {
++ *job = SANE_STATUS_GOOD;
++ DBG(10, "jobId Completed SANE_STATUS_GOOD\n");
++ }
++ else if (!strcmp(state, "Completed")) {
++ *job = SANE_STATUS_GOOD;
++ DBG(10, "jobId Completed SANE_STATUS_GOOD\n");
++ }
++ }
++ }
++ }
++ print_xml_job_finish(node->children, job);
++ node = node->next;
++ }
++}
++
++static void
++print_xml_reset_all_jobs (xmlNode *node,
++ ESCL_Device *device)
++{
++ DBG(10, "print_xml_reset_all_jobs\n");
++ SANE_Status status = SANE_STATUS_DEVICE_BUSY;
++ while (node) {
++ if (node->type == XML_ELEMENT_NODE) {
++ if (find_nodes_s(node)) {
++ if (strcmp((const char *)node->name, "JobUri") == 0) {
++ DBG(10, "print_xml_reset_all_jobs: %s\n", node->name);
++ if (device != NULL) {
++ print_xml_job_finish (node, &status);
++ if (status == SANE_STATUS_DEVICE_BUSY) {
++ char *jobUri = (char *)xmlNodeGetContent(node);
++ char *job = strrchr((const char *)jobUri, '/');
++ char *scanj = NULL;
++ if (job != NULL) {
++ if (strstr(jobUri,"ScanJobs"))
++ scanj = strdup("ScanJobs");
++ else
++ scanj = strdup("ScanJob");
++ DBG(10, "print_xml_reset_all_jobs: %s/%s\n", scanj, job);
++ escl_scanner(device, scanj, job, SANE_FALSE);
++ free(scanj);
++ }
++ DBG(10, "print_xml_reset_all_jobs: sleep to finish the job\n");
++ }
++ }
++ }
++ }
++ }
++ print_xml_reset_all_jobs (node->children,
++ device);
++ node = node->next;
++ }
++}
++
++/**
++ * \fn SANE_Status escl_reset_all_jobs (ESCL_Device *device, , char *scanJob)
++ * \brief Function that forces the end of jobs, using curl.
++ * This function is called in the 'sane_start' function.
++ *
++ * \return status (if everything is OK, status = SANE_STATUS_GOOD, otherwise, SANE_STATUS_NO_MEM/SANE_STATUS_INVAL)
++ */
++SANE_Status
++escl_reset_all_jobs(ESCL_Device *device)
++{
++ CURL *curl_handle = NULL;
++ xmlDoc *data = NULL;
++ xmlNode *node = NULL;
++ struct idle *var = NULL;
++ const char *scanner_status = "/eSCL/ScannerStatus";
++ SANE_Status status = SANE_STATUS_DEVICE_BUSY;
++
++ DBG(10, "escl_reset_all_jobs\n");
++ if (device == NULL)
++ return (SANE_STATUS_NO_MEM);
++ DBG(10, "1 - escl_reset_all_jobs\n");
++ var = (struct idle*)calloc(1, sizeof(struct idle));
++ if (var == NULL)
++ return (SANE_STATUS_NO_MEM);
++ DBG(10, "2 - escl_reset_all_jobs\n");
++ var->memory = malloc(1);
++ var->size = 0;
++ curl_handle = curl_easy_init();
++
++ escl_curl_url(curl_handle, device, scanner_status);
++ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback_s);
++ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)var);
++ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
++ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
++ CURLcode res = curl_easy_perform(curl_handle);
++ if (res != CURLE_OK) {
++ DBG( 1, "The scanner didn't respond: %s\n", curl_easy_strerror(res));
++ status = SANE_STATUS_INVAL;
++ goto clean_data1;
++ }
++ DBG(10, "3 - escl_reset_all_jobs\n");
++ DBG( 10, "eSCL : Status : %s.\n", var->memory);
++ data = xmlReadMemory(var->memory, var->size, "file.xml", NULL, 0);
++ if (data == NULL) {
++ status = SANE_STATUS_NO_MEM;
++ goto clean_data1;
++ }
++ node = xmlDocGetRootElement(data);
++ if (node == NULL) {
++ status = SANE_STATUS_NO_MEM;
++ goto clean1;
++ }
++ print_xml_reset_all_jobs (node, device);
++ status = SANE_STATUS_GOOD;
++clean1:
++ xmlFreeDoc(data);
++clean_data1:
++ xmlCleanupParser();
++ xmlMemoryDump();
++ curl_easy_cleanup(curl_handle);
++ free(var->memory);
++ free(var);
++ return status;
++}
diff --git a/debian/patches/0200-disable-check-equal-stderr.patch b/debian/patches/0200-disable-check-equal-stderr.patch
new file mode 100644
index 0000000..3f27ca5
--- /dev/null
+++ b/debian/patches/0200-disable-check-equal-stderr.patch
@@ -0,0 +1,23 @@
+Description: Build fails on GCC12:
+.
+minigtest.h:43:29: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const std::vector<long unsigned int>’)
+minigtest.h:43:29: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const std::vector<unsigned char>’)
+minigtest.h:43:29: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const genesys::Pixel’)
+minigtest.h:43:29: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const genesys::RawPixel’)
+minigtest.h:43:29: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const genesys::PixelFormat’)
+.
+Simply suppressing the print of the mismatch is the lowest effort workaround.
+Author: Nathan Pratta Teodosio <nathan.teodosio@canonical.com>
+Bug: 1013034
+Forwarded: No
+
+--- a/testsuite/backend/genesys/minigtest.h
++++ b/testsuite/backend/genesys/minigtest.h
+@@ -40,7 +40,6 @@
+ s_num_failures++;
+ std::cerr << "FAILURE at ";
+ print_location(std::cerr, function, path, line);
+- std::cerr << " :\n" << t << " != " << u << "\n\n";
+ } else {
+ s_num_successes++;
+ std::cerr << "SUCCESS at ";
diff --git a/debian/patches/0605-fix_groff-warnings.patch b/debian/patches/0605-fix_groff-warnings.patch
new file mode 100644
index 0000000..1e0ac17
--- /dev/null
+++ b/debian/patches/0605-fix_groff-warnings.patch
@@ -0,0 +1,20 @@
+Description: Fix some groff warnings
+Author: Jörg Frings-Fürst <debian@jff.email>
+Bug: https://gitlab.com/sane-project/backends/-/issues/433
+Last-Update: 2021-02-17
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/doc/sane-artec_eplus48u.man
+===================================================================
+--- trunk.orig/doc/sane-artec_eplus48u.man
++++ trunk/doc/sane-artec_eplus48u.man
+@@ -44,8 +44,7 @@ or
+ You can find it on the installation CD that was provided by the manufacturer,
+ normally in the directory Win98, WinMe or similar.
+ If the Windows-driver is installed on your computer, then you can also
+-find the firmware file under
+-.IR c:\\windows\\system32\\drivers .
++find the firmware file under c:\\windows\\system32\\drivers.
+
+ .SH CONFIGURATION
+ The contents of the
diff --git a/debian/patches/0610-fix_groff_font_warnings.patch b/debian/patches/0610-fix_groff_font_warnings.patch
new file mode 100644
index 0000000..8d20c2a
--- /dev/null
+++ b/debian/patches/0610-fix_groff_font_warnings.patch
@@ -0,0 +1,55 @@
+Description: Fix non portable font
+Author: Jörg Frings-Fürst <debian@jff.email>
+Bug: https://gitlab.com/sane-project/backends/-/issues/738
+Last-Update: 2024-03-03
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+Index: trunk/doc/sane-hp5590.man
+===================================================================
+--- trunk.orig/doc/sane-hp5590.man
++++ trunk/doc/sane-hp5590.man
+@@ -45,7 +45,7 @@ or
+ Valid command line options and their syntax can be listed by using:
+ .IP
+ .nf
+-\f[C]
++\f[I]
+ scanimage --help -d hp5590:interface:device
+ \f[R]
+ .fi
+@@ -63,7 +63,7 @@ on the first scanner identified.
+ Use the command:
+ .IP
+ .nf
+-\f[C]
++\f[I]
+ scanimage -L
+ \f[R]
+ .fi
+@@ -255,7 +255,7 @@ to be included in
+ .I hp5590.conf
+ .IP
+ .nf
+-\f[C]
++\f[I]
+ device hp5590 {
+ # Device matching
+ filter = \[dq]\[ha]hp5590.*\[dq]
+@@ -285,7 +285,7 @@ device hp5590 {
+ \f[B]scan_action.script\f[R]
+ .IP
+ .nf
+-\f[C]
++\f[I]
+ #!/bin/bash
+ echo device = $SCANBD_DEVICE
+ echo action = $SCANBD_ACTION
+@@ -319,7 +319,7 @@ variable controls the debug level for th
+ Higher debug levels increase the verbosity of the output:
+ .IP
+ .nf
+-\f[C]
++\f[I]
+ 10 - generic processing
+ 20 - verbose backend messages
+ 40 - HP5590 high-level commands
diff --git a/debian/patches/0705-kfreebsd.patch b/debian/patches/0705-kfreebsd.patch
new file mode 100644
index 0000000..c46c44d
--- /dev/null
+++ b/debian/patches/0705-kfreebsd.patch
@@ -0,0 +1,17 @@
+description: Fix build failure on kfreebsd (closes: #680234)
+author: Petr Salinger
+Index: trunk/backend/umax_pp_low.c
+===================================================================
+--- trunk.orig/backend/umax_pp_low.c
++++ trunk/backend/umax_pp_low.c
+@@ -70,8 +70,10 @@
+ #endif
+
+ #ifdef HAVE_MACHINE_CPUFUNC_H
++#ifndef __GLIBC__
+ #include <machine/cpufunc.h>
+ #endif
++#endif
+
+ #ifdef HAVE_I386_SET_IOPERM
+ #include <machine/sysarch.h>
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..93fa125
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,15 @@
+0040-remove_git.patch
+0100-source_spelling.patch
+0125-multiarch_dll_search_path.patch
+0175-fix_tests.patch
+0140-avahi.patch
+0145-avahi.patch
+0705-kfreebsd.patch
+0150-i386-test.patch
+0155-hurd_PATH_MAX.patch
+0050-Use-python3-shebang.patch
+0060-cross.patch
+0605-fix_groff-warnings.patch
+0200-disable-check-equal-stderr.patch
+0610-fix_groff_font_warnings.patch
+0180-Escl_force_idle_status.patch