Compare commits

..

No commits in common. "rawhide" and "f37" have entirely different histories.

27 changed files with 648 additions and 734 deletions

5
.gitignore vendored
View file

@ -111,8 +111,3 @@ hplip-3.10.6.tar.gz
/hplip-3.23.3-repack.tar.gz
/hplip-3.23.5-repack.tar.gz
/hplip-3.23.8-repack.tar.gz
/hplip-3.23.12-repack.tar.gz
/hplip-3.24.4-repack.tar.gz
/hplip-3.25.2-repack.tar.gz
/hplip-3.25.6-repack.tar.gz
/hplip-3.25.8-repack.tar.gz

View file

@ -4,7 +4,7 @@ product_versions:
decision_context: bodhi_update_push_testing
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/public.functional}
#Rawhide
--- !Policy
@ -13,7 +13,7 @@ product_versions:
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/public.functional}
#gating rhel
--- !Policy
@ -21,5 +21,7 @@ product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tedude.validation}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/public.functional}

View file

@ -1,7 +1,7 @@
#!/usr/bin/bash
# get version from base hplip rpm
VER=$(@bindir@/rpm -q hplip --queryformat='%{version}')
# get version from base hplip rpm - it is always in the second column
VER=$(@bindir@/rpm -q hplip | @bindir@/awk -F '-' '{print $2}')
if test "x$VER" = "x"
then
@ -9,20 +9,12 @@ then
exit 1
fi
# link to the plugin
PLUGIN_SOURCE="https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-${VER}-plugin.run"
# plugin name
PLUGIN_FILE="hplip-${VER}-plugin.run"
download()
{
SOURCE="$1"
@bindir@/curl --create-dirs -O --output-dir ~/.hplip --location ${SOURCE}
}
# link to the plugin
PLUGIN_SOURCE="https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/${PLUGIN_FILE}"
FALLBACK_SOURCE="https://developers.hp.com/sites/default/files/${PLUGIN_FILE}"
# create a hidden hplip dir to store a file indicating the plugin version after successful install
# the directory can be used by other hplip tools, so we don't have to remove it if the failure happens
if [ ! -d ~/.hplip ]
@ -30,19 +22,11 @@ then
@bindir@/mkdir ~/.hplip || (@bindir@/echo "Cannot create the ~/.hplip dir, exiting" && exit 1)
fi
for link in ${PLUGIN_SOURCE} ${FALLBACK_SOURCE}
do
download ${link}
@bindir@/curl --create-dir -O --output-dir ~/.hplip ${PLUGIN_SOURCE}
if test "x$(file --mime ~/.hplip/${PLUGIN_FILE} | grep -o 'text/x-shellscript')" = "xtext/x-shellscript"
then
break
fi
done
if test "x$(file --mime ~/.hplip/${PLUGIN_FILE} | grep -o 'text/x-shellscript')" = "x"
if [ ! -f ~/.hplip/${PLUGIN_FILE} ]
then
@bindir@/echo "The downloaded file does not exist or is not a shell script - error during downloading, exiting..."
@bindir@/echo "The downloaded file does not exist - error during downloading, exiting..."
exit 1
fi

View file

@ -1,3 +1,16 @@
diff -up hplip-3.23.3/setup.py.add-ppd-crash hplip-3.23.3/setup.py
--- hplip-3.23.3/setup.py.add-ppd-crash 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/setup.py 2023-05-29 13:55:03.443497903 +0200
@@ -553,6 +553,9 @@ else: # INTERACTIVE_MODE
if file_path.endswith('.gz'):
nickname = gzip.GzipFile(file_path, 'r').read(4096)
+ if sys.version_info[0] > 2:
+ nickname = nickname.decode('utf-8')
+
else:
nickname = open(file_path, 'r').read(4096)
diff -up hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash hplip-3.23.3/ui5/setupdialog.py
--- hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash 2023-05-29 13:55:03.443497903 +0200
+++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 13:57:19.014700721 +0200

View file

@ -1,6 +1,6 @@
diff -up hplip-3.25.2/common/utils.c.covscan hplip-3.25.2/common/utils.c
--- hplip-3.25.2/common/utils.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/common/utils.c 2025-04-11 10:21:58.034950818 +0200
diff -up hplip-3.23.3/common/utils.c.covscan hplip-3.23.3/common/utils.c
--- hplip-3.23.3/common/utils.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/common/utils.c 2023-05-29 13:58:10.969395214 +0200
@@ -1,5 +1,9 @@
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
@ -12,10 +12,10 @@ diff -up hplip-3.25.2/common/utils.c.covscan hplip-3.25.2/common/utils.c
#include <dlfcn.h>
#include <sys/stat.h>
#include <errno.h>
diff -up hplip-3.25.2/io/hpmud/hpmud.c.covscan hplip-3.25.2/io/hpmud/hpmud.c
--- hplip-3.25.2/io/hpmud/hpmud.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/hpmud.c 2025-04-11 10:21:58.035151792 +0200
@@ -769,6 +769,7 @@ enum HPMUD_RESULT hpmud_get_dstat(HPMUD_
diff -up hplip-3.23.3/io/hpmud/hpmud.c.covscan hplip-3.23.3/io/hpmud/hpmud.c
--- hplip-3.23.3/io/hpmud/hpmud.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/io/hpmud/hpmud.c 2023-05-29 13:58:10.970395208 +0200
@@ -759,6 +759,7 @@ enum HPMUD_RESULT hpmud_get_dstat(HPMUD_
}
strncpy(ds->uri, msp->device[dd].uri, sizeof(ds->uri));
@ -23,9 +23,9 @@ diff -up hplip-3.25.2/io/hpmud/hpmud.c.covscan hplip-3.25.2/io/hpmud/hpmud.c
ds->io_mode = msp->device[dd].io_mode;
ds->channel_cnt = msp->device[dd].channel_cnt;
ds->mlc_up = msp->device[dd].mlc_up;
diff -up hplip-3.25.2/io/hpmud/jd.c.covscan hplip-3.25.2/io/hpmud/jd.c
--- hplip-3.25.2/io/hpmud/jd.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/jd.c 2025-04-11 10:21:58.035328288 +0200
diff -up hplip-3.23.3/io/hpmud/jd.c.covscan hplip-3.23.3/io/hpmud/jd.c
--- hplip-3.23.3/io/hpmud/jd.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/io/hpmud/jd.c 2023-05-29 13:58:10.970395208 +0200
@@ -31,6 +31,7 @@
#endif
@ -34,9 +34,9 @@ diff -up hplip-3.25.2/io/hpmud/jd.c.covscan hplip-3.25.2/io/hpmud/jd.c
#include "hpmud.h"
#include "hpmudi.h"
diff -up hplip-3.25.2/io/hpmud/model.c.covscan hplip-3.25.2/io/hpmud/model.c
--- hplip-3.25.2/io/hpmud/model.c.covscan 2025-04-11 10:21:58.023885145 +0200
+++ hplip-3.25.2/io/hpmud/model.c 2025-04-11 10:21:58.035487541 +0200
diff -up hplip-3.23.3/io/hpmud/model.c.covscan hplip-3.23.3/io/hpmud/model.c
--- hplip-3.23.3/io/hpmud/model.c.covscan 2023-05-29 13:58:10.958395279 +0200
+++ hplip-3.23.3/io/hpmud/model.c 2023-05-29 13:58:10.970395208 +0200
@@ -117,6 +117,7 @@ static int ReadConfig()
if (rcbuf[0] == '[')
{
@ -53,9 +53,9 @@ diff -up hplip-3.25.2/io/hpmud/model.c.covscan hplip-3.25.2/io/hpmud/model.c
break; /* done */
}
}
diff -up hplip-3.25.2/io/hpmud/musb.c.covscan hplip-3.25.2/io/hpmud/musb.c
--- hplip-3.25.2/io/hpmud/musb.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/musb.c 2025-04-11 10:21:58.035717762 +0200
diff -up hplip-3.23.3/io/hpmud/musb.c.covscan hplip-3.23.3/io/hpmud/musb.c
--- hplip-3.23.3/io/hpmud/musb.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/io/hpmud/musb.c 2023-05-29 13:58:10.970395208 +0200
@@ -776,7 +776,7 @@ static int device_id(int fd, unsigned ch
len = size-1; /* leave byte for zero termination */
if (len > 2)
@ -65,9 +65,9 @@ diff -up hplip-3.25.2/io/hpmud/musb.c.covscan hplip-3.25.2/io/hpmud/musb.c
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff -up hplip-3.25.2/io/hpmud/pp.c.covscan hplip-3.25.2/io/hpmud/pp.c
--- hplip-3.25.2/io/hpmud/pp.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/io/hpmud/pp.c 2025-04-11 10:21:58.035977040 +0200
diff -up hplip-3.23.3/io/hpmud/pp.c.covscan hplip-3.23.3/io/hpmud/pp.c
--- hplip-3.23.3/io/hpmud/pp.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/io/hpmud/pp.c 2023-05-29 13:58:10.970395208 +0200
@@ -632,7 +632,7 @@ static int device_id(int fd, char *buffe
len = size-1; /* leave byte for zero termination */
if (len > 2)
@ -77,9 +77,9 @@ diff -up hplip-3.25.2/io/hpmud/pp.c.covscan hplip-3.25.2/io/hpmud/pp.c
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff -up hplip-3.25.2/Makefile.am.covscan hplip-3.25.2/Makefile.am
--- hplip-3.25.2/Makefile.am.covscan 2025-04-11 10:21:58.010155532 +0200
+++ hplip-3.25.2/Makefile.am 2025-04-11 10:22:52.826357214 +0200
diff -up hplip-3.23.3/Makefile.am.covscan hplip-3.23.3/Makefile.am
--- hplip-3.23.3/Makefile.am.covscan 2023-05-29 13:58:10.944395361 +0200
+++ hplip-3.23.3/Makefile.am 2023-05-29 13:58:10.969395214 +0200
@@ -3,7 +3,7 @@
#
# (c) 2004-2015 Copyright HP Development Company, LP
@ -90,7 +90,7 @@ diff -up hplip-3.25.2/Makefile.am.covscan hplip-3.25.2/Makefile.am
CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
@@ -310,7 +310,7 @@ dist_pcard_DATA = pcard/__init__.py pcar
pcardextdir = $(PYTHONEXECDIR)
pcardextdir = $(pyexecdir)
pcardext_LTLIBRARIES = pcardext.la
pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c
@ -107,9 +107,9 @@ diff -up hplip-3.25.2/Makefile.am.covscan hplip-3.25.2/Makefile.am
libhpipp_la_LDFLAGS = -version-info 0:1:0
libhpipp_la_LIBADD = libhpmud.la
diff -up hplip-3.25.2/pcard/fat.c.covscan hplip-3.25.2/pcard/fat.c
--- hplip-3.25.2/pcard/fat.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/pcard/fat.c 2025-04-11 10:21:58.036450105 +0200
diff -up hplip-3.23.3/pcard/fat.c.covscan hplip-3.23.3/pcard/fat.c
--- hplip-3.23.3/pcard/fat.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/pcard/fat.c 2023-05-29 13:58:10.971395203 +0200
@@ -519,14 +519,17 @@ int FatFreeSpace(void)
int FatDiskAttributes( PHOTO_CARD_ATTRIBUTES * pa )
@ -139,9 +139,9 @@ diff -up hplip-3.25.2/pcard/fat.c.covscan hplip-3.25.2/pcard/fat.c
cwd.StartSector = ConvertClusterToSector(fa.StartCluster);
cwd.CurrSector = cwd.StartSector;
cwd.StartCluster = fa.StartCluster;
diff -up hplip-3.25.2/prnt/hpijs/context2.cpp.covscan hplip-3.25.2/prnt/hpijs/context2.cpp
--- hplip-3.25.2/prnt/hpijs/context2.cpp.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/context2.cpp 2025-04-11 10:21:58.036656862 +0200
diff -up hplip-3.23.3/prnt/hpijs/context2.cpp.covscan hplip-3.23.3/prnt/hpijs/context2.cpp
--- hplip-3.23.3/prnt/hpijs/context2.cpp.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpijs/context2.cpp 2023-05-29 13:58:10.971395203 +0200
@@ -1302,6 +1302,7 @@ DRIVER_ERROR PrintContext::SelectDevice
if(0 == strnlen((const char *)pSS->strDevID, DevIDBuffSize))
{
@ -150,9 +150,9 @@ diff -up hplip-3.25.2/prnt/hpijs/context2.cpp.covscan hplip-3.25.2/prnt/hpijs/co
}
thePrinter = pPFI->CreatePrinter (pSS, familyHandle);
if (thePrinter->constructor_error != NO_ERROR)
diff -up hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan hplip-3.25.2/prnt/hpijs/systemservices.cpp
--- hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan 2025-02-27 13:12:44.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/systemservices.cpp 2025-04-11 10:21:58.036891582 +0200
diff -up hplip-3.23.3/prnt/hpijs/systemservices.cpp.covscan hplip-3.23.3/prnt/hpijs/systemservices.cpp
--- hplip-3.23.3/prnt/hpijs/systemservices.cpp.covscan 2023-03-28 09:26:27.000000000 +0200
+++ hplip-3.23.3/prnt/hpijs/systemservices.cpp 2023-05-29 13:58:10.971395203 +0200
@@ -396,7 +396,10 @@ void SystemServices::AdjustIO(IO_MODE IM
IOMode.bDevID =IM.bDevID && IOMode.bDevID;
@ -164,10 +164,10 @@ diff -up hplip-3.25.2/prnt/hpijs/systemservices.cpp.covscan hplip-3.25.2/prnt/hp
}
APDK_END_NAMESPACE
diff -up hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan hplip-3.25.2/prnt/hpps/hppsfilter.c
--- hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpps/hppsfilter.c 2025-04-11 10:21:58.037072084 +0200
@@ -329,13 +329,13 @@ static void WriteHeader(char **argument)
diff -up hplip-3.23.3/prnt/hpps/hppsfilter.c.covscan hplip-3.23.3/prnt/hpps/hppsfilter.c
--- hplip-3.23.3/prnt/hpps/hppsfilter.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpps/hppsfilter.c 2023-05-29 13:58:10.972395197 +0200
@@ -274,13 +274,13 @@ static void WriteHeader(char **argument)
/* Writing Header Information
argument[1] = JOB ID , argument[2]= USERNAME, argument[3] = TITLE */
hpwrite("\x1b%-12345X@PJL JOBNAME=", strlen("\x1b%-12345X@PJL JOBNAME="));
@ -184,9 +184,9 @@ diff -up hplip-3.25.2/prnt/hpps/hppsfilter.c.covscan hplip-3.25.2/prnt/hpps/hpps
hpwrite(buffer, strlen(buffer));
fprintf(stderr, "HP PS filter func = WriteHeader : WRITING PJL HEADER INFO\n");
return;
diff -up hplip-3.25.2/protocol/hp_ipp.h.covscan hplip-3.25.2/protocol/hp_ipp.h
--- hplip-3.25.2/protocol/hp_ipp.h.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/protocol/hp_ipp.h 2025-04-11 10:21:58.037239020 +0200
diff -up hplip-3.23.3/protocol/hp_ipp.h.covscan hplip-3.23.3/protocol/hp_ipp.h
--- hplip-3.23.3/protocol/hp_ipp.h.covscan 2023-05-29 13:58:10.972395197 +0200
+++ hplip-3.23.3/protocol/hp_ipp.h 2023-05-29 13:59:03.645085468 +0200
@@ -168,6 +168,11 @@ HPIPP_RESULT parseResponseHeader(char* h
HPIPP_RESULT prepend_http_header(raw_ipp *raw_request,const char *resource);
enum HPMUD_RESULT sendUSBRequest(char *buf, int size, raw_ipp *responseptr, char * device_uri);
@ -199,9 +199,9 @@ diff -up hplip-3.25.2/protocol/hp_ipp.h.covscan hplip-3.25.2/protocol/hp_ipp.h
ipp_t * createFaxDetailRequest(const char *printer_name);
ipp_t * getDeviceFaxModemAttributes(char* device_uri,char* printer_name, int *count);
diff -up hplip-3.25.2/scan/sane/bb_ledm.c.covscan hplip-3.25.2/scan/sane/bb_ledm.c
--- hplip-3.25.2/scan/sane/bb_ledm.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/bb_ledm.c 2025-04-11 10:21:58.037378913 +0200
diff -up hplip-3.23.3/scan/sane/bb_ledm.c.covscan hplip-3.23.3/scan/sane/bb_ledm.c
--- hplip-3.23.3/scan/sane/bb_ledm.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/bb_ledm.c 2023-05-29 13:58:10.972395197 +0200
@@ -26,6 +26,7 @@
# include "http.h"
# include "xml.h"
@ -210,9 +210,9 @@ diff -up hplip-3.25.2/scan/sane/bb_ledm.c.covscan hplip-3.25.2/scan/sane/bb_ledm
# include <stdint.h>
diff -up hplip-3.25.2/scan/sane/common.h.covscan hplip-3.25.2/scan/sane/common.h
--- hplip-3.25.2/scan/sane/common.h.covscan 2025-04-11 10:21:57.806326475 +0200
+++ hplip-3.25.2/scan/sane/common.h 2025-04-11 10:21:58.037532413 +0200
diff -up hplip-3.23.3/scan/sane/common.h.covscan hplip-3.23.3/scan/sane/common.h
--- hplip-3.23.3/scan/sane/common.h.covscan 2023-05-29 13:58:10.727396637 +0200
+++ hplip-3.23.3/scan/sane/common.h 2023-05-29 13:58:10.972395197 +0200
@@ -36,7 +36,7 @@
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
@ -222,9 +222,9 @@ diff -up hplip-3.25.2/scan/sane/common.h.covscan hplip-3.25.2/scan/sane/common.h
#define BUG_DUMP(data, size) bugdump((data), (size))
#define BUG_SZ(args...) {syslog(LOG_ERR, args); DBG(2, args);}
diff -up hplip-3.25.2/scan/sane/escl.c.covscan hplip-3.25.2/scan/sane/escl.c
--- hplip-3.25.2/scan/sane/escl.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/escl.c 2025-04-11 10:21:58.037677793 +0200
diff -up hplip-3.23.3/scan/sane/escl.c.covscan hplip-3.23.3/scan/sane/escl.c
--- hplip-3.23.3/scan/sane/escl.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/escl.c 2023-05-29 13:58:10.972395197 +0200
@@ -849,7 +849,7 @@ SANE_Status escl_control_option(SANE_Han
//DBG8("escl_control_option (option=%s) action=%d\n", ps->option[option].name, action);
if (stat != SANE_STATUS_GOOD)
@ -243,9 +243,9 @@ diff -up hplip-3.25.2/scan/sane/escl.c.covscan hplip-3.25.2/scan/sane/escl.c
return;
}
diff -up hplip-3.25.2/scan/sane/http.c.covscan hplip-3.25.2/scan/sane/http.c
--- hplip-3.25.2/scan/sane/http.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/http.c 2025-04-11 10:21:58.037859247 +0200
diff -up hplip-3.23.3/scan/sane/http.c.covscan hplip-3.23.3/scan/sane/http.c
--- hplip-3.23.3/scan/sane/http.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/http.c 2023-05-29 13:58:10.973395191 +0200
@@ -36,6 +36,7 @@
#include <string.h>
#include <syslog.h>
@ -254,9 +254,9 @@ diff -up hplip-3.25.2/scan/sane/http.c.covscan hplip-3.25.2/scan/sane/http.c
#include "hpmud.h"
#include "http.h"
diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
--- hplip-3.25.2/scan/sane/io.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/io.c 2025-04-11 10:21:58.037998005 +0200
diff -up hplip-3.23.3/scan/sane/io.c.covscan hplip-3.23.3/scan/sane/io.c
--- hplip-3.23.3/scan/sane/io.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/io.c 2023-05-29 13:58:10.973395191 +0200
@@ -50,7 +50,7 @@ int __attribute__ ((visibility ("hidden"
if (dbus_error_is_set(&dbus_err))
@ -284,9 +284,9 @@ diff -up hplip-3.25.2/scan/sane/io.c.covscan hplip-3.25.2/scan/sane/io.c
return 0;
}
diff -up hplip-3.25.2/scan/sane/ledm.c.covscan hplip-3.25.2/scan/sane/ledm.c
--- hplip-3.25.2/scan/sane/ledm.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/ledm.c 2025-04-11 10:21:58.038131991 +0200
diff -up hplip-3.23.3/scan/sane/ledm.c.covscan hplip-3.23.3/scan/sane/ledm.c
--- hplip-3.23.3/scan/sane/ledm.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/ledm.c 2023-05-29 13:58:10.973395191 +0200
@@ -813,7 +813,7 @@ SANE_Status ledm_control_option(SANE_Han
if (stat != SANE_STATUS_GOOD)
@ -305,9 +305,9 @@ diff -up hplip-3.25.2/scan/sane/ledm.c.covscan hplip-3.25.2/scan/sane/ledm.c
return;
}
diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell.c
--- hplip-3.25.2/scan/sane/marvell.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/marvell.c 2025-04-11 10:21:58.038309394 +0200
diff -up hplip-3.23.3/scan/sane/marvell.c.covscan hplip-3.23.3/scan/sane/marvell.c
--- hplip-3.23.3/scan/sane/marvell.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/marvell.c 2023-05-29 13:58:10.976395173 +0200
@@ -134,7 +134,7 @@ static int get_ip_data(struct marvell_se
if (!ps->ip_handle)
@ -407,9 +407,9 @@ diff -up hplip-3.25.2/scan/sane/marvell.c.covscan hplip-3.25.2/scan/sane/marvell
goto bugout;
}
diff -up hplip-3.25.2/scan/sane/sclpml.c.covscan hplip-3.25.2/scan/sane/sclpml.c
--- hplip-3.25.2/scan/sane/sclpml.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/sclpml.c 2025-04-11 10:21:58.038605168 +0200
diff -up hplip-3.23.3/scan/sane/sclpml.c.covscan hplip-3.23.3/scan/sane/sclpml.c
--- hplip-3.23.3/scan/sane/sclpml.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/sclpml.c 2023-05-29 13:58:10.976395173 +0200
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <fcntl.h>
@ -427,9 +427,9 @@ diff -up hplip-3.25.2/scan/sane/sclpml.c.covscan hplip-3.25.2/scan/sane/sclpml.c
return;
}
diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
--- hplip-3.25.2/scan/sane/soap.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/soap.c 2025-04-11 10:21:58.038894758 +0200
diff -up hplip-3.23.3/scan/sane/soap.c.covscan hplip-3.23.3/scan/sane/soap.c
--- hplip-3.23.3/scan/sane/soap.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/soap.c 2023-05-29 13:58:10.977395167 +0200
@@ -142,7 +142,7 @@ static int get_ip_data(struct soap_sessi
if (!ps->ip_handle)
@ -520,9 +520,9 @@ diff -up hplip-3.25.2/scan/sane/soap.c.covscan hplip-3.25.2/scan/sane/soap.c
goto bugout;
}
diff -up hplip-3.25.2/scan/sane/soapht.c.covscan hplip-3.25.2/scan/sane/soapht.c
--- hplip-3.25.2/scan/sane/soapht.c.covscan 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/scan/sane/soapht.c 2025-04-11 10:21:58.039106018 +0200
diff -up hplip-3.23.3/scan/sane/soapht.c.covscan hplip-3.23.3/scan/sane/soapht.c
--- hplip-3.23.3/scan/sane/soapht.c.covscan 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/scan/sane/soapht.c 2023-05-29 13:58:10.977395167 +0200
@@ -136,7 +136,7 @@ static int get_ip_data(struct soap_sessi
if (!ps->ip_handle)

View file

@ -1,3 +1,14 @@
--- hplip-3.20.3/prnt/hpps/hppsfilter.c.orig 2020-03-25 01:09:51.585129957 +0000
+++ hplip-3.20.3/prnt/hpps/hppsfilter.c 2020-03-25 01:10:15.610058293 +0000
@@ -104,7 +104,7 @@ static void open_tempbookletfile(char *m
if(ptempbooklet_file == NULL)
{
fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
- return 1;
+ return;
}
chmod(temp_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
--- hplip-3.20.3/scan/sane/hpaio.c.orig 2020-03-25 01:24:15.558732638 +0000
+++ hplip-3.20.3/scan/sane/hpaio.c 2020-03-25 02:48:36.097054366 +0000
@@ -406,20 +406,34 @@ extern SANE_Status sane_hpaio_open(SANE_

View file

@ -1,53 +0,0 @@
From 839a216f17ce17a5667eecd54de2a70b1383df2c Mon Sep 17 00:00:00 2001
From: "FeRD (Frank Dana)" <ferdnyc@gmail.com>
Date: Wed, 5 Jan 2022 21:57:06 -0500
Subject: [PATCH 1/2] Info dlg: Use QDateTime.toString()
---
ui5/infodialog.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui5/infodialog.py b/ui5/infodialog.py
index 0de62fb..eaa846d 100644
--- a/ui5/infodialog.py
+++ b/ui5/infodialog.py
@@ -186,7 +186,7 @@ class InfoDialog(QDialog, Ui_Dialog):
for row, h in enumerate(history):
dt = QDateTime()
dt.setTime_t(int(h.timedate))
- dt = value_str(dt)
+ dt = value_str(dt.toString())
ess = device.queryString(h.event_code, 0)
--
2.33.1
From f6e7ab1542afe7fbcd2d29b6cb15b97484e3779c Mon Sep 17 00:00:00 2001
From: "FeRD (Frank Dana)" <ferdnyc@gmail.com>
Date: Wed, 5 Jan 2022 21:56:39 -0500
Subject: [PATCH 2/2] value_str: Handle QDateTime correctly
---
ui5/ui_utils.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/ui5/ui_utils.py b/ui5/ui_utils.py
index caba339..225ca1c 100644
--- a/ui5/ui_utils.py
+++ b/ui5/ui_utils.py
@@ -105,7 +105,10 @@ def value_str(data):
if data is None:
return ""
try:
- if not PY3:
+ if PY3:
+ if isinstance(data, QDateTime):
+ data = data.toString()
+ else:
try:
data = data.toString()
except AttributeError as e:
--
2.33.1

View file

@ -1,13 +0,0 @@
diff --git a/scan/sane/ledmi.h b/scan/sane/ledmi.h
index a987c5d..f72847b 100644
--- a/scan/sane/ledmi.h
+++ b/scan/sane/ledmi.h
@@ -162,7 +162,7 @@ struct ledm_session
int bb_open(struct ledm_session*);
int bb_close(struct ledm_session*);
int bb_get_parameters(struct ledm_session*, SANE_Parameters*, int);
-int bb_is_paper_in_adf(); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */
+int bb_is_paper_in_adf(struct ledm_session*); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */
SANE_Status bb_start_scan(struct ledm_session*);
int bb_get_image_data(struct ledm_session*, int);
int bb_end_page(struct ledm_session*, int);

View file

@ -1,24 +0,0 @@
diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index 79f8fa8..28a77b3 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -816,6 +816,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow):
def updateWindowTitle(self):
+ if self.cur_device is None or self.cur_device_uri is None:
+ return
+
if self.cur_device.device_type == DEVICE_TYPE_FAX:
self.setWindowTitle(self.__tr("HP Device Manager - %s (Fax)"%self.cur_device.model_ui))
else:
@@ -1876,6 +1879,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow):
def updatePrintControlTab(self):
+ if self.cur_device is None or self.cur_printer is None:
+ return
+
if self.cur_device.device_type == DEVICE_TYPE_PRINTER:
self.PrintControlPrinterNameLabel.setText(self.__tr("Printer Name:"))
self.groupBox.setTitle(QApplication.translate("MainWindow", "Printer Queue Control", None))

View file

@ -1,114 +0,0 @@
diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c
index 57d1dde..3475929 100644
--- a/scan/sane/hpaio.c
+++ b/scan/sane/hpaio.c
@@ -379,7 +379,7 @@ extern SANE_Status sane_hpaio_get_devices(const SANE_Device ***deviceList, SANE_
ResetDeviceList(&DeviceList);
DevDiscovery(localOnly);
*deviceList = (const SANE_Device **)DeviceList;
- SANE_Device*** devList;
+ const SANE_Device*** devList;
orblite_get_devices(devList, localOnly);
return SANE_STATUS_GOOD;
diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c
index 2eb7aba..4eaa468 100644
--- a/scan/sane/orblite.c
+++ b/scan/sane/orblite.c
@@ -64,28 +64,28 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_TL_X, SANE_TITLE_SCAN_TL_X, SANE_DESC_SCAN_TL_X, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeLeft // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeLeft // constraint_type, constraint
},
{
SANE_NAME_SCAN_TL_Y, SANE_TITLE_SCAN_TL_Y, SANE_DESC_SCAN_TL_Y, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeTop // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeTop // constraint_type, constraint
},
{
SANE_NAME_SCAN_BR_X, SANE_TITLE_SCAN_BR_X, SANE_DESC_SCAN_BR_X, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeRight // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeRight // constraint_type, constraint
},
{
SANE_NAME_SCAN_BR_Y, SANE_TITLE_SCAN_BR_Y, SANE_DESC_SCAN_BR_Y, // name, title, desc
SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeBottom // constraint_type, constraint
+ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeBottom // constraint_type, constraint
},
// optResolution, // resolution group
@@ -93,7 +93,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_RESOLUTION, SANE_TITLE_SCAN_RESOLUTION, SANE_DESC_SCAN_RESOLUTION, // name, title, desc
SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint
+ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint
},
// optMode, // color/depth group
@@ -101,7 +101,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_MODE, SANE_TITLE_SCAN_MODE, SANE_DESC_SCAN_MODE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_modes // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_modes // constraint type, constraint
},
// optSource,
@@ -109,7 +109,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_SCAN_SOURCE, SANE_TITLE_SCAN_SOURCE, SANE_DESC_SCAN_SOURCE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_sources // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_sources // constraint type, constraint
},
// optPaperSize,
@@ -117,7 +117,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc
SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_paper_sizes // constraint type, constraint
+ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_paper_sizes // constraint type, constraint
},
// optPaperSize,
@@ -125,7 +125,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = {
SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc
SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size,
SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability)
- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint
+ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint
},
#ifdef NOTDEF
// default template
@@ -274,6 +274,7 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle)
SANE_Auth_Callback authorize;
const SANE_Device *** device_list;
SANE_Bool local_only;
+ void * temp_handle;
// Allocate handle, set all handle values to zero
@@ -305,7 +306,9 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle)
if (stat != SANE_STATUS_GOOD)
return stat;
- stat = g_handle->bb_orblite_open(devicename, &g_handle);
+ temp_handle = g_handle;
+ stat = g_handle->bb_orblite_open(devicename, &temp_handle);
+ g_handle = temp_handle;
if (stat == SANE_STATUS_GOOD)
*handle = g_handle;

View file

@ -10,3 +10,47 @@ index 99bda7b..0f90f92 100644
self.prev_length = len(y)
self.spinner_pos = (self.spinner_pos + 1) % 8
diff --git a/base/validation.py b/base/validation.py
index ee6b05a..5e955dc 100644
--- a/base/validation.py
+++ b/base/validation.py
@@ -42,8 +42,11 @@ class DigiSign_Verification(object):
class GPG_Verification(DigiSign_Verification):
- def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
- self.__pgp_site = pgp_site
+ def __init__(self, keyservers = ['keyserver.ubuntu.com',
+ 'pgp.surf.nl',
+ 'pgp.mit.edu'],
+ key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9):
+ self.__keyservers = keyservers
self.__key = key
self.__gpg = utils.which('gpg',True)
@@ -82,13 +85,18 @@ class GPG_Verification(DigiSign_Verification):
def __acquire_gpg_key(self):
-
- cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \
- % (self.__gpg, self.__gpg_dir, self.__pgp_site, self.__key)
-
- log.info("Receiving digital keys: %s" % cmd)
- status, output = utils.run(cmd)
- log.debug(output)
+ for kserver in self.__keyservers:
+ cmd = '%s --homedir %s --no-permission-warning --keyserver %s --recv-keys 0x%X' \
+ % (self.__gpg, self.__gpg_dir, kserver, self.__key)
+
+ log.info("Receiving digital keys: %s" % cmd)
+ status, output = utils.run(cmd)
+ log.debug(output)
+
+ if not status:
+ break
+ log.info("Receiving keys from {} failed, trying the next keyserver."
+ .format(kserver))
self.__change_owner(True)

View file

@ -1,13 +0,0 @@
diff --git a/base/utils.py b/base/utils.py
index e2de550..55848b8 100644
--- a/base/utils.py
+++ b/base/utils.py
@@ -474,7 +474,7 @@ def sort_dict_by_value(d):
def commafy(val):
- return locale.format("%s", val, grouping=True)
+ return locale.format_string("%s", val, grouping=True)
def format_bytes(s, show_bytes=False):

26
hplip-no-readfp.patch Normal file
View file

@ -0,0 +1,26 @@
diff --git a/base/g.py b/base/g.py
index 0aa0e2e..96b3131 100644
--- a/base/g.py
+++ b/base/g.py
@@ -128,7 +128,7 @@ class ConfigBase(object):
try:
fp = open(self.filename, "r")
try:
- self.conf.readfp(fp)
+ self.conf.read_file(fp, self.filename)
except configparser.MissingSectionHeaderError:
print("")
log.error("Found No Section in %s. Please set the http proxy for root and try again." % self.filename)
diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index 3110a0f..3761f89 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -1072,7 +1072,7 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow):
hplip_conf = configparser.ConfigParser()
fp = open("/etc/hp/hplip.conf", "r")
- hplip_conf.readfp(fp)
+ hplip_conf.read_file(fp, "/etc/hp/hplip.conf")
fp.close()
try:

View file

@ -1,79 +0,0 @@
diff --git a/base/device.py b/base/device.py
index 2fdb29c..ca0d97e 100644
--- a/base/device.py
+++ b/base/device.py
@@ -2526,9 +2526,9 @@ Content-length: %d\r
data = None
log.debug("Opening: %s" % url2)
- opener = LocalOpener({})
+ opener = LocalOpener()
try:
- f = opener.open(url2, data)
+ f = opener.open_hp(url2, data)
except Error:
log.error("Status read failed: %s" % url2)
@@ -2548,7 +2548,7 @@ Content-length: %d\r
try:
url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
data = self
- opener = LocalOpenerEWS_LEDM({})
+ opener = LocalOpenerEWS_LEDM()
try:
if footer:
return opener.open_hp(url2, data, footer)
@@ -2563,7 +2563,7 @@ Content-length: %d\r
try:
url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
data = self
- opener = LocalOpener_LEDM({})
+ opener = LocalOpener_LEDM()
try:
if footer:
return opener.open_hp(url2, data, footer)
@@ -2580,7 +2580,7 @@ Content-length: %d\r
url="/cdm/supply/v1/suppliesPublic"
url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
data = self
- opener = LocalOpener_CDM({})
+ opener = LocalOpener_CDM()
try:
if footer:
return opener.open_hp(url2, data, footer)
@@ -2688,7 +2688,7 @@ Content-length: %d\r
# URLs: hp:/usb/HP_LaserJet_3050?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener(urllib_request.URLopener):
+class LocalOpener():
def open_hp(self, url, dev):
log.debug("open_hp(%s)" % url)
@@ -2718,7 +2718,7 @@ class LocalOpener(urllib_request.URLopener):
return response#.fp
# URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpenerEWS_LEDM(urllib_request.URLopener):
+class LocalOpenerEWS_LEDM():
def open_hp(self, url, dev, foot=""):
log.debug("open_hp(%s)" % url)
@@ -2744,7 +2744,7 @@ class LocalOpenerEWS_LEDM(urllib_request.URLopener):
# URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener_LEDM(urllib_request.URLopener):
+class LocalOpener_LEDM():
def open_hp(self, url, dev, foot=""):
log.debug("open_hp(%s)" % url)
@@ -2771,7 +2771,7 @@ class LocalOpener_LEDM(urllib_request.URLopener):
# URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener_CDM(urllib_request.URLopener):
+class LocalOpener_CDM():
def open_hp(self, url, dev, foot=""):
log.debug("open_hp(%s)" % url)
match_obj = http_pat_url.search(url)

View file

@ -1,13 +1,29 @@
diff -up hplip-3.25.6/Makefile.am.pcardext-disable hplip-3.25.6/Makefile.am
--- hplip-3.25.6/Makefile.am.pcardext-disable 2025-08-11 12:52:35.359621088 +0200
+++ hplip-3.25.6/Makefile.am 2025-08-11 12:54:58.654515582 +0200
@@ -306,14 +306,6 @@ if !HPLIP_CLASS_DRIVER
The pcardext Python extension cannot be loaded because it has not been
ported to Python 3:
>>> import pcardext
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /usr/lib64/python3.11/site-packages/pcardext.so: undefined symbol: PyString_AsStringAndSize
>>>
Stop building this extension because it breaks the build if the
compiler lacks support for implicit function declarations.
Bug: <https://bugzilla.redhat.com/show_bug.cgi?id=2148210>
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/Makefile.am b/Makefile.am
index ddac16a9dd514008..15d953af9150c09e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -306,13 +306,6 @@ if !HPLIP_CLASS_DRIVER
pcarddir = $(hplipdir)/pcard
dist_pcard_DATA = pcard/__init__.py pcard/photocard.py
-# pcardext
-pcardextdir = $(PYTHONEXECDIR)
-pcardextdir = $(PYTHONEXECDIR)
-pcardextdir = $(pyexecdir)
-pcardext_LTLIBRARIES = pcardext.la
-pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h

View file

@ -32,7 +32,7 @@ index 56683fb..031ceec 100755
- cmd = "%s --cache=off -P %s %s" % (wget,self.__plugin_path,src)
+ curl = utils.which("curl", True)
+ if curl:
+ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src)
+ cmd = "%s --create-dirs -O --output-dir %s %s" % (curl,self.__plugin_path,src)
log.debug(cmd)
status, output = utils.run(cmd)
- log.debug("wget returned: %d" % status)
@ -43,7 +43,7 @@ index 56683fb..031ceec 100755
src = os.path.join(PLUGIN_FALLBACK_LOCATION, self.__plugin_name)
log.info("Plugin is not accessible. Trying to download it from fallback location: [%s]" % src)
- cmd = "%s --cache=off -P %s %s" % (wget,self.__plugin_path,src)
+ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl,self.__plugin_path,src)
+ cmd = "%s --create-dirs -O --output-dir %s %s" % (curl,self.__plugin_path,src)
log.debug(cmd)
status, output = utils.run(cmd)
@ -52,7 +52,7 @@ index 56683fb..031ceec 100755
status, filename = utils.download_from_network(digsig_url, digsig_file, True)
else:
- cmd = "%s --cache=off -P %s %s" % (wget,self.__plugin_path,digsig_url)
+ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl, self.__plugin_path,digsig_url)
+ cmd = "%s --create-dirs -O --output-dir %s %s" % (curl, self.__plugin_path,digsig_url)
log.debug(cmd)
status, output = utils.run(cmd)
except IOError as e:

View file

@ -1,41 +0,0 @@
diff --git a/base/os_utils.py b/base/os_utils.py
index 82a8b42..d918822 100644
--- a/base/os_utils.py
+++ b/base/os_utils.py
@@ -26,6 +26,7 @@ import locale
import stat
import subprocess
import shlex
+import sys
#Local
from . import logger
@@ -37,17 +38,22 @@ def execute(cmd):
try:
# Use shlex.split to safely split the command into arguments
args = shlex.split(cmd)
- process = subprocess.Popen(args,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ process = subprocess.Popen(args,stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin)
process.wait()
stdout, stderr = process.communicate()
- log.debug(f"Command executed: {cmd}\n{stdout.decode()}")
+
+ log.debug(f"Command executed: {cmd}{f'\n{stdout.decode()}' if stdout else ''}")
+
if process.returncode != 0:
- error_message = f"Command failed with return code {process.returncode}: {cmd}\n{stderr.decode()}"
- log.error(error_message)
+ log.error(f"Command failed with return code" \
+ f"{process.returncode}: {cmd}" \
+ f"{f'\n{stderr.decode()}' if stderr else ''}")
+
return process.returncode
except subprocess.CalledProcessError as e:
- error_message = f"Command failed with return code {e.returncode}: {cmd}\n{e.stderr.decode()}"
- log.error(error_message)
+ log.error(f"Command failed with return code" \
+ f"{e.returncode}: {cmd}" \
+ f"{f'\n{e.stderr.decode()}' if e.stderr else ''}")
return e.returncode
except Exception as e:
log.error(f"Error executing command: {cmd}\n{str(e)}")

View file

@ -1,37 +0,0 @@
diff --git a/scan.py b/scan.py
index b262ef2..cb0ffc1 100755
--- a/scan.py
+++ b/scan.py
@@ -83,7 +83,7 @@ edge_erase_value = 0
contrast = 0
set_contrast = False
-page_size = ''
+page_size = 'a4'
size_desc = ''
page_units = 'mm'
default_res = 300
@@ -1615,7 +1615,7 @@ try:
else:
im = im.convert("RGB")
- #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res)
+ #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res)
if barcode_count>0:
if barcode_first_occurence == True:
if barcode_first_page == False:
@@ -1718,12 +1718,12 @@ try:
#so that the output image size matches with the input scan area
#for Flatbad
if im:
- im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res)
+ im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res)
"""
#for ADF
for Image_file in adf_page_files:
image = Image.open(Image_file)
- resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[size],res)
+ resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[page_size],res)
resized_image.save(Image_file)
"""
if adf and (save_file =='jpg' or save_file == 'png' or save_file == 'tiff' or save_file == 'pdf' or save_file == 'bmp'):

View file

@ -0,0 +1,51 @@
diff -up hplip-3.23.3/protocol/hp_ipp.c.snprintf-format hplip-3.23.3/protocol/hp_ipp.c
--- hplip-3.23.3/protocol/hp_ipp.c.snprintf-format 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/protocol/hp_ipp.c 2023-05-29 14:21:30.872871575 +0200
@@ -108,10 +108,10 @@ int addCupsPrinter(char *name, char *dev
goto abort;
}
- if ( info == NULL )
- snprintf( info,sizeof(info), name );
+ if ( info == NULL )
+ info = name;
- sprintf(printer_uri, "ipp://localhost/printers/%s", name);
+ snprintf( printer_uri, sizeof(printer_uri), "ipp://localhost/printers/%s", name);
cupsSetUser("root");
/* Connect to the HTTP server */
@@ -514,27 +514,27 @@ int __parsePrinterAttributes(ipp_t *resp
if ( strcmp(attr_name, "printer-name") == 0 &&
val_tag == IPP_TAG_NAME ) {
- snprintf(t_printer->name, sizeof(t_printer->name),ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->name, sizeof(t_printer->name), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "device-uri") == 0 &&
val_tag == IPP_TAG_URI ) {
- snprintf(t_printer->device_uri,sizeof(t_printer->device_uri), ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->device_uri, sizeof(t_printer->device_uri), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "printer-uri-supported") == 0 &&
val_tag == IPP_TAG_URI ) {
- snprintf(t_printer->printer_uri,sizeof(t_printer->printer_uri), ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->printer_uri, sizeof(t_printer->printer_uri), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "printer-info") == 0 &&
val_tag == IPP_TAG_TEXT ) {
- snprintf(t_printer->info,sizeof(t_printer->info), ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->info, sizeof(t_printer->info), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "printer-location") == 0 &&
val_tag == IPP_TAG_TEXT ) {
- snprintf(t_printer->location,sizeof(t_printer->location),ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->location, sizeof(t_printer->location), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "printer-make-and-model") == 0 &&
val_tag == IPP_TAG_TEXT ) {
- snprintf(t_printer->make_model,sizeof(t_printer->make_model),ippGetString(attr, 0, NULL) );
+ snprintf(t_printer->make_model, sizeof(t_printer->make_model), "%s", ippGetString(attr, 0, NULL));
}
else if ( strcmp(attr_name, "printer-state") == 0 &&
val_tag == IPP_TAG_ENUM ) {

View file

@ -1,7 +1,7 @@
diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy 2025-04-11 10:16:00.438702562 +0200
+++ hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp 2025-04-11 10:21:25.088096376 +0200
@@ -211,6 +211,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte
diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp
--- hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy 2015-01-21 16:52:44.066497631 +0000
+++ hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp 2015-01-21 16:59:46.216434376 +0000
@@ -203,6 +203,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte
adj_k_width = 0;
black_raster = NULL;
color_raster = NULL;
@ -9,7 +9,7 @@ diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpc
}
HPCupsFilter::~HPCupsFilter()
@@ -428,15 +429,15 @@ DRIVER_ERROR HPCupsFilter::startPage (cu
@@ -384,9 +385,9 @@ DRIVER_ERROR HPCupsFilter::startPage (cu
m_JA.media_attributes.physical_height = cups_header->PageSize[1];
m_JA.media_attributes.printable_width = ((cups_header->ImagingBoundingBox[2]-cups_header->ImagingBoundingBox[0]) * horz_res) / 72;
m_JA.media_attributes.printable_height = ((cups_header->ImagingBoundingBox[3]-cups_header->ImagingBoundingBox[1]) * vert_res) / 72;
@ -20,18 +20,11 @@ diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpc
+ strncpy(m_JA.media_attributes.MediaTypeName, cups_header->MediaType, sizeof(m_JA.media_attributes.MediaTypeName)-1);
+ strncpy(m_JA.quality_attributes.hbpl1_print_quality, cups_header->OutputType, sizeof(m_JA.quality_attributes.hbpl1_print_quality)-1);
m_JA.color_mode = cups_header->cupsRowStep;
if (m_JA.media_attributes.PageSizeName[0] == '\0') {
// Copy the value of cups_header->cupsPageSizeName if it isnot null
if (cups_header->cupsPageSizeName != nullptr) {
- strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName));
+ strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName) - 1);
}
}
}
diff -up hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijs.cpp
--- hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy 2025-04-11 10:16:00.434453252 +0200
+++ hplip-3.25.2/prnt/hpijs/hpijs.cpp 2025-04-11 10:16:00.501228045 +0200
else {
diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijs.cpp
--- hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy 2015-01-21 17:00:03.225512410 +0000
+++ hplip-3.14.10/prnt/hpijs/hpijs.cpp 2015-01-21 17:04:59.308870785 +0000
@@ -605,7 +605,7 @@ int main (int argc, char *argv[], char *
}
@ -41,9 +34,9 @@ diff -up hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijs
#ifdef HAVE_LIBHPIP
char *pDev;
diff -up hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijsfax.cpp
--- hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/prnt/hpijs/hpijsfax.cpp 2025-04-11 10:16:00.501403513 +0200
diff -up hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijsfax.cpp
--- hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy 2015-01-21 17:05:06.585904171 +0000
+++ hplip-3.14.10/prnt/hpijs/hpijsfax.cpp 2015-01-21 17:05:15.787946389 +0000
@@ -282,7 +282,7 @@ int hpijsFaxServer (int argc, char **arg
char user_name[32]={0,};

View file

@ -1,8 +1,7 @@
diff -up hplip-3.25.2/base/device.py.raw-strings hplip-3.25.2/base/device.py
diff -up hplip-3.25.2/base/g.py.raw-strings hplip-3.25.2/base/g.py
diff -up hplip-3.25.2/base/LedmWifi.py.raw-strings hplip-3.25.2/base/LedmWifi.py
--- hplip-3.25.2/base/LedmWifi.py.raw-strings 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/base/LedmWifi.py 2025-04-11 10:26:18.519166530 +0200
diff --git a/base/LedmWifi.py b/base/LedmWifi.py
index f63a050..074d5a2 100644
--- a/base/LedmWifi.py
+++ b/base/LedmWifi.py
@@ -31,7 +31,7 @@ from .g import *
from . import device, utils
from .sixext import to_bytes_utf8
@ -12,12 +11,136 @@ diff -up hplip-3.25.2/base/LedmWifi.py.raw-strings hplip-3.25.2/base/LedmWifi.py
HTTP_OK = 200
HTTP_ACCEPTED = 202
HTTP_NOCONTENT = 204
diff -up hplip-3.25.2/base/logger.py.raw-strings hplip-3.25.2/base/logger.py
diff -up hplip-3.25.2/base/models.py.raw-strings hplip-3.25.2/base/models.py
diff -up hplip-3.25.2/base/password.py.raw-strings hplip-3.25.2/base/password.py
diff -up hplip-3.25.2/base/queues.py.raw-strings hplip-3.25.2/base/queues.py
--- hplip-3.25.2/base/queues.py.raw-strings 2025-04-11 10:26:18.512773352 +0200
+++ hplip-3.25.2/base/queues.py 2025-04-11 10:26:18.520514306 +0200
diff --git a/base/device.py b/base/device.py
index fbe6c34..a551403 100644
--- a/base/device.py
+++ b/base/device.py
@@ -47,7 +47,7 @@ from . import models, mdns, slp, avahi
from .strings import *
from .sixext import PY3, to_bytes_utf8, to_unicode, to_string_latin, to_string_utf8, xStringIO
-http_result_pat = re.compile("""HTTP/\d.\d\s(\d+)""", re.I)
+http_result_pat = re.compile(r"""HTTP/\d.\d\s(\d+)""", re.I)
HTTP_OK = 200
HTTP_ERROR = 500
diff --git a/base/g.py b/base/g.py
index 96b3131..023aeea 100644
--- a/base/g.py
+++ b/base/g.py
@@ -302,7 +302,7 @@ prop.hpcups_build = to_bool(sys_conf.get('configure', 'hpcups-install', '0'))
prop.hpijs_build = to_bool(sys_conf.get('configure', 'hpijs-install', '0'))
# Spinner, ala Gentoo Portage
-spinner = "\|/-\|/-"
+spinner = r"\|/-\|/-"
spinpos = 0
enable_spinner = True
@@ -352,7 +352,7 @@ def check_extension_module_env(ext_mod):
log.error('%s not present in the system. Please re-install HPLIP.' %ext_mod)
sys.exit(1)
- m = re.search('python(\d(\.\d){0,2})', ext_path) #get the python version where the .so file is found
+ m = re.search(r'python(\d(\.\d){0,2})', ext_path) #get the python version where the .so file is found
ext_ver = xint(m.group(1))
if ext_ver[0] == 3:
diff --git a/base/logger.py b/base/logger.py
index dd92a9c..68e4f13 100644
--- a/base/logger.py
+++ b/base/logger.py
@@ -437,10 +437,10 @@ class Logger(object):
start = start + " "
number_chars = number_chars + 1
try:
- elem_start = re.findall("(\<\W{0,1}\w+) ?", line)[0]
- elem_finished = re.findall("([?|\]\]]*\>)", line)[0]
+ elem_start = re.findall(r"(\<\W{0,1}\w+) ?", line)[0]
+ elem_finished = re.findall(r"([?|\]\]]*\>)", line)[0]
#should not have *
- attrs = re.findall("(\S*?\=\".*?\")", line)
+ attrs = re.findall(r"(\S*?\=\".*?\")", line)
#output.write(start + elem_start)
self.log(start+elem_start, level, False)
number_chars = len(start + elem_start)
diff --git a/base/models.py b/base/models.py
index dc6cc39..48dd2ef 100644
--- a/base/models.py
+++ b/base/models.py
@@ -35,7 +35,7 @@ except ImportError:
datetime = None
-pat_prod_num = re.compile("""(\d+)""", re.I)
+pat_prod_num = re.compile(r"""(\d+)""", re.I)
TYPE_UNKNOWN = 0
TYPE_STRING = 1
@@ -427,25 +427,25 @@ class ModelData:
}
self.RE_FIELD_TYPES = {
- re.compile('^r(\d+)-agent(\d+)-kind', re.IGNORECASE) : TYPE_INT,
- re.compile('^r(\d+)-agent(\d+)-type', re.IGNORECASE) : TYPE_INT,
- re.compile('^r(\d+)-agent(\d+)-sku', re.IGNORECASE) : TYPE_STR,
- re.compile('^agent(\d+)-desc', re.IGNORECASE) : TYPE_STR,
- re.compile('^agent(\d+)-virgin', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^agent(\d+)-dvc', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-kind', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-type', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-id', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-hp-ink', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^agent(\d+)-health-desc', re.IGNORECASE) : TYPE_STR,
- re.compile('^agent(\d+)-health$', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-known', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^agent(\d+)-level', re.IGNORECASE) : TYPE_INT,
- re.compile('^agent(\d+)-ack', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^agent(\d+)-sku', re.IGNORECASE) : TYPE_STR,
- re.compile('^in-tray(\d+)', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^out-tray(\d+)', re.IGNORECASE) : TYPE_BOOL,
- re.compile('^model(\d+)', re.IGNORECASE) : TYPE_STR,
+ re.compile(r'^r(\d+)-agent(\d+)-kind', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^r(\d+)-agent(\d+)-type', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^r(\d+)-agent(\d+)-sku', re.IGNORECASE) : TYPE_STR,
+ re.compile(r'^agent(\d+)-desc', re.IGNORECASE) : TYPE_STR,
+ re.compile(r'^agent(\d+)-virgin', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^agent(\d+)-dvc', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-kind', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-type', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-id', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-hp-ink', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^agent(\d+)-health-desc', re.IGNORECASE) : TYPE_STR,
+ re.compile(r'^agent(\d+)-health$', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-known', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^agent(\d+)-level', re.IGNORECASE) : TYPE_INT,
+ re.compile(r'^agent(\d+)-ack', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^agent(\d+)-sku', re.IGNORECASE) : TYPE_STR,
+ re.compile(r'^in-tray(\d+)', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^out-tray(\d+)', re.IGNORECASE) : TYPE_BOOL,
+ re.compile(r'^model(\d+)', re.IGNORECASE) : TYPE_STR,
}
self.TYPE_CACHE = {}
diff --git a/base/password.py b/base/password.py
index 259bf82..a4ed107 100644
--- a/base/password.py
+++ b/base/password.py
@@ -167,8 +167,8 @@ class Password(object):
elif i == 1: # TIMEOUT
if('true' in cmd and self.__password_prompt_str == ""): # sudo true or su -c "true"
- cb = cb.replace("[", "\[")
- cb = cb.replace("]", "\]")
+ cb = cb.replace("[", r"\[")
+ cb = cb.replace("]", r"\]")
self.__password_prompt_str = cb
try:
diff --git a/base/queues.py b/base/queues.py
index 0818574..8625f53 100755
--- a/base/queues.py
+++ b/base/queues.py
@@ -46,7 +46,7 @@ HPPS = 3
HPOTHER = 4
@ -36,12 +159,101 @@ diff -up hplip-3.25.2/base/queues.py.raw-strings hplip-3.25.2/base/queues.py
except AttributeError:
desc = ''
diff -up hplip-3.25.2/base/status.py.raw-strings hplip-3.25.2/base/status.py
diff -up hplip-3.25.2/base/tui.py.raw-strings hplip-3.25.2/base/tui.py
diff -up hplip-3.25.2/base/utils.py.raw-strings hplip-3.25.2/base/utils.py
diff -up hplip-3.25.2/check.py.raw-strings hplip-3.25.2/check.py
--- hplip-3.25.2/check.py.raw-strings 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/check.py 2025-04-11 10:26:18.521601431 +0200
diff --git a/base/status.py b/base/status.py
index 37c774e..01f455d 100644
--- a/base/status.py
+++ b/base/status.py
@@ -1341,7 +1341,7 @@ def MapPJLErrorCode(error_code, str_code=None):
return status_code
-pjl_code_pat = re.compile("""^CODE\s*=\s*(\d.*)$""", re.IGNORECASE)
+pjl_code_pat = re.compile(r"""^CODE\s*=\s*(\d.*)$""", re.IGNORECASE)
diff --git a/base/tui.py b/base/tui.py
index 0f90f92..3b36c65 100644
--- a/base/tui.py
+++ b/base/tui.py
@@ -217,7 +217,7 @@ class ProgressMeter(object):
self.progress = 0
self.prompt = prompt
self.prev_length = 0
- self.spinner = "\|/-\|/-*"
+ self.spinner = r"\|/-\|/-*"
self.spinner_pos = 0
self.max_size = ttysize()[1] - len(prompt) - 25
self.update(0)
diff --git a/base/utils.py b/base/utils.py
index 2b631ce..2fb57c4 100644
--- a/base/utils.py
+++ b/base/utils.py
@@ -148,7 +148,7 @@ def get_cups_systemgroup_list():
return lis
try:
- lis = ((re.findall('SystemGroup [\w* ]*',fp.read()))[0].replace('SystemGroup ','')).split(' ')
+ lis = ((re.findall(r'SystemGroup [\w* ]*',fp.read()))[0].replace('SystemGroup ','')).split(' ')
except IndexError:
return lis
@@ -1597,7 +1597,7 @@ def mixin(cls):
# ------------------------- Usage Help
USAGE_OPTIONS = ("[OPTIONS]", "", "heading", False)
USAGE_LOGGING1 = ("Set the logging level:", "-l<level> or --logging=<level>", 'option', False)
-USAGE_LOGGING2 = ("", "<level>: none, info\*, error, warn, debug (\*default)", "option", False)
+USAGE_LOGGING2 = ("", r"<level>: none, info\*, error, warn, debug (\*default)", "option", False)
USAGE_LOGGING3 = ("Run in debug mode:", "-g (same as option: -ldebug)", "option", False)
USAGE_LOGGING_PLAIN = ("Output plain text only:", "-t", "option", False)
USAGE_ARGS = ("[PRINTER|DEVICE-URI]", "", "heading", False)
@@ -1605,13 +1605,13 @@ USAGE_ARGS2 = ("[PRINTER]", "", "heading", False)
USAGE_DEVICE = ("To specify a device-URI:", "-d<device-uri> or --device=<device-uri>", "option", False)
USAGE_PRINTER = ("To specify a CUPS printer:", "-p<printer> or --printer=<printer>", "option", False)
USAGE_BUS1 = ("Bus to probe (if device not specified):", "-b<bus> or --bus=<bus>", "option", False)
-USAGE_BUS2 = ("", "<bus>: cups\*, usb\*, net, bt, fw, par\* (\*defaults) (Note: bt and fw not supported in this release.)", 'option', False)
+USAGE_BUS2 = ("", r"<bus>: cups\*, usb\*, net, bt, fw, par\* (\*defaults) (Note: bt and fw not supported in this release.)", 'option', False)
USAGE_HELP = ("This help information:", "-h or --help", "option", True)
USAGE_SPACE = ("", "", "space", False)
USAGE_EXAMPLES = ("Examples:", "", "heading", False)
USAGE_NOTES = ("Notes:", "", "heading", False)
USAGE_STD_NOTES1 = ("If device or printer is not specified, the local device bus is probed and the program enters interactive mode.", "", "note", False)
-USAGE_STD_NOTES2 = ("If -p\* is specified, the default CUPS printer will be used.", "", "note", False)
+USAGE_STD_NOTES2 = (r"If -p\* is specified, the default CUPS printer will be used.", "", "note", False)
USAGE_SEEALSO = ("See Also:", "", "heading", False)
USAGE_LANGUAGE = ("Set the language:", "--loc=<lang> or --lang=<lang>. Use --loc=? or --lang=? to see a list of available language codes.", "option", False)
USAGE_LANGUAGE2 = ("Set the language:", "--lang=<lang>. Use --lang=? to see a list of available language codes.", "option", False)
@@ -1839,7 +1839,7 @@ encoding: utf8
elif typ == 'man':
log.info('.TH "%s" 1 "%s" Linux "User Manuals"' % (crumb, version))
- log.info(".SH NAME\n%s \- %s" % (crumb, title))
+ log.info(r".SH NAME\n%s \- %s" % (crumb, title))
for line in text_list:
text1, text2, format, trailing_space = line
@@ -1938,7 +1938,7 @@ def unescape(text):
except KeyError:
pass
return text # leave as is
- return re.sub("&#?\w+;", fixup, text)
+ return re.sub(r"&#?\w+;", fixup, text)
# Adds HTML or XML character references and entities from a text string
@@ -1991,7 +1991,7 @@ def Is_HPLIP_older_version(installed_version, available_version):
log.debug("HPLIP Installed_version=%s Available_version=%s"%(installed_version,available_version))
cnt = 0
Is_older = False
- pat=re.compile('''(\d{1,})([a-z]{1,})''')
+ pat=re.compile(r'''(\d{1,})([a-z]{1,})''')
try:
while cnt <len(installed_array) and cnt <len(available_array):
diff --git a/check.py b/check.py
index 284b88e..86ca832 100755
--- a/check.py
+++ b/check.py
@@ -627,7 +627,7 @@ class DependenciesCheck(object):
status, output = utils.run("%s -d03f0:" % lsusb)
@ -60,9 +272,10 @@ diff -up hplip-3.25.2/check.py.raw-strings hplip-3.25.2/check.py
pat = re.compile('''.*:(.*)''')
if pat.search(g):
out = out +' '+ pat.search(g).group(1)
diff -up hplip-3.25.2/fax/soapfax.py.raw-strings hplip-3.25.2/fax/soapfax.py
--- hplip-3.25.2/fax/soapfax.py.raw-strings 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/fax/soapfax.py 2025-04-11 10:26:18.521745824 +0200
diff --git a/fax/soapfax.py b/fax/soapfax.py
index 9865726..344cb34 100644
--- a/fax/soapfax.py
+++ b/fax/soapfax.py
@@ -42,7 +42,7 @@ from base.sixext import to_bytes_utf8
# **************************************************************************** #
@ -72,10 +285,34 @@ diff -up hplip-3.25.2/fax/soapfax.py.raw-strings hplip-3.25.2/fax/soapfax.py
TIME_FORMAT_AM_PM = 1
diff -up hplip-3.25.2/installer/dcheck.py.raw-strings hplip-3.25.2/installer/dcheck.py
diff -up hplip-3.25.2/makeuri.py.raw-strings hplip-3.25.2/makeuri.py
--- hplip-3.25.2/makeuri.py.raw-strings 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/makeuri.py 2025-04-11 10:26:18.522024483 +0200
diff --git a/installer/dcheck.py b/installer/dcheck.py
index a1a4f02..4dbee59 100644
--- a/installer/dcheck.py
+++ b/installer/dcheck.py
@@ -33,8 +33,8 @@ from base.g import *
from base import utils, services
from base.sixext import to_bytes_utf8
-ver1_pat = re.compile("""(\d+\.\d+\.\d+)""", re.IGNORECASE)
-ver_pat = re.compile("""(\d+.\d+)""", re.IGNORECASE)
+ver1_pat = re.compile(r"""(\d+\.\d+\.\d+)""", re.IGNORECASE)
+ver_pat = re.compile(r"""(\d+.\d+)""", re.IGNORECASE)
PID = 0
CMDLINE = 1
@@ -358,7 +358,7 @@ def get_xsane_version():
if output:
- xsane_ver_pat =re.compile('''xsane-(\d{1,}\.\d{1,}).*''')
+ xsane_ver_pat =re.compile(r'''xsane-(\d{1,}\.\d{1,}).*''')
xsane_ver_info = output.splitlines()[0]
if xsane_ver_pat.search(xsane_ver_info):
installed_ver = xsane_ver_pat.search(xsane_ver_info).group(1)
diff --git a/makeuri.py b/makeuri.py
index 4a10de8..6343e31 100755
--- a/makeuri.py
+++ b/makeuri.py
@@ -46,7 +46,7 @@ USAGE = [ (__doc__, "", "name", True),
("DEVNODE (parallel only):", '"/dev/parportX", X=0,1,2,...', "option", False),
("SERIAL NO. (usb and parallel only):", '"serial no."', "option", True),
@ -85,10 +322,23 @@ diff -up hplip-3.25.2/makeuri.py.raw-strings hplip-3.25.2/makeuri.py
("Show the CUPS URI only (quiet mode):", "-c or --cups", "option", False),
("Show the SANE URI only (quiet mode):", "-s or --sane", "option", False),
("Show the HP Fax URI only (quiet mode):", "-f or --fax", "option", False),
diff -up hplip-3.25.2/prnt/cups.py.raw-strings hplip-3.25.2/prnt/cups.py
diff -up hplip-3.25.2/probe.py.raw-strings hplip-3.25.2/probe.py
--- hplip-3.25.2/probe.py.raw-strings 2025-02-27 13:12:29.000000000 +0100
+++ hplip-3.25.2/probe.py 2025-04-11 10:26:18.522312569 +0200
diff --git a/prnt/cups.py b/prnt/cups.py
index 1ea3099..78b8adc 100644
--- a/prnt/cups.py
+++ b/prnt/cups.py
@@ -168,7 +168,7 @@ CUPS_ERROR_BAD_NAME = 0x0f00
CUPS_ERROR_BAD_PARAMETERS = 0x0f01
nickname_pat = re.compile(r'''\*NickName:\s*\"(.*)"''', re.MULTILINE)
-pat_cups_error_log = re.compile("""^loglevel\s?(debug|debug2|warn|info|error|none)""", re.I)
+pat_cups_error_log = re.compile(r"""^loglevel\s?(debug|debug2|warn|info|error|none)""", re.I)
ppd_pat = re.compile(r'''.*hp-(.*?)(-.*)*\.ppd.*''', re.I)
ppd_pat1 = re.compile(r'''.*hp-(.*?)(_.*)*\.ppd.*''', re.I)
diff --git a/probe.py b/probe.py
index 2041fb6..2b43ece 100755
--- a/probe.py
+++ b/probe.py
@@ -42,11 +42,11 @@ USAGE = [(__doc__, "", "name", True),
("Usage: %s [OPTIONS]" % __mod__, "", "summary", True),
utils.USAGE_OPTIONS,
@ -103,10 +353,35 @@ diff -up hplip-3.25.2/probe.py.raw-strings hplip-3.25.2/probe.py
("Search:", "-s<search re> or --search=<search re>", "option", False),
("", "<search re> must be a valid regular expression (not case sensitive)", "option", False),
("Network discovery method:", "-m<method> or --method=<method>: <method> is 'slp'* or 'mdns'.", "option", False),
diff -up hplip-3.25.2/scan.py.raw-strings hplip-3.25.2/scan.py
diff -up hplip-3.25.2/setup.py.raw-strings hplip-3.25.2/setup.py
--- hplip-3.25.2/setup.py.raw-strings 2025-04-11 10:26:18.496992045 +0200
+++ hplip-3.25.2/setup.py 2025-04-11 10:26:18.522775511 +0200
diff --git a/scan.py b/scan.py
index 0bfa6f5..27b8c2e 100755
--- a/scan.py
+++ b/scan.py
@@ -249,9 +249,9 @@ try:
extra_options=[utils.USAGE_SPACE,
("[OPTIONS] (General)", "", "header", False),
("Scan destinations:", "-s<dest_list> or --dest=<dest_list>", "option", False),
- ("", "where <dest_list> is a comma separated list containing one or more of: 'file'\*, ", "option", False),
+ ("", r"where <dest_list> is a comma separated list containing one or more of: 'file'\*, ", "option", False),
("", "'viewer', 'editor', 'pdf', or 'print'. Use only commas between values, no spaces.", "option", False),
- ("Scan mode:", "-m<mode> or --mode=<mode>. Where <mode> is 'gray'\*, 'color' or 'lineart'.", "option", False),
+ ("Scan mode:", r"-m<mode> or --mode=<mode>. Where <mode> is 'gray'\*, 'color' or 'lineart'.", "option", False),
("Scanning resolution:", "-r<resolution_in_dpi> or --res=<resolution_in_dpi> or --resolution=<resolution_in_dpi>", "option", False),
("", "where 300 is default.", "option", False),
("Image resize:", "--resize=<scale_in_%> (min=1%, max=400%, default=100%)", "option", False),
@@ -268,7 +268,7 @@ try:
utils.USAGE_SPACE,
("[OPTIONS] (Scan area)", "", "header", False),
("Specify the units for area/box measurements:", "-t<units> or --units=<units>", "option", False),
- ("", "where <units> is 'mm'\*, 'cm', 'in', 'px', or 'pt' ('mm' is default).", "option", False),
+ ("", r"where <units> is 'mm'\*, 'cm', 'in', 'px', or 'pt' ('mm' is default).", "option", False),
("Scan area:", "-a<tlx>,<tly>,<brx>,<bry> or --area=<tlx>,<tly>,<brx>,<bry>", "option", False),
("", "Coordinates are relative to the upper left corner of the scan area.", "option", False),
("", "Units for tlx, tly, brx, and bry are specified by -t/--units (default is 'mm').", "option", False),
diff --git a/setup.py b/setup.py
index 98f57fd..1a74d6d 100755
--- a/setup.py
+++ b/setup.py
@@ -79,11 +79,11 @@ USAGE = [ (__doc__, "", "name", True),
utils.USAGE_SPACE,
utils.USAGE_OPTIONS,
@ -121,3 +396,25 @@ diff -up hplip-3.25.2/setup.py.raw-strings hplip-3.25.2/setup.py
("To specify the device URI to install:", "-d<device> or --device=<device> (--qt4 mode only)", "option", False),
("Remove printers or faxes instead of setting-up:", "-r or --rm or --remove", "option", False),
utils.USAGE_LANGUAGE,
diff --git a/ui5/devmgr_ext.py b/ui5/devmgr_ext.py
index 34b4977..6b7a61e 100644
--- a/ui5/devmgr_ext.py
+++ b/ui5/devmgr_ext.py
@@ -12,7 +12,7 @@ class Ui_MainWindow_Derived(object):
self.latest_available_version = latest_available_version
self.Is_autoInstaller_distro = Is_autoInstaller_distro
- if self.latest_available_version is not "":
+ if self.latest_available_version != "":
self.tab_3 = QWidget()
self.tab_3.setObjectName("tab_3")
self.label = QLabel(self.tab_3)
@@ -34,7 +34,7 @@ class Ui_MainWindow_Derived(object):
def retranslateUi(self, MainWindow):
super(Ui_MainWindow_Derived, self).retranslateUi(MainWindow)
- if self.latest_available_version is not "":
+ if self.latest_available_version != "":
self.label.setText(QApplication.translate("MainWindow", "New version of HPLIP-%s is available"%self.latest_available_version, None))
self.Tabs.setTabText(self.Tabs.indexOf(self.tab_3), QApplication.translate("MainWindow", "Upgrade", None))
if self.Is_autoInstaller_distro:

View file

@ -6,7 +6,7 @@
Summary: HP Linux Imaging and Printing Project
Name: hplip
Version: 3.25.8
Version: 3.23.8
Release: 1%{?dist}
# most files (base/*, *, ui*/...) - GPL2+
# prnt/hpijs/ jpeg related files - IJG
@ -76,8 +76,6 @@ Patch30: hplip-hpfax-importerror-print.patch
Patch31: hplip-wifisetup.patch
# pgp.mit.edu keyserver got bad connection, so we need to have pool of keyservers
# to choose (Bz#1641100, launchpad#1799212)
# F42+ update: HP has new key, and currently only on Ubuntu keyserver - so this patch now
# only adjust terminal output, we will see if connection problems reappear
Patch32: hplip-keyserver.patch
# QMessagebox call was copy-pasted from Qt4 version, but Qt5 has different arguments,
# This patch solves most of them
@ -201,62 +199,45 @@ Patch57: hplip-plugin-udevissues.patch
# removed
# - /lib64/libm.so is not symlink but ld script, which cannot be used in dlopen()
Patch58: hplip-no-libhpmud-libm-warnings.patch
Patch59: hplip-plugin-script.patch
# hplip 3.22.6 doesn't use the correct arguments for snprintf
# reported as https://bugs.launchpad.net/hplip/+bug/1982185
Patch59: hplip-snprintf-format.patch
Patch60: hplip-plugin-script.patch
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch60: hplip-pserror-c99.patch
Patch61: hplip-pserror-c99.patch
# C99 compatibility patch by fweimer - several undefined functions in hpaio
# backend are declared in orblite.h
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch61: hplip-scan-hpaio-include.patch
Patch62: hplip-scan-hpaio-include.patch
# C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c
# - _DBG() looks like typo and new header is added for funcs
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch62: hplip-scan-orblite-c99.patch
Patch63: hplip-scan-orblite-c99.patch
# C99 compatibility patch by fweimer:
# PyString_AsStringAndSize is removed in Python3, remove its compilation for now
# in case there is a request for compiling it again, there is a possible solution
# for the function py3 alternative https://opendev.org/openstack/pyeclib/commit/19c8313986
# - disabling removes hp-unload and /usr/share/hplip/pcard as well
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch63: hplip-pcardext-disable.patch
Patch64: hplip-pcardext-disable.patch
# undefined strcasestr() in sclpml.c - build with _GNU_SOURCE
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch64: hplip-sclpml-strcasestr.patch
Patch65: hplip-sclpml-strcasestr.patch
# 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
# https://bugs.launchpad.net/hplip/+bug/2027972
Patch65: hplip-fix-parsing-lpstat.patch
Patch67: hplip-fix-parsing-lpstat.patch
# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
# which causes great delays...
# Remove this once internal openstack handles IPv6 better - test by pinging IPv6 in OpenStack,
# it should not hang.
Patch66: hplip-plugin-curl.patch
Patch68: hplip-plugin-curl.patch
# 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp()
# Upstream https://bugs.launchpad.net/hplip/+bug/2028001
Patch69: hplip-no-readfp.patch
# fix SyntaxWarning from python3.12
# https://bugs.launchpad.net/hplip/+bug/2029480
Patch67: hplip-use-raw-strings.patch
# FTBFS GCC 14
# https://bugs.launchpad.net/hplip/+bug/2048780
Patch68: hplip-hpaio-gcc14.patch
# format is no longer method in locale module
# https://bugs.launchpad.net/hplip/+bug/2045507
Patch69: hplip-locale-format.patch
# function prototype did not specify argument's data types
# https://bugs.launchpad.net/hplip/+bug/2096650
Patch70: hplip-gcc15-stdc23.patch
# status history table shows unformatted QDateTime values
# https://bugs.launchpad.net/hplip/+bug/1956547
Patch71: hplip-format-qdatetime.patch
# Python 3.14 removed urlopener
# https://bugs.launchpad.net/hplip/+bug/2115046
Patch72: hplip-no-urlopener.patch
# hp-scan command failed to run and gives an error (fedora#2395809)
# https://bugs.launchpad.net/hplip/+bug/2124268
Patch73: hplip-scan-size.patch
# 3.25.8 brings new implementation for calling commands in subprocess,
# but again directs I/O into pipes, which does not work for TUI plugin
# installation. Additionally it tracebacks if stdout/stderr is None
# https://bugs.launchpad.net/hplip/+bug/2110101
Patch74: hplip-plugin-stdout.patch
Patch70: hplip-use-raw-strings.patch
%if 0%{?fedora} || 0%{?rhel} <= 8
# mention hplip-gui if you want to have GUI
@ -309,9 +290,6 @@ BuildRequires: sane-backends-devel
# macros: %%{_tmpfilesdir}, %%{_udevrulesdir}
BuildRequires: systemd
%if 0%{?fedora} || 0%{?rhel} <= 8
Suggests: hplip-gui
%endif
# uses avahi-browse for discovering IPP-over-USB printers
Recommends: avahi-tools
# 1733449 - Scanner on an HP AIO printer is not detected unless libsane-hpaio is installed
@ -325,6 +303,8 @@ Requires: cups
# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
# which causes great delays...
Requires: curl
# for bash script acting as hp-plugin (Source7)
Requires: gawk
# set require directly to /usr/bin/gpg, because gnupg2 and gnupg ships it,
# but gnupg will be deprecated in the future
Requires: %{_bindir}/gpg
@ -333,8 +313,6 @@ Requires: python3-dbus
%if 0%{?rhel} <= 8 || 0%{?fedora}
Requires: python3-pillow
%endif
# user+group lp
Requires: setup
# /usr/lib/udev/rules.d
Requires: systemd
# 1788643 - Fedora minimal does not ship tar by default
@ -353,12 +331,14 @@ drivers for HP printers and multi-function peripherals.
%package common
Summary: Files needed by the HPLIP printer and scanner drivers
License: GPLv2+
%description common
Files needed by the HPLIP printer and scanner drivers.
%package libs
Summary: HPLIP libraries
License: GPLv2+ and MIT
Requires: %{name}-common%{?_isa} = %{version}-%{release}
Requires: python3
@ -368,6 +348,7 @@ Libraries needed by HPLIP.
%if 0%{?rhel} <= 8 || 0%{?fedora}
%package gui
Summary: HPLIP graphical tools
License: BSD
BuildRequires: libappstream-glib
# for avahi-browse - looks for devices on local network
@ -388,6 +369,7 @@ HPLIP graphical tools.
%package -n libsane-hpaio
Summary: SANE driver for scanners in HP's multi-function devices
License: GPLv2+
Requires: sane-backends
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
@ -581,48 +563,37 @@ done
%patch -P 57 -p1 -b .hpplugin-udevperms
# 2080235 - Misleading errors about missing shared libraries when scanning
%patch -P 58 -p1 -b .no-libm-libhpmud-warn
%patch -P 59 -p1 -b .plugin-patch
# hplip 3.22.6 doesn't use proper arguments for snprintf
%patch -P 59 -p1 -b .snprintf-format
%patch -P 60 -p1 -b .plugin-patch
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
%patch -P 60 -p1 -b .pserror-int
%patch -P 61 -p1 -b .pserror-int
# C99 compatibility patch by fweimer - several undefined functions in hpaio
# backend are declared in orblite.h
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
%patch -P 61 -p1 -b .hpaio-orblite-defs
%patch -P 62 -p1 -b .hpaio-orblite-defs
# C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c
# - _DBG() looks like typo and new header is added for funcs
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
%patch -P 62 -p1 -b .orblite-undefs
%patch -P 63 -p1 -b .orblite-undefs
# C99 compatibility patch by fweimer - python2 PyString_AsStringAndSize in python3 code
# gives undefined reference - removed for now with dependent hp-unload
%patch -P 63 -p1 -b .pcardext-disable
%patch -P 64 -p1 -b .pcardext-disable
# C99 compatibility patch by fweimer - undefined strcasestr() in sclpml.c - build with _GNU_SOURCE
%patch -P 64 -p1 -b .sclpml-strcasestr
%patch -P 65 -p1 -b .sclpml-strcasestr
# 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
# https://bugs.launchpad.net/hplip/+bug/2027972
%patch -P 65 -p1 -b .lpstat-parse
%patch -P 67 -p1 -b .lpstat-parse
# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
# which causes great delays...
%patch -P 66 -p1 -b .curl-switch
%patch -P 68 -p1 -b .curl-switch
# 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp()
# Upstream https://bugs.launchpad.net/hplip/+bug/2028001
%patch -P 69 -p1 -b .no-readfp
# fix warnings
# upstream https://bugs.launchpad.net/hplip/+bug/2029480
%patch -P 67 -p1 -b .raw-strings
# FTBFS GCC 14
# https://bugs.launchpad.net/hplip/+bug/2048780
%patch -P 68 -p1 -b .hpaio-gcc14
# format is no longer method in locale module
# https://bugs.launchpad.net/hplip/+bug/2045507
%patch -P 69 -p1 -b .locale-format
# https://bugs.launchpad.net/hplip/+bug/2096650
%patch -P 70 -p1 -b .gcc-strc23
# https://bugs.launchpad.net/hplip/+bug/1956547
%patch -P 71 -p1 -b .format-qdatetime
# https://bugs.launchpad.net/hplip/+bug/2115046
%patch -P 72 -p1 -b .no-urlopener
# https://bugs.launchpad.net/hplip/+bug/2124268
%patch -P 73 -p1 -b .scan-size
# https://bugs.launchpad.net/hplip/+bug/2110101
%patch -P 74 -p1 -b .plugin-stdout
%patch -P 70 -p1 -b .raw-strings
# Fedora specific patches now, don't put a generic patches under it
%if 0%{?fedora} || 0%{?rhel} <= 8
@ -994,92 +965,6 @@ find doc/images -type f -exec chmod 644 {} \;
%config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio
%changelog
* Fri Jan 09 2026 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.8-1
- hplip-3.25.8 is available (fedora#2415311)
* Wed Sep 17 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.6-1
- hp-scan command failed to run and gives an error (fedora#2395809)
- use new GPG key from HP - new key was used as fix for CVE-2025-43023
* Tue Aug 12 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.6-1
- hplip-3.25.6 is available (fedora#2386814)
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.25.2-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jun 19 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-7
- Python 3.14 removed URLopener
* Mon Jun 02 2025 Python Maint <python-maint@redhat.com> - 3.25.2-6
- Rebuilt for Python 3.14
* Mon May 26 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-5
- hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501)
* Mon May 12 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-4
- plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert
* Wed May 07 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-3
- hp-plugin failed checksum due usage of different hashes (fedora#2361230)
- output is not seen after installing plugin (fedora#2361230)
* Wed Apr 16 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-2
- remove Recommends on hplip-gui due complaint at (fedora#2360020)
* Fri Apr 11 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.25.2-1
- hplip-3.25.2 is available (fedora#2353147)
* Thu Apr 03 2025 FeRD (Frank Dana) <ferdnyc@gmail.com> - 3.24.5-5
- hp-plugin: Use rpm queryformat to get version (no gawk dependency)
* Thu Apr 03 2025 FeRD (Frank Dana) <ferdnyc@gmail.com> - 3.24.4-5
- Use weak rich dependency for hplip-gui
* Wed Apr 02 2025 FeRD (Frank Dana) <ferdnyc@gmail.com> - 3.24.4-5
- Format QDateTime strings in Status History table, elsewhere
* Wed Apr 02 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.24.4-5
- hp-plugin-download did not follow redirections and was missing '-o' in grep
* Mon Mar 03 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.24.4-4
- enable following links with curl in all use cases (fedora#2349177)
* Tue Feb 11 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.24.4-3
- require setup because of lp group
* Fri Jan 24 2025 Zdenek Dohnal <zdohnal@redhat.com> - 3.24.4-2
- fix FTBFS (fedora#2340616)
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.24.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Tue Jul 23 2024 Zdenek Dohnal <zdohnal@redhat.com> - 3.24.4-1
- 2292623 - hplip-3.24.4 is available
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.12-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 3.23.12-7
- Rebuilt for Python 3.13
* Thu Mar 21 2024 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.12-6
- hp-plugin-download - curl removed --create-dir parameter
* Mon Mar 18 2024 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.12-5
- 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.12-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.12-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.12-2
- add fallback url to hp-plugin-download
* Mon Jan 08 2024 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.12-1
- 2252302 - hplip-3.23.12 is available
* Tue Oct 03 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.8-1
- 2239465 - hplip-3.23.8 is available

View file

@ -1,37 +0,0 @@
/tier1-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier1/internal
/tier1-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier1/public
/tier2-tier3-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier2-tier3/internal
/tier2-tier3-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/tier2-tier3/public
/others-internal:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/others/internal
/others-public:
plan:
import:
url: https://gitlab.com/redhat/centos-stream/tests/hplip.git
name: /plans/others/public

6
plans/public.fmf Normal file
View file

@ -0,0 +1,6 @@
summary: Test plan that runs all tests from hplip tests repo.
discover:
how: fmf
url: https://src.fedoraproject.org/tests/hplip.git
execute:
how: tmt

12
plans/tier1-internal.fmf Normal file
View file

@ -0,0 +1,12 @@
summary: CI plan, picks internal Tier1 tests, runs in beakerlib.
discover:
- name: rhel
how: fmf
filter: 'tier: 1'
url: git://pkgs.devel.redhat.com/tests/hplip
execute:
how: tmt
adjust:
enabled: false
when: distro == centos-stream or distro == fedora
because: They don't have access to internal repos.

View file

@ -1,10 +0,0 @@
---
badfuncs:
allowed:
# printers usually do not live on networks which would require
# IPv6 due having too many hosts on one network, so it is not
# a priority to have IPv6 support.
# It is reported upstream at https://bugzilla.redhat.com/show_bug.cgi?id=2275938
/usr/lib*/libhpmud.so.*:
- gethostbyname
- inet_addr

View file

@ -1 +1 @@
SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059
SHA512 (hplip-3.23.8-repack.tar.gz) = 07df27ee2389f351c917011c939c221e835bbfe30211bfaa69bbb9b0897bb6cc33ab697b25ac4d614a587be60d96d60b681a51c92e4d8ea60043187275004d2e