diff --git a/.gitignore b/.gitignore index 57fc212..00397c1 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,8 @@ 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 diff --git a/gating.yaml b/gating.yaml index de5c323..71d105b 100644 --- a/gating.yaml +++ b/gating.yaml @@ -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/public.functional} + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-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/public.functional} + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional} #gating rhel --- !Policy @@ -21,7 +21,5 @@ product_versions: - rhel-* decision_context: osci_compose_gate rules: - - !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-public.functional} - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional} - - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/public.functional} diff --git a/hp-plugin.in b/hp-plugin.in index c6de68a..5bdbab0 100644 --- a/hp-plugin.in +++ b/hp-plugin.in @@ -1,7 +1,7 @@ #!/usr/bin/bash -# get version from base hplip rpm - it is always in the second column -VER=$(@bindir@/rpm -q hplip | @bindir@/awk -F '-' '{print $2}') +# get version from base hplip rpm +VER=$(@bindir@/rpm -q hplip --queryformat='%{version}') if test "x$VER" = "x" then @@ -9,12 +9,20 @@ 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 ] @@ -22,11 +30,19 @@ then @bindir@/mkdir ~/.hplip || (@bindir@/echo "Cannot create the ~/.hplip dir, exiting" && exit 1) fi -@bindir@/curl --create-dir -O --output-dir ~/.hplip ${PLUGIN_SOURCE} +for link in ${PLUGIN_SOURCE} ${FALLBACK_SOURCE} +do + download ${link} -if [ ! -f ~/.hplip/${PLUGIN_FILE} ] + 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" then - @bindir@/echo "The downloaded file does not exist - error during downloading, exiting..." + @bindir@/echo "The downloaded file does not exist or is not a shell script - error during downloading, exiting..." exit 1 fi diff --git a/hplip-add-ppd-crash.patch b/hplip-add-ppd-crash.patch index 798630a..beb070d 100644 --- a/hplip-add-ppd-crash.patch +++ b/hplip-add-ppd-crash.patch @@ -1,16 +1,3 @@ -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 diff --git a/hplip-covscan.patch b/hplip-covscan.patch index 6c88581..29384dc 100644 --- a/hplip-covscan.patch +++ b/hplip-covscan.patch @@ -1,6 +1,6 @@ -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 +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 @@ -1,5 +1,9 @@ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE @@ -12,10 +12,10 @@ diff -up hplip-3.23.3/common/utils.c.covscan hplip-3.23.3/common/utils.c #include #include #include -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_ +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_ } strncpy(ds->uri, msp->device[dd].uri, sizeof(ds->uri)); @@ -23,9 +23,9 @@ diff -up hplip-3.23.3/io/hpmud/hpmud.c.covscan hplip-3.23.3/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.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 +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 @@ -31,6 +31,7 @@ #endif @@ -34,9 +34,9 @@ diff -up hplip-3.23.3/io/hpmud/jd.c.covscan hplip-3.23.3/io/hpmud/jd.c #include "hpmud.h" #include "hpmudi.h" -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 +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 @@ -117,6 +117,7 @@ static int ReadConfig() if (rcbuf[0] == '[') { @@ -53,9 +53,9 @@ diff -up hplip-3.23.3/io/hpmud/model.c.covscan hplip-3.23.3/io/hpmud/model.c break; /* done */ } } -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 +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 @@ -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.23.3/io/hpmud/musb.c.covscan hplip-3.23.3/io/hpmud/musb.c buffer[len]=0; DBG("read actual device_id successfully fd=%d len=%d\n", fd, len); -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 +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 @@ -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.23.3/io/hpmud/pp.c.covscan hplip-3.23.3/io/hpmud/pp.c buffer[len]=0; DBG("read actual device_id successfully fd=%d len=%d\n", fd, len); -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 +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 @@ -3,7 +3,7 @@ # # (c) 2004-2015 Copyright HP Development Company, LP @@ -90,7 +90,7 @@ diff -up hplip-3.23.3/Makefile.am.covscan hplip-3.23.3/Makefile.am CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\" @@ -310,7 +310,7 @@ dist_pcard_DATA = pcard/__init__.py pcar - pcardextdir = $(pyexecdir) + pcardextdir = $(PYTHONEXECDIR) 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.23.3/Makefile.am.covscan hplip-3.23.3/Makefile.am libhpipp_la_LDFLAGS = -version-info 0:1:0 libhpipp_la_LIBADD = libhpmud.la -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 +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 @@ -519,14 +519,17 @@ int FatFreeSpace(void) int FatDiskAttributes( PHOTO_CARD_ATTRIBUTES * pa ) @@ -139,9 +139,9 @@ diff -up hplip-3.23.3/pcard/fat.c.covscan hplip-3.23.3/pcard/fat.c cwd.StartSector = ConvertClusterToSector(fa.StartCluster); cwd.CurrSector = cwd.StartSector; cwd.StartCluster = fa.StartCluster; -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 +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 @@ -1302,6 +1302,7 @@ DRIVER_ERROR PrintContext::SelectDevice if(0 == strnlen((const char *)pSS->strDevID, DevIDBuffSize)) { @@ -150,9 +150,9 @@ diff -up hplip-3.23.3/prnt/hpijs/context2.cpp.covscan hplip-3.23.3/prnt/hpijs/co } thePrinter = pPFI->CreatePrinter (pSS, familyHandle); if (thePrinter->constructor_error != NO_ERROR) -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 +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 @@ -396,7 +396,10 @@ void SystemServices::AdjustIO(IO_MODE IM IOMode.bDevID =IM.bDevID && IOMode.bDevID; @@ -164,10 +164,10 @@ diff -up hplip-3.23.3/prnt/hpijs/systemservices.cpp.covscan hplip-3.23.3/prnt/hp } APDK_END_NAMESPACE -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) +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) /* 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.23.3/prnt/hpps/hppsfilter.c.covscan hplip-3.23.3/prnt/hpps/hpps hpwrite(buffer, strlen(buffer)); fprintf(stderr, "HP PS filter func = WriteHeader : WRITING PJL HEADER INFO\n"); return; -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 +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 @@ -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.23.3/protocol/hp_ipp.h.covscan hplip-3.23.3/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.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 +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 @@ -26,6 +26,7 @@ # include "http.h" # include "xml.h" @@ -210,9 +210,9 @@ diff -up hplip-3.23.3/scan/sane/bb_ledm.c.covscan hplip-3.23.3/scan/sane/bb_ledm # include -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 +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 @@ -36,7 +36,7 @@ #define _STRINGIZE(x) #x #define STRINGIZE(x) _STRINGIZE(x) @@ -222,9 +222,9 @@ diff -up hplip-3.23.3/scan/sane/common.h.covscan hplip-3.23.3/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.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 +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 @@ -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.23.3/scan/sane/escl.c.covscan hplip-3.23.3/scan/sane/escl.c return; } -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 +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 @@ -36,6 +36,7 @@ #include #include @@ -254,9 +254,9 @@ diff -up hplip-3.23.3/scan/sane/http.c.covscan hplip-3.23.3/scan/sane/http.c #include "hpmud.h" #include "http.h" -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 +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 @@ -50,7 +50,7 @@ int __attribute__ ((visibility ("hidden" if (dbus_error_is_set(&dbus_err)) @@ -284,9 +284,9 @@ diff -up hplip-3.23.3/scan/sane/io.c.covscan hplip-3.23.3/scan/sane/io.c return 0; } -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 +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 @@ -813,7 +813,7 @@ SANE_Status ledm_control_option(SANE_Han if (stat != SANE_STATUS_GOOD) @@ -305,9 +305,9 @@ diff -up hplip-3.23.3/scan/sane/ledm.c.covscan hplip-3.23.3/scan/sane/ledm.c return; } -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 +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 @@ -134,7 +134,7 @@ static int get_ip_data(struct marvell_se if (!ps->ip_handle) @@ -407,9 +407,9 @@ diff -up hplip-3.23.3/scan/sane/marvell.c.covscan hplip-3.23.3/scan/sane/marvell goto bugout; } -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 +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 @@ -30,6 +30,7 @@ #include #include @@ -427,9 +427,9 @@ diff -up hplip-3.23.3/scan/sane/sclpml.c.covscan hplip-3.23.3/scan/sane/sclpml.c return; } -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 +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 @@ -142,7 +142,7 @@ static int get_ip_data(struct soap_sessi if (!ps->ip_handle) @@ -520,9 +520,9 @@ diff -up hplip-3.23.3/scan/sane/soap.c.covscan hplip-3.23.3/scan/sane/soap.c goto bugout; } -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 +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 @@ -136,7 +136,7 @@ static int get_ip_data(struct soap_sessi if (!ps->ip_handle) diff --git a/hplip-fix-Wreturn-type-warning.patch b/hplip-fix-Wreturn-type-warning.patch index e128078..aa40e1a 100644 --- a/hplip-fix-Wreturn-type-warning.patch +++ b/hplip-fix-Wreturn-type-warning.patch @@ -1,14 +1,3 @@ ---- 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_ diff --git a/hplip-format-qdatetime.patch b/hplip-format-qdatetime.patch new file mode 100644 index 0000000..9517e65 --- /dev/null +++ b/hplip-format-qdatetime.patch @@ -0,0 +1,53 @@ +From 839a216f17ce17a5667eecd54de2a70b1383df2c Mon Sep 17 00:00:00 2001 +From: "FeRD (Frank Dana)" +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)" +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 + diff --git a/hplip-gcc15-stdc23.patch b/hplip-gcc15-stdc23.patch new file mode 100644 index 0000000..a18f245 --- /dev/null +++ b/hplip-gcc15-stdc23.patch @@ -0,0 +1,13 @@ +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); diff --git a/hplip-gui-close-trace.patch b/hplip-gui-close-trace.patch new file mode 100644 index 0000000..39d8f01 --- /dev/null +++ b/hplip-gui-close-trace.patch @@ -0,0 +1,24 @@ +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)) diff --git a/hplip-hpaio-gcc14.patch b/hplip-hpaio-gcc14.patch new file mode 100644 index 0000000..f7d195e --- /dev/null +++ b/hplip-hpaio-gcc14.patch @@ -0,0 +1,114 @@ +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; + diff --git a/hplip-keyserver.patch b/hplip-keyserver.patch index 9b457f1..c525503 100644 --- a/hplip-keyserver.patch +++ b/hplip-keyserver.patch @@ -10,47 +10,3 @@ 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) - diff --git a/hplip-locale-format.patch b/hplip-locale-format.patch new file mode 100644 index 0000000..32fba1e --- /dev/null +++ b/hplip-locale-format.patch @@ -0,0 +1,13 @@ +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): diff --git a/hplip-no-readfp.patch b/hplip-no-readfp.patch deleted file mode 100644 index 35108e3..0000000 --- a/hplip-no-readfp.patch +++ /dev/null @@ -1,26 +0,0 @@ -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: diff --git a/hplip-no-urlopener.patch b/hplip-no-urlopener.patch new file mode 100644 index 0000000..903fbbc --- /dev/null +++ b/hplip-no-urlopener.patch @@ -0,0 +1,79 @@ +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) diff --git a/hplip-pcardext-disable.patch b/hplip-pcardext-disable.patch index adcac1d..158379d 100644 --- a/hplip-pcardext-disable.patch +++ b/hplip-pcardext-disable.patch @@ -1,29 +1,13 @@ -The pcardext Python extension cannot be loaded because it has not been -ported to Python 3: - ->>> import pcardext -Traceback (most recent call last): - File "", line 1, in -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: - -Submitted upstream: - -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 +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 pcarddir = $(hplipdir)/pcard dist_pcard_DATA = pcard/__init__.py pcard/photocard.py -# pcardext --pcardextdir = $(pyexecdir) +-pcardextdir = $(PYTHONEXECDIR) +-pcardextdir = $(PYTHONEXECDIR) -pcardext_LTLIBRARIES = pcardext.la -pcardext_la_LDFLAGS = -module -avoid-version -pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h diff --git a/hplip-plugin-curl.patch b/hplip-plugin-curl.patch index 023e528..380ce9b 100644 --- a/hplip-plugin-curl.patch +++ b/hplip-plugin-curl.patch @@ -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 %s" % (curl,self.__plugin_path,src) ++ cmd = "%s --create-dirs -O --output-dir %s --location %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 %s" % (curl,self.__plugin_path,src) ++ cmd = "%s --create-dirs -O --output-dir %s --location %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 %s" % (curl, self.__plugin_path,digsig_url) ++ cmd = "%s --create-dirs -O --output-dir %s --location %s" % (curl, self.__plugin_path,digsig_url) log.debug(cmd) status, output = utils.run(cmd) except IOError as e: diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch new file mode 100644 index 0000000..92f8016 --- /dev/null +++ b/hplip-plugin-stdout.patch @@ -0,0 +1,41 @@ +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)}") diff --git a/hplip-scan-size.patch b/hplip-scan-size.patch new file mode 100644 index 0000000..1ff8cb3 --- /dev/null +++ b/hplip-scan-size.patch @@ -0,0 +1,37 @@ +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'): diff --git a/hplip-snprintf-format.patch b/hplip-snprintf-format.patch deleted file mode 100644 index 21b1530..0000000 --- a/hplip-snprintf-format.patch +++ /dev/null @@ -1,51 +0,0 @@ -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 ) { diff --git a/hplip-strncpy.patch b/hplip-strncpy.patch index eac29b8..cbd262d 100644 --- a/hplip-strncpy.patch +++ b/hplip-strncpy.patch @@ -1,7 +1,7 @@ -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 +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 adj_k_width = 0; black_raster = NULL; color_raster = NULL; @@ -9,7 +9,7 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h } HPCupsFilter::~HPCupsFilter() -@@ -384,9 +385,9 @@ DRIVER_ERROR HPCupsFilter::startPage (cu +@@ -428,15 +429,15 @@ 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,11 +20,18 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h + 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); + } + } } - 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 +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 @@ -605,7 +605,7 @@ int main (int argc, char *argv[], char * } @@ -34,9 +41,9 @@ diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpi #ifdef HAVE_LIBHPIP char *pDev; -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 +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 @@ -282,7 +282,7 @@ int hpijsFaxServer (int argc, char **arg char user_name[32]={0,}; diff --git a/hplip-use-raw-strings.patch b/hplip-use-raw-strings.patch index afef121..77d1b87 100644 --- a/hplip-use-raw-strings.patch +++ b/hplip-use-raw-strings.patch @@ -1,7 +1,8 @@ -diff --git a/base/LedmWifi.py b/base/LedmWifi.py -index f63a050..074d5a2 100644 ---- a/base/LedmWifi.py -+++ b/base/LedmWifi.py +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 @@ -31,7 +31,7 @@ from .g import * from . import device, utils from .sixext import to_bytes_utf8 @@ -11,136 +12,12 @@ index f63a050..074d5a2 100644 HTTP_OK = 200 HTTP_ACCEPTED = 202 HTTP_NOCONTENT = 204 -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 +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 @@ -46,7 +46,7 @@ HPPS = 3 HPOTHER = 4 @@ -159,101 +36,12 @@ index 0818574..8625f53 100755 except AttributeError: desc = '' -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 or --logging=", 'option', False) --USAGE_LOGGING2 = ("", ": none, info\*, error, warn, debug (\*default)", "option", False) -+USAGE_LOGGING2 = ("", r": 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 or --device=", "option", False) - USAGE_PRINTER = ("To specify a CUPS printer:", "-p or --printer=", "option", False) - USAGE_BUS1 = ("Bus to probe (if device not specified):", "-b or --bus=", "option", False) --USAGE_BUS2 = ("", ": cups\*, usb\*, net, bt, fw, par\* (\*defaults) (Note: bt and fw not supported in this release.)", 'option', False) -+USAGE_BUS2 = ("", r": 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= or --lang=. Use --loc=? or --lang=? to see a list of available language codes.", "option", False) - USAGE_LANGUAGE2 = ("Set the language:", "--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 or --search=", "option", False), ("", " must be a valid regular expression (not case sensitive)", "option", False), ("Network discovery method:", "-m or --method=: is 'slp'* or 'mdns'.", "option", False), -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 or --dest=", "option", False), -- ("", "where is a comma separated list containing one or more of: 'file'\*, ", "option", False), -+ ("", r"where 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 or --mode=. Where is 'gray'\*, 'color' or 'lineart'.", "option", False), -+ ("Scan mode:", r"-m or --mode=. Where is 'gray'\*, 'color' or 'lineart'.", "option", False), - ("Scanning resolution:", "-r or --res= or --resolution=", "option", False), - ("", "where 300 is default.", "option", False), - ("Image resize:", "--resize= (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 or --units=", "option", False), -- ("", "where is 'mm'\*, 'cm', 'in', 'px', or 'pt' ('mm' is default).", "option", False), -+ ("", r"where is 'mm'\*, 'cm', 'in', 'px', or 'pt' ('mm' is default).", "option", False), - ("Scan area:", "-a,,, or --area=,,,", "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 +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 @@ -79,11 +79,11 @@ USAGE = [ (__doc__, "", "name", True), utils.USAGE_SPACE, utils.USAGE_OPTIONS, @@ -396,25 +121,3 @@ index 98f57fd..1a74d6d 100755 ("To specify the device URI to install:", "-d or --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: diff --git a/hplip.spec b/hplip.spec index 1164fa0..d6b78cd 100644 --- a/hplip.spec +++ b/hplip.spec @@ -6,7 +6,7 @@ Summary: HP Linux Imaging and Printing Project Name: hplip -Version: 3.23.8 +Version: 3.25.8 Release: 1%{?dist} # most files (base/*, *, ui*/...) - GPL2+ # prnt/hpijs/ jpeg related files - IJG @@ -76,6 +76,8 @@ 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 @@ -199,45 +201,62 @@ 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 -# 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 +Patch59: hplip-plugin-script.patch # C99 compatibility fixes by fweimer - use explicit int # Submitted upstream: -Patch61: hplip-pserror-c99.patch +Patch60: hplip-pserror-c99.patch # C99 compatibility patch by fweimer - several undefined functions in hpaio # backend are declared in orblite.h # Submitted upstream: -Patch62: hplip-scan-hpaio-include.patch +Patch61: 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: -Patch63: hplip-scan-orblite-c99.patch +Patch62: 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: -Patch64: hplip-pcardext-disable.patch +Patch63: hplip-pcardext-disable.patch # undefined strcasestr() in sclpml.c - build with _GNU_SOURCE # Submitted upstream: -Patch65: hplip-sclpml-strcasestr.patch +Patch64: 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 -Patch67: hplip-fix-parsing-lpstat.patch +Patch65: 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. -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 +Patch66: hplip-plugin-curl.patch # fix SyntaxWarning from python3.12 # https://bugs.launchpad.net/hplip/+bug/2029480 -Patch70: hplip-use-raw-strings.patch +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 %if 0%{?fedora} || 0%{?rhel} <= 8 # mention hplip-gui if you want to have GUI @@ -290,6 +309,9 @@ 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 @@ -303,8 +325,6 @@ 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 @@ -313,6 +333,8 @@ 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 @@ -331,14 +353,12 @@ 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 @@ -348,7 +368,6 @@ 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 @@ -369,7 +388,6 @@ 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} @@ -563,37 +581,48 @@ 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 -# 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 +%patch -P 59 -p1 -b .plugin-patch # C99 compatibility fixes by fweimer - use explicit int # Submitted upstream: -%patch -P 61 -p1 -b .pserror-int +%patch -P 60 -p1 -b .pserror-int # C99 compatibility patch by fweimer - several undefined functions in hpaio # backend are declared in orblite.h # Submitted upstream: -%patch -P 62 -p1 -b .hpaio-orblite-defs +%patch -P 61 -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: -%patch -P 63 -p1 -b .orblite-undefs +%patch -P 62 -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 64 -p1 -b .pcardext-disable +%patch -P 63 -p1 -b .pcardext-disable # C99 compatibility patch by fweimer - undefined strcasestr() in sclpml.c - build with _GNU_SOURCE -%patch -P 65 -p1 -b .sclpml-strcasestr +%patch -P 64 -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 67 -p1 -b .lpstat-parse +%patch -P 65 -p1 -b .lpstat-parse # switch to curl by downstream patch from wget to workaround openstack dropping IPv6 # which causes great delays... -%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 +%patch -P 66 -p1 -b .curl-switch # fix warnings # upstream https://bugs.launchpad.net/hplip/+bug/2029480 -%patch -P 70 -p1 -b .raw-strings +%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 # Fedora specific patches now, don't put a generic patches under it %if 0%{?fedora} || 0%{?rhel} <= 8 @@ -965,6 +994,92 @@ find doc/images -type f -exec chmod 644 {} \; %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jan 09 2026 Zdenek Dohnal - 3.25.8-1 +- hplip-3.25.8 is available (fedora#2415311) + +* Wed Sep 17 2025 Zdenek Dohnal - 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 - 3.25.6-1 +- hplip-3.25.6 is available (fedora#2386814) + +* Thu Jul 24 2025 Fedora Release Engineering - 3.25.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jun 19 2025 Zdenek Dohnal - 3.25.2-7 +- Python 3.14 removed URLopener + +* Mon Jun 02 2025 Python Maint - 3.25.2-6 +- Rebuilt for Python 3.14 + +* Mon May 26 2025 Zdenek Dohnal - 3.25.2-5 +- hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) + +* Mon May 12 2025 Zdenek Dohnal - 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 - 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 - 3.25.2-2 +- remove Recommends on hplip-gui due complaint at (fedora#2360020) + +* Fri Apr 11 2025 Zdenek Dohnal - 3.25.2-1 +- hplip-3.25.2 is available (fedora#2353147) + +* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.5-5 +- hp-plugin: Use rpm queryformat to get version (no gawk dependency) + +* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.4-5 +- Use weak rich dependency for hplip-gui + +* Wed Apr 02 2025 FeRD (Frank Dana) - 3.24.4-5 +- Format QDateTime strings in Status History table, elsewhere + +* Wed Apr 02 2025 Zdenek Dohnal - 3.24.4-5 +- hp-plugin-download did not follow redirections and was missing '-o' in grep + +* Mon Mar 03 2025 Zdenek Dohnal - 3.24.4-4 +- enable following links with curl in all use cases (fedora#2349177) + +* Tue Feb 11 2025 Zdenek Dohnal - 3.24.4-3 +- require setup because of lp group + +* Fri Jan 24 2025 Zdenek Dohnal - 3.24.4-2 +- fix FTBFS (fedora#2340616) + +* Fri Jan 17 2025 Fedora Release Engineering - 3.24.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Tue Jul 23 2024 Zdenek Dohnal - 3.24.4-1 +- 2292623 - hplip-3.24.4 is available + +* Thu Jul 18 2024 Fedora Release Engineering - 3.23.12-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 3.23.12-7 +- Rebuilt for Python 3.13 + +* Thu Mar 21 2024 Zdenek Dohnal - 3.23.12-6 +- hp-plugin-download - curl removed --create-dir parameter + +* Mon Mar 18 2024 Zdenek Dohnal - 3.23.12-5 +- 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback + +* Wed Jan 24 2024 Fedora Release Engineering - 3.23.12-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 3.23.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Zdenek Dohnal - 3.23.12-2 +- add fallback url to hp-plugin-download + +* Mon Jan 08 2024 Zdenek Dohnal - 3.23.12-1 +- 2252302 - hplip-3.23.12 is available + * Tue Oct 03 2023 Zdenek Dohnal - 3.23.8-1 - 2239465 - hplip-3.23.8 is available diff --git a/plans.fmf b/plans.fmf new file mode 100644 index 0000000..f4c2755 --- /dev/null +++ b/plans.fmf @@ -0,0 +1,37 @@ +/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 + diff --git a/plans/public.fmf b/plans/public.fmf deleted file mode 100644 index 8dee615..0000000 --- a/plans/public.fmf +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/plans/tier1-internal.fmf b/plans/tier1-internal.fmf deleted file mode 100644 index 4f7e4b3..0000000 --- a/plans/tier1-internal.fmf +++ /dev/null @@ -1,12 +0,0 @@ -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. diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..3092346 --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,10 @@ +--- +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 diff --git a/sources b/sources index 7038e4a..601b241 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (hplip-3.23.8-repack.tar.gz) = 07df27ee2389f351c917011c939c221e835bbfe30211bfaa69bbb9b0897bb6cc33ab697b25ac4d614a587be60d96d60b681a51c92e4d8ea60043187275004d2e +SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059