Compare commits

...
Sign in to create a new pull request.

85 commits

Author SHA1 Message Date
Zdenek Dohnal
075cac0afb hplip-3.25.8 is available (fedora#2415311) 2026-01-09 13:04:20 +01:00
Zdenek Dohnal
be70bd6792 Use new HP GPG key for plugin validation
HP now uses new key pair for signing plugin tarball as fix for
CVE-2025-43023, but hplip code was still downloading the old one, thus
validation always failed.
2025-09-17 14:08:07 +02:00
Zdenek Dohnal
334237ac68 hp-scan command failed to run and gives an error (fedora#2395809) 2025-09-17 14:01:58 +02:00
Zdenek Dohnal
01d1e50f44 hplip-3.25.6 is available (fedora#2386814) 2025-08-12 13:31:19 +02:00
Fedora Release Engineering
5ad054fcdb Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 17:04:43 +00:00
Zdenek Dohnal
73678936ce Remove URLopener
Python 3.14 removed URLopener, which is used in hplip as parent class
for LocalOpener* classes, and various hplip scripts (hp-setup, hp-plugin)
started to traceback after removal.

Remove URLopener for now, since at least sanity testing passes without
it.
2025-06-20 11:24:48 +02:00
Zdenek Dohnal
a995e312cb Switch tests to Centos Stream 2025-06-03 08:11:29 +02:00
Python Maint
b1ef7ae35e Rebuilt for Python 3.14 2025-06-02 22:22:15 +02:00
Zdenek Dohnal
8541ecd6f8 hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) 2025-05-26 15:25:23 +02:00
Zdenek Dohnal
61a4f33d3a plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert 2025-05-12 10:03:00 +02:00
Zdenek Dohnal
f66385472f hp-plugin failed checksum due usage of different hashes (fedora#2361230)
output is not seen after installing plugin (fedora#2361230)
2025-05-07 10:44:05 +02:00
Zdenek Dohnal
ae17763066 remove Recommends on hplip-gui due complaint at (fedora#2360020) 2025-04-16 17:14:15 +02:00
Zdenek Dohnal
4cfd5e5ec3 hplip-3.25.2 is available (fedora#2353147) 2025-04-11 12:04:43 +02:00
FeRD (Frank Dana)
f08eed6ffd hp-plugin: Use rpm queryformat to get version
Eliminates dependency on gawk.
2025-04-03 14:26:15 -04:00
FeRD (Frank Dana)
8104c07571 Use weak rich dependency for hplip-gui 2025-04-03 14:47:14 +02:00
FeRD (Frank Dana)
ea1621b02f Format QDateTime strings in Status History table, elsewhere 2025-04-02 17:26:07 +02:00
Zdenek Dohnal
c5b4c3d5cb hp-plugin-download did not follow redirections and was missing '-o' in grep 2025-04-02 09:35:29 +02:00
Zdenek Dohnal
b549b17216 enable following links with curl in all use cases (fedora#2349177) 2025-03-03 14:32:38 +01:00
Brian J. Murrell
4a5cbec2d3 curl needs --location to follow redirects
In the patch, only one of the curl commands is using the --location argument
to direct curl to follow 301 redirects.  All curl invocations need to use that
argument.

Signed-off-by: Brian J. Murrell <brian@interlinx.bc.ca>
2025-03-01 17:20:18 +00:00
Zdenek Dohnal
690f2e34e8 Require setup for lp group 2025-02-11 11:35:11 +01:00
Zdenek Dohnal
b6d5d44957 fix FTBFS (fedora#2340616) 2025-01-24 10:34:06 +01:00
Fedora Release Engineering
25bd7772e9 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 06:01:15 +00:00
Zdenek Dohnal
ee555b54af Update plans 2024-07-26 08:50:57 +02:00
Zdenek Dohnal
489909d19a rpminspect.yaml: include /usr/lib/ too 2024-07-26 08:46:15 +02:00
Zdenek Dohnal
46b9593576 Add rpminspect.yaml to waive badfuncs of rpminspect 2024-07-26 06:51:00 +02:00
Zdenek Dohnal
c78ccf59f8 2292623 - hplip-3.24.4 is available 2024-07-23 16:32:38 +02:00
Fedora Release Engineering
dbdc2cce2a Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-18 09:21:06 +00:00
Python Maint
48d1741f8d Rebuilt for Python 3.13 2024-06-07 10:31:56 +02:00
Zdenek Dohnal
19b7cb0614 plans: fix url 2024-05-23 13:40:39 +02:00
Zdenek Dohnal
3f33fc6240 Remove additional License tags, merged into one 2024-05-07 17:20:13 +02:00
Zdenek Dohnal
0b780c93e6 Update gating.yaml 2024-04-15 15:09:27 +02:00
Zdenek Dohnal
d5743e6d63 hp-plugin-download - curl removed --create-dir parameter 2024-03-21 14:13:55 +01:00
Zdenek Dohnal
a13fbe55d3 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback 2024-03-18 16:07:00 +01:00
Fedora Release Engineering
dabcff0237 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-24 21:45:51 +00:00
Fedora Release Engineering
639b6e999f Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-20 22:11:36 +00:00
Zdenek Dohnal
187b064062 add fallback url to hp-plugin-download 2024-01-19 09:23:18 +01:00
Zdenek Dohnal
d726b77698 Fix build with GCC 14 2024-01-09 15:35:15 +01:00
Zdenek Dohnal
a6c2c2b70b 2252302 - hplip-3.23.12 is available 2024-01-09 11:20:27 +01:00
Zdenek Dohnal
b7a8b0b5a8 Merge #12 Rebase to 3.23.8 2023-10-09 05:48:48 +00:00
Mikhail Gavrilov
f488895f79 fix --max-time and add follow to redirections 2023-10-09 03:27:14 +05:00
Zdenek Dohnal
b77080962d Rebase to 3.23.8 2023-10-04 16:43:50 +02:00
Zdenek Dohnal
6d550c7123 SPDX finished review of one license - take it as BSD-2-Clause 2023-10-03 16:31:24 +02:00
Zdenek Dohnal
249ea11cfb SPDX finished review of one license - take it as BSD-2-Clause 2023-09-11 13:15:54 +02:00
Zdenek Dohnal
66bf018624 hp-check: use pkgconf when checking for cups version 2023-08-24 16:34:43 +02:00
Zdenek Dohnal
606f617bde hp-plugin.in: Add brackets to prevent early exit 2023-08-03 16:56:06 +02:00
Zdenek Dohnal
31a7a6c1ee Fallback to proprietary plugin for Hbpl1 printers
Since files for Hbpl1 printers were removed until the licensing is
cleared up, try to fall back to proprietary plugin.
2023-08-03 14:47:42 +02:00
Zdenek Dohnal
4fa25e2888 Add license upstream tracker 2023-07-28 14:14:20 +02:00
Zdenek Dohnal
ac09a5bddc SPDX migration 2023-07-28 14:12:45 +02:00
Zdenek Dohnal
e174e9103e Update hplip-covscan.patch, because genPCLm.cpp was removed 2023-07-28 09:30:06 +02:00
Zdenek Dohnal
76d7fdfefc remove redundant files 2023-07-27 19:25:15 +02:00
Zdenek Dohnal
f9aafff426 Fix more warnings 2023-07-27 17:12:37 +02:00
Zdenek Dohnal
a15ae7afb4 Fix syntax warnings 2023-07-21 12:57:24 +02:00
Zdenek Dohnal
f22496015e Use raw strings to eliminate syntax warnings 2023-07-21 12:54:51 +02:00
Zdenek Dohnal
aef1ccce5b Fix tier1-internal 2023-07-21 11:34:46 +02:00
Zdenek Dohnal
c775adaac1 Fix conditional 2023-07-21 11:17:20 +02:00
Zdenek Dohnal
ec4e2f53cc Enable Fedora CI and gating 2023-07-21 10:47:20 +02:00
Fedora Release Engineering
a3f2418e3a Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-20 06:25:09 +00:00
Adam Williamson
65ca3e41cf Require curl, not curl-minimal
Requiring curl-minimal is not safe. The full curl package does
not provide curl-minimal, and the two conflict. So if you have
full curl installed, you cannot update, because installing
curl-minimal to satisfy hplip's requirement would require the
removal of full curl.

curl-minimal provides curl, so for a quick fix, just changing
this to "Requires: curl", which is satisfied by either. As a
refinement we might be able to add something like
"Suggests: curl-minimal" to 'cue' the use of curl-minimal rather
than curl if neither is currently installed, but I just wanted
to make the minimum change necessary to stop breaking openQA
tests for now.
2023-07-18 11:42:36 -07:00
Zdenek Dohnal
9a35bb2322 Add missing curl patch 2023-07-18 16:54:50 +02:00
Zdenek Dohnal
83a6c95d49 hplip.spec: recommend python3-gobject in hplip 2023-07-18 10:26:16 +02:00
Zdenek Dohnal
eb5e881525 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp() 2023-07-17 18:43:31 +02:00
Zdenek Dohnal
0426012736 switch to curl when downloading plugin 2023-07-17 18:28:12 +02:00
Zdenek Dohnal
f616afe827 pstotiff: don't use SAFER with WRITESYSTEMDICT per upstream warning 2023-07-17 13:19:28 +02:00
Zdenek Dohnal
031349c9fd 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed 2023-07-17 13:16:47 +02:00
Zdenek Dohnal
363dc1639d Remove unused files 2023-06-28 15:30:01 +02:00
Python Maint
850284dda4 Rebuilt for Python 3.12 2023-06-13 22:00:33 +02:00
Zdenek Dohnal
ac182d7612 2184067 - hplip-3.23.5 is available 2023-06-06 16:15:52 +02:00
Fedora Release Engineering
2cf2a6900a Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 12:12:56 +00:00
Zdenek Dohnal
a3d30bea25 2148210 - hplip: pcardext Python extension broken
stop shipping hp-unload, since it depends on pcardext
2022-12-01 11:19:14 +01:00
Florian Weimer
bbb19dff5e C99 compatibility fixes
Stop building the pcardext Python extension because it unusable
(#2148210).

Related to:

  <https://fedoraproject.org/wiki/Changes/PortingToModernC>
  <https://fedoraproject.org/wiki/Toolchain/PortingToModernC>
2022-11-24 17:46:17 +01:00
Zdenek Dohnal
a960ac4214 2139309 - hplip-3.22.10 is available 2022-11-24 12:04:27 +01:00
Zdenek Dohnal
ca1713968e distutils will be removed in Python3.12, use setuptools now 2022-10-19 14:05:07 +02:00
Zdenek Dohnal
652db6693c 2129849 - hp-plugin unable to load plugin.conf - add a new backup download script 2022-10-13 15:07:30 +02:00
Zdenek Dohnal
09cd5eff22 2129849 - hp-plugin unable to load plugin.conf - add a new backup download script 2022-10-13 15:06:24 +02:00
Zdenek Dohnal
6cb741bb45 2129849 - hp-plugin unable to load plugin.conf 2022-10-13 14:43:35 +02:00
Fedora Release Engineering
cc60476218 Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-21 13:44:10 +00:00
Zdenek Dohnal
cfce1c8fa6 recommend libsane-hpaio - duplicated scanners are better than no scanner
2101790 - hplip-3.22.6 is available
2022-07-19 16:20:46 +02:00
Zdenek Dohnal
3c7687254d hplip-repack.sh: Merge hplip-repack and hplip-rebase 2022-07-18 12:10:41 +02:00
Zdenek Dohnal
c7dbb064bd recommend libsane-hpaio - duplicated scanners are better than no scanner 2022-07-18 11:57:36 +02:00
Python Maint
e4d8f7e061 Rebuilt for Python 3.11 2022-06-13 17:35:17 +02:00
Zdenek Dohnal
297f625d95 2080235 - Misleading errors about missing shared libraries when scanning 2022-05-17 12:53:06 +02:00
Zdenek Dohnal
eabb56cabe Fix prep phase 2022-05-11 13:38:09 +02:00
Zdenek Dohnal
129beeedb9 2079740 - hplip-3.22.4 is available 2022-05-11 13:32:21 +02:00
Zdenek Dohnal
0933ecaffa 2079740 - hplip-3.22.4 is available 2022-05-11 13:31:08 +02:00
Zdenek Dohnal
121a2286ef make libsane-hpaio only suggested to prevent possible duplicated scanner devices
ipp-usb is pulled in automatically now, so newer devices can be supported by two backends,
sane-airscan and libsane-hpaio, which can be confusing. So make libsane-hpaio only suggested
to prevent that.
2022-03-28 20:09:25 +02:00
52 changed files with 1734 additions and 898 deletions

1
.fmf/version Normal file
View file

@ -0,0 +1 @@
1

11
.gitignore vendored
View file

@ -105,3 +105,14 @@ hplip-3.10.6.tar.gz
/hplip-3.21.2-repack.tar.gz
/hplip-3.21.12-repack.tar.gz
/hplip-3.22.2-repack.tar.gz
/hplip-3.22.4-repack.tar.gz
/hplip-3.22.6-repack.tar.gz
/hplip-3.22.10-repack.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

@ -1,45 +1,108 @@
From 95a73bbc9bd65602a0f9411469ab511bc80a01d0 Mon Sep 17 00:00:00 2001
From: Till Kamppeter <till.kamppeter@gmail.com>
Date: Wed, 3 Oct 2018 15:13:00 +0200
Subject: Call QMessageBox constructors of PyQT5 with the correct parameters
The whole Python source code of HPLIP contains 40 incorrect calls of
the QMessageBox constructurs, mostly the list of buttons was given as
separate arguments instead of a bitwise OR of each button's
representation value. If the flow of the code hits one of these
calls (usually when some error or warnings message should be
displayed or an "Are you sure?" question asked) the GUI app crashes.
See https://pythonspot.com/pyqt5-messagebox/ for QMessageBox
documentation.
This patch corrects all these calls.
Bug-Debian: https://bugs.debian.org/912768
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1745383
---
ui/devmgr4.py | 16 ++++++++--------
ui/faxaddrbookform.py | 6 +++---
ui/faxsendjobform.py | 6 +++---
ui/firmwaredialog.py | 2 +-
ui/makecopiesform.py | 4 ++--
ui/nodevicesform.py | 2 +-
ui/pluginform2.py | 4 ++--
ui/printerform.py | 2 +-
ui/settingsdialog.py | 4 ++--
ui/setupform.py | 10 +++++-----
ui/unloadform.py | 2 +-
ui/upgradeform.py | 4 ++--
ui5/devmgr5.py | 6 ++----
ui5/fabwindow.py | 2 +-
ui5/nodevicesdialog.py | 3 +--
ui5/plugindialog.py | 2 +-
ui5/queuesconf.py | 2 +-
ui5/setupdialog.py | 6 +++---
18 files changed, 40 insertions(+), 43 deletions(-)
diff --git a/ui/devmgr4.py b/ui/devmgr4.py
index cc2552f91..a868ccac0 100644
--- a/ui/devmgr4.py
+++ b/ui/devmgr4.py
diff -up hplip-3.23.3/ui5/devmgr5.py.qmsgbox-typos-fix hplip-3.23.3/ui5/devmgr5.py
--- hplip-3.23.3/ui5/devmgr5.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/devmgr5.py 2023-05-29 13:48:48.429731297 +0200
@@ -144,8 +144,7 @@ class PluginInstall(QObject):
install_plugin = QMessageBox.warning(self.parent,
self.parent.windowTitle(),
self.__tr("<b>The HPLIP plugin is already installed.</b><p>Do you want to continue and re-install it?"),
- QMessageBox.Yes,
- QMessageBox.No,
+ QMessageBox.Yes | QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes
if install_plugin:
@@ -154,8 +153,7 @@ class PluginInstall(QObject):
QMessageBox.critical(self.parent,
self.parent.windowTitle(),
self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>"),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff -up hplip-3.23.3/ui5/fabwindow.py.qmsgbox-typos-fix hplip-3.23.3/ui5/fabwindow.py
--- hplip-3.23.3/ui5/fabwindow.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/fabwindow.py 2023-05-29 13:48:48.429731297 +0200
@@ -344,7 +344,7 @@ class FABWindow(QMainWindow, Ui_MainWin
new_name = to_unicode(self.NameLineEdit.text())
if new_name != self.name:
if QMessageBox.question(self, self.__tr("Rename?"), "Rename '%s' to '%s'?"%(self.name,new_name), \
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
self.db.rename(self.name, new_name)
log.debug("Rename %s to %s" % (self.name, new_name))
diff -up hplip-3.23.3/ui5/nodevicesdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/nodevicesdialog.py
--- hplip-3.23.3/ui5/nodevicesdialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/nodevicesdialog.py 2023-05-29 13:48:48.429731297 +0200
@@ -64,8 +64,7 @@ class NoDevicesDialog(QDialog, Ui_NoDevi
QMessageBox.critical(self,
self.windowTitle(),
self.__tr("<b>An error occurred.</b><p>Please re-start the Device Manager and try again."),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff -up hplip-3.23.3/ui5/plugindialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/plugindialog.py
--- hplip-3.23.3/ui5/plugindialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/plugindialog.py 2023-05-29 13:48:48.429731297 +0200
@@ -252,7 +252,7 @@ class PluginDialog(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str),
- QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
self.close()
diff -up hplip-3.23.3/ui5/queuesconf.py.qmsgbox-typos-fix hplip-3.23.3/ui5/queuesconf.py
--- hplip-3.23.3/ui5/queuesconf.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui5/queuesconf.py 2023-05-29 13:48:48.430731291 +0200
@@ -245,7 +245,7 @@ class QueuesDiagnose(QDialog, Ui_Dialog)
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate this tool prior to installation.</p>Do you still want to run Smart Install disabler?" %error_str),
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
# Disabling without verification.
sts, out = utils.run("sh %s"%smart_install_run)
diff -up hplip-3.23.3/ui5/setupdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui5/setupdialog.py
--- hplip-3.23.3/ui5/setupdialog.py.qmsgbox-typos-fix 2023-05-29 13:48:48.430731291 +0200
+++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 13:54:03.236851925 +0200
@@ -886,7 +886,7 @@ class SetupDialog(QDialog, Ui_Dialog):
self.windowTitle(),
warn_text,
QMessageBox.Yes |
- QMessageBox.No |
+ QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes):
i = 2
while True:
@@ -1171,7 +1171,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
@@ -1223,7 +1223,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
diff -up hplip-3.23.3/ui/devmgr4.py.qmsgbox-typos-fix hplip-3.23.3/ui/devmgr4.py
--- hplip-3.23.3/ui/devmgr4.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/devmgr4.py 2023-05-29 13:48:48.424731328 +0200
@@ -1422,7 +1422,7 @@ class DevMgr4(DevMgr4_base):
QMessageBox.critical(self,
self.caption(),
@ -112,11 +175,10 @@ index cc2552f91..a868ccac0 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/faxaddrbookform.py b/ui/faxaddrbookform.py
index 109462207..b23364410 100644
--- a/ui/faxaddrbookform.py
+++ b/ui/faxaddrbookform.py
@@ -228,7 +228,7 @@ class FaxAddrBookGroupsForm(FaxAddrBookGroupsForm_base):
diff -up hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix hplip-3.23.3/ui/faxaddrbookform.py
--- hplip-3.23.3/ui/faxaddrbookform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/faxaddrbookform.py 2023-05-29 13:48:48.424731328 +0200
@@ -228,7 +228,7 @@ class FaxAddrBookGroupsForm(FaxAddrBookG
x = QMessageBox.critical(self,
self.caption(),
self.__tr("<b>Annoying Confirmation: Are you sure you want to delete this group?</b>"),
@ -125,7 +187,7 @@ index 109462207..b23364410 100644
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton)
if x == QMessageBox.Yes:
@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
@@ -421,7 +421,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
if QMessageBox.critical(self,
self.caption(),
self.__tr("<b>Annoying Confirmation: Are you sure you want to delete this address book entry?</b>"),
@ -134,7 +196,7 @@ index 109462207..b23364410 100644
QMessageBox.No | QMessageBox.Default,
QMessageBox.NoButton) == QMessageBox.Yes:
db.delete(self.current.entry['name'])
@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_base):
@@ -451,7 +451,7 @@ class FaxAddrBookForm(FaxAddrBookForm_ba
QMessageBox.critical(self,
self.caption(),
QString(error_text),
@ -143,10 +205,9 @@ index 109462207..b23364410 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/faxsendjobform.py b/ui/faxsendjobform.py
index 106215c5e..69f424c42 100644
--- a/ui/faxsendjobform.py
+++ b/ui/faxsendjobform.py
diff -up hplip-3.23.3/ui/faxsendjobform.py.qmsgbox-typos-fix hplip-3.23.3/ui/faxsendjobform.py
--- hplip-3.23.3/ui/faxsendjobform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/faxsendjobform.py 2023-05-29 13:48:48.424731328 +0200
@@ -210,7 +210,7 @@ class FaxSendJobForm(QMainWindow):
QMessageBox.information(self,
self.caption(),
@ -174,11 +235,10 @@ index 106215c5e..69f424c42 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/firmwaredialog.py b/ui/firmwaredialog.py
index 16b313374..0bcee1164 100644
--- a/ui/firmwaredialog.py
+++ b/ui/firmwaredialog.py
@@ -109,7 +109,7 @@ class FirmwareDialog(QDialog, FirmwareDialog_Base):
diff -up hplip-3.23.3/ui/firmwaredialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/firmwaredialog.py
--- hplip-3.23.3/ui/firmwaredialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/firmwaredialog.py 2023-05-29 13:48:48.424731328 +0200
@@ -109,7 +109,7 @@ class FirmwareDialog(QDialog, FirmwareDi
QMessageBox.critical(self,
self.caption(),
error_text,
@ -187,10 +247,9 @@ index 16b313374..0bcee1164 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/makecopiesform.py b/ui/makecopiesform.py
index 27f144b36..0fbb573e3 100644
--- a/ui/makecopiesform.py
+++ b/ui/makecopiesform.py
diff -up hplip-3.23.3/ui/makecopiesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/makecopiesform.py
--- hplip-3.23.3/ui/makecopiesform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/makecopiesform.py 2023-05-29 13:48:48.424731328 +0200
@@ -156,7 +156,7 @@ class MakeCopiesForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -209,10 +268,9 @@ index 27f144b36..0fbb573e3 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/nodevicesform.py b/ui/nodevicesform.py
index 01f6ae53b..57a696375 100644
--- a/ui/nodevicesform.py
+++ b/ui/nodevicesform.py
diff -up hplip-3.23.3/ui/nodevicesform.py.qmsgbox-typos-fix hplip-3.23.3/ui/nodevicesform.py
--- hplip-3.23.3/ui/nodevicesform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/nodevicesform.py 2023-05-29 13:48:48.424731328 +0200
@@ -67,7 +67,7 @@ class NoDevicesForm(NoDevicesForm_base):
QMessageBox.critical(self,
self.caption(),
@ -222,10 +280,9 @@ index 01f6ae53b..57a696375 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/pluginform2.py b/ui/pluginform2.py
index 64e64aa77..76cb0238b 100644
--- a/ui/pluginform2.py
+++ b/ui/pluginform2.py
diff -up hplip-3.23.3/ui/pluginform2.py.qmsgbox-typos-fix hplip-3.23.3/ui/pluginform2.py
--- hplip-3.23.3/ui/pluginform2.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/pluginform2.py 2023-05-29 13:48:48.424731328 +0200
@@ -173,7 +173,7 @@ class PluginForm2(PluginForm2_base):
QMessageBox.critical(self,
self.caption(),
@ -244,10 +301,9 @@ index 64e64aa77..76cb0238b 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/printerform.py b/ui/printerform.py
index 0c6c4f39e..7c10ab07b 100644
--- a/ui/printerform.py
+++ b/ui/printerform.py
diff -up hplip-3.23.3/ui/printerform.py.qmsgbox-typos-fix hplip-3.23.3/ui/printerform.py
--- hplip-3.23.3/ui/printerform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/printerform.py 2023-05-29 13:48:48.425731321 +0200
@@ -154,7 +154,7 @@ class PrinterForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -257,11 +313,10 @@ index 0c6c4f39e..7c10ab07b 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/settingsdialog.py b/ui/settingsdialog.py
index 92da22546..24f02fd84 100644
--- a/ui/settingsdialog.py
+++ b/ui/settingsdialog.py
@@ -146,7 +146,7 @@ class SettingsDialog(SettingsDialog_base):
diff -up hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix hplip-3.23.3/ui/settingsdialog.py
--- hplip-3.23.3/ui/settingsdialog.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/settingsdialog.py 2023-05-29 13:48:48.425731321 +0200
@@ -146,7 +146,7 @@ class SettingsDialog(SettingsDialog_base
## QMessageBox.warning(self,
## self.caption(),
## self.__tr("<b>One or more email addresses are missing.</b><p>Please enter this information and try again."),
@ -270,7 +325,7 @@ index 92da22546..24f02fd84 100644
## QMessageBox.NoButton,
## QMessageBox.NoButton)
## return
@@ -163,7 +163,7 @@ class SettingsDialog(SettingsDialog_base):
@@ -163,7 +163,7 @@ class SettingsDialog(SettingsDialog_base
## QMessageBox.information(self,
## self.caption(),
## self.__tr("<p><b>Please check your email for a test message.</b><p>If the message doesn't arrive, please check your settings and try again."),
@ -279,10 +334,9 @@ index 92da22546..24f02fd84 100644
## QMessageBox.NoButton,
## QMessageBox.NoButton)
diff --git a/ui/setupform.py b/ui/setupform.py
index 307917b02..78863fdd8 100644
--- a/ui/setupform.py
+++ b/ui/setupform.py
diff -up hplip-3.23.3/ui/setupform.py.qmsgbox-typos-fix hplip-3.23.3/ui/setupform.py
--- hplip-3.23.3/ui/setupform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/setupform.py 2023-05-29 13:48:48.425731321 +0200
@@ -602,7 +602,7 @@ class SetupForm(SetupForm_base):
if ( QMessageBox.warning(self,
self.caption(),
@ -328,10 +382,9 @@ index 307917b02..78863fdd8 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/unloadform.py b/ui/unloadform.py
index 8397a689c..ae363e01e 100644
--- a/ui/unloadform.py
+++ b/ui/unloadform.py
diff -up hplip-3.23.3/ui/unloadform.py.qmsgbox-typos-fix hplip-3.23.3/ui/unloadform.py
--- hplip-3.23.3/ui/unloadform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/unloadform.py 2023-05-29 13:48:48.425731321 +0200
@@ -135,7 +135,7 @@ class UnloadForm(QMainWindow):
QMessageBox.critical(self,
self.caption(),
@ -341,10 +394,9 @@ index 8397a689c..ae363e01e 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui/upgradeform.py b/ui/upgradeform.py
index 6b9acf5cc..d0b418419 100644
--- a/ui/upgradeform.py
+++ b/ui/upgradeform.py
diff -up hplip-3.23.3/ui/upgradeform.py.qmsgbox-typos-fix hplip-3.23.3/ui/upgradeform.py
--- hplip-3.23.3/ui/upgradeform.py.qmsgbox-typos-fix 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/ui/upgradeform.py 2023-05-29 13:48:48.425731321 +0200
@@ -118,7 +118,7 @@ class UpgradeForm(UpgradeForm_base):
QMessageBox.critical(self,
self.caption(),
@ -363,111 +415,3 @@ index 6b9acf5cc..d0b418419 100644
QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index 495883f72..0ca016820 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -139,8 +139,7 @@ class PluginInstall(QObject):
install_plugin = QMessageBox.warning(self.parent,
self.parent.windowTitle(),
self.__tr("<b>The HPLIP plugin is already installed.</b><p>Do you want to continue and re-install it?"),
- QMessageBox.Yes,
- QMessageBox.No,
+ QMessageBox.Yes | QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes
if install_plugin:
@@ -149,8 +148,7 @@ class PluginInstall(QObject):
QMessageBox.critical(self.parent,
self.parent.windowTitle(),
self.__tr("<b>Unable to find an appropriate su/sudo utility to run hp-plugin.</b><p>Install kdesu, gnomesu, or gksu.</p>"),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/fabwindow.py b/ui5/fabwindow.py
index 488b6bbd5..0b95c94f1 100644
--- a/ui5/fabwindow.py
+++ b/ui5/fabwindow.py
@@ -344,7 +344,7 @@ class FABWindow(QMainWindow, Ui_MainWindow):
new_name = to_unicode(self.NameLineEdit.text())
if new_name != self.name:
if QMessageBox.question(self, self.__tr("Rename?"), "Rename '%s' to '%s'?"%(self.name,new_name), \
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
self.db.rename(self.name, new_name)
log.debug("Rename %s to %s" % (self.name, new_name))
diff --git a/ui5/nodevicesdialog.py b/ui5/nodevicesdialog.py
index 6083f6d4b..ca86bfcda 100644
--- a/ui5/nodevicesdialog.py
+++ b/ui5/nodevicesdialog.py
@@ -64,8 +64,7 @@ class NoDevicesDialog(QDialog, Ui_NoDevicesDialog_base):
QMessageBox.critical(self,
self.windowTitle(),
self.__tr("<b>An error occurred.</b><p>Please re-start the Device Manager and try again."),
- QMessageBox.Ok,
- QMessageBox.NoButton,
+ QMessageBox.Ok | QMessageBox.NoButton,
QMessageBox.NoButton)
diff --git a/ui5/plugindialog.py b/ui5/plugindialog.py
index e3007f911..1c6b33868 100644
--- a/ui5/plugindialog.py
+++ b/ui5/plugindialog.py
@@ -252,7 +252,7 @@ class PluginDialog(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate the plug-in prior to installation.</p>Do you still want to install the plug-in?" %error_str),
- QMessageBox.Yes | QMessageBox.No) != QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) != QMessageBox.Yes:
self.pluginObj.deleteInstallationFiles(download_plugin_file)
self.close()
diff --git a/ui5/queuesconf.py b/ui5/queuesconf.py
index cf2206490..e3c2a0278 100644
--- a/ui5/queuesconf.py
+++ b/ui5/queuesconf.py
@@ -245,7 +245,7 @@ class QueuesDiagnose(QDialog, Ui_Dialog):
if QMessageBox.question(self, " ",
self.__tr("<b>%s</b><p>Without this, it is not possible to authenticate and validate this tool prior to installation.</p>Do you still want to run Smart Install disabler?" %error_str),
- QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
+ QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes:
# Disabling without verification.
sts, out = utils.run("sh %s"%smart_install_run)
diff --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index fbfe5ac9b..120ee1587 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -873,7 +873,7 @@ class SetupDialog(QDialog, Ui_Dialog):
self.windowTitle(),
warn_text,
QMessageBox.Yes|\
- QMessageBox.No|\
+ QMessageBox.No,
QMessageBox.NoButton) == QMessageBox.Yes ):
i = 2
while True:
@@ -1108,7 +1108,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break
@@ -1138,7 +1138,7 @@ class SetupDialog(QDialog, Ui_Dialog):
if QMessageBox.critical(self,
self.windowTitle(),
error_text,
- QMessageBox.Retry | QMessageBox.Default,
+ QMessageBox.Retry | QMessageBox.Default |\
QMessageBox.Cancel | QMessageBox.Escape,
QMessageBox.NoButton) == QMessageBox.Cancel:
break

1
ci.fmf Normal file
View file

@ -0,0 +1 @@
resultsdb-testcase: separate

25
gating.yaml Normal file
View file

@ -0,0 +1,25 @@
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_testing
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
#Rawhide
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional}
#gating rhel
--- !Policy
product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-public.functional}
- !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional}

62
hp-plugin.in Normal file
View file

@ -0,0 +1,62 @@
#!/usr/bin/bash
# get version from base hplip rpm
VER=$(@bindir@/rpm -q hplip --queryformat='%{version}')
if test "x$VER" = "x"
then
@bindir@/echo "Version was not acquired - exiting..."
exit 1
fi
# 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 ]
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}
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 or is not a shell script - error during downloading, exiting..."
exit 1
fi
@bindir@/bash ~/.hplip/${PLUGIN_FILE}
if [ $? -ne 0 ]
then
@bindir@/echo "Plugin installation failed, exiting..."
@bindir@/rm -f ~/.hplip/${PLUGIN_FILE} &> /dev/null
exit 1
fi
@bindir@/rm -f ~/.hplip/${PLUGIN_FILE} &> /dev/null
@bindir@/rm -f ~/.hplip/plugin-installed-* &> /dev/null
@bindir@/touch ~/.hplip/plugin-installed-$VER
exit 0

View file

@ -1,7 +0,0 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iEYEABECAAYFAmApuOMACgkQc9dwzaWQR7kddgCeNSUemyt9lpIk8a37ItEiX7XO
xXYAnjgAIdzPYdmSMFJ5Bqv1JLTv7RiC
=oTOD
-----END PGP SIGNATURE-----

View file

@ -1,28 +1,14 @@
diff --git a/setup.py b/setup.py
index 976a42c..3604dd7 100755
--- a/setup.py
+++ b/setup.py
@@ -558,6 +558,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 --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index ac45357..a6dacf0 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -772,9 +772,9 @@ class SetupDialog(QDialog, Ui_Dialog):
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
@@ -765,10 +765,9 @@ class SetupDialog(QDialog, Ui_Dialog):
pass
def OtherPPDButton_clicked(self, b):
- ppd_file = to_unicode(QFileDialog.getOpenFileName(self, self.__tr("Select PPD File"),
- sys_conf.get('dirs', 'ppd'),
- self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)")))
- sys_conf.get(
- 'dirs', 'ppd'),
- self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)")))
+ ppd_file = QFileDialog.getOpenFileName(self, self.__tr("Select PPD File"),
+ sys_conf.get('dirs', 'ppd'),
+ self.__tr("PPD Files (*.ppd *.ppd.gz);;All Files (*)"))[0]

View file

@ -1,16 +1,17 @@
diff -up hplip-3.17.11/installer/core_install.py.check-cups hplip-3.17.11/installer/core_install.py
--- hplip-3.17.11/installer/core_install.py.check-cups 2017-12-07 15:34:24.855761874 +0100
+++ hplip-3.17.11/installer/core_install.py 2017-12-07 15:38:44.749568860 +0100
@@ -349,9 +349,9 @@ class CoreInstall(object):
diff --git a/installer/core_install.py b/installer/core_install.py
index a6654e2..0bd1e9c 100644
--- a/installer/core_install.py
+++ b/installer/core_install.py
@@ -362,9 +362,9 @@ class CoreInstall(object):
'automake': (True, ['prnt'], AUTOMAKE_STR, self.check_automake, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', None, GENERALDEP),
'libjpeg': (True, ['base', 'prnt'], JPEG_STR, self.check_libjpeg, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', None, GENERALDEP),
'libtool': (True, ['base', 'prnt'], LIBTOOL_STR, self.check_libtool, DEPENDENCY_COMPILE_TIME, '-', 'libtool --version', COMPILEDEP),
- 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '1.1', 'cups-config --version', EXTERNALDEP),
- 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '-', 'cups-config --version', GENERALDEP),
- 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '-', 'cups-config --version', GENERALDEP),
+ 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '1.1', 'lpstat -r', EXTERNALDEP),
+ 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '-', 'lpstat -r', GENERALDEP),
+ 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '-', 'lpstat -r', GENERALDEP),
+ 'cups': (True, ['base', 'prnt'], CUPS_STR, self.check_cups, DEPENDENCY_RUN_TIME, '-', None, EXTERNALDEP),
+ 'cups-devel': (True, ['base', 'prnt'], CUPS_DEV_STR, self.check_cups_devel, DEPENDENCY_COMPILE_TIME, '1.1', 'pkgconf --modversion cups', GENERALDEP),
+ 'cups-image': (True, ['base', 'prnt'], CUPS_IMG_STR, self.check_cups_image, DEPENDENCY_COMPILE_TIME, '1.1', 'pkgconf --modversion cups', GENERALDEP),
'gcc': (True, ['base', 'prnt'], GCC_STR, self.check_gcc, DEPENDENCY_COMPILE_TIME, '-', 'gcc --version', COMPILEDEP),
'make': (True, ['base', 'prnt'], MAKE_STR, self.check_make, DEPENDENCY_COMPILE_TIME, '3.0', 'make --version', COMPILEDEP),
'libpthread': (True, ['base', 'prnt'], THREAD_STR, self.check_libpthread, DEPENDENCY_RUN_AND_COMPILE_TIME, '-', 'FUNC#get_libpthread_version', GENERALDEP),

View file

@ -1,33 +0,0 @@
diff --git a/base/password.py b/base/password.py
index bd68f2a..bff9f80 100644
--- a/base/password.py
+++ b/base/password.py
@@ -157,6 +157,28 @@ class Password(object):
log.warn("%s distro is not found in AUTH_TYPES" % distro_name)
self.__authType = 'su'
+ # check if caller is in wheel group - use 'su' if he isnt -
+ # or if the caller is root (just for showing 'root' username)
+ # in the prompt
+ import os
+ from grp import getgrnam
+
+ user = os.getenv('USER')
+
+ try:
+ members = getgrnam('wheel').gr_mem
+ except KeyError:
+ try:
+ members = getgrnam('sudo').gr_mem
+ except:
+ return
+
+ if user in members:
+ self.__authType = 'sudo'
+ else:
+ self.__authType = 'su'
+
+
def __getPasswordDisplayString(self):
if self.__authType == "su":
return "Please enter the root/superuser password: "

View file

@ -28,8 +28,8 @@ diff -up hplip-3.20.9/configure.in.configure-python hplip-3.20.9/configure.in
+ AC_MSG_ERROR([Cannot get Python libs via python3-config], 6)
+fi
+
+SAVE_CFLAGS=$CFLAGS
+SAVE_LIBS=$LIBS
+SAVE_CFLAGS="$CFLAGS"
+SAVE_LIBS="$LIBS"
+
+CFLAGS="$CFLAGS $PYTHON_INCLUDES"
+LIBS="$LIBS $PYTHON_LIBS"

View file

@ -1,38 +1,6 @@
diff --git a/Makefile.am b/Makefile.am
index 62a25d3..2c4d6f8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,7 +3,7 @@
#
# (c) 2004-2015 Copyright HP Development Company, LP
# Author: David Suffield, Naga Samrat Chowdary Narla, Sarbeswar Meher
-INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/
+INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/ -Iprotocol
CFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
@@ -304,7 +304,7 @@ dist_pcard_DATA = pcard/__init__.py pcard/photocard.py
pcardextdir = $(pyexecdir)
pcardext_LTLIBRARIES = pcardext.la
pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c
+pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h
pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
# prnt
@@ -316,7 +316,7 @@ lib_LTLIBRARIES += libhpipp.la
#hpipp_LTLIBRARIES = hpipp.la
#hpipp_la_LDFLAGS = -module -avoid-version
libhpipp_la_SOURCES = protocol/hp_ipp.c protocol/hp_ipp.h protocol/hp_ipp_i.h
-libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\"
+libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\" -D_GNU_SOURCE
libhpipp_la_LDFLAGS = -version-info 0:1:0
libhpipp_la_LIBADD = libhpmud.la
diff --git a/common/utils.c b/common/utils.c
index d8ecee9..def4e47 100644
--- a/common/utils.c
+++ b/common/utils.c
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
@ -44,11 +12,10 @@ index d8ecee9..def4e47 100644
#include <dlfcn.h>
#include <sys/stat.h>
#include <errno.h>
diff --git a/io/hpmud/hpmud.c b/io/hpmud/hpmud.c
index 0eb6fff..358f279 100644
--- a/io/hpmud/hpmud.c
+++ b/io/hpmud/hpmud.c
@@ -759,6 +759,7 @@ enum HPMUD_RESULT hpmud_get_dstat(HPMUD_DEVICE dd, struct hpmud_dstat *ds)
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));
@ -56,10 +23,9 @@ index 0eb6fff..358f279 100644
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 --git a/io/hpmud/jd.c b/io/hpmud/jd.c
index 06f5072..20df27a 100644
--- a/io/hpmud/jd.c
+++ b/io/hpmud/jd.c
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
@ -68,10 +34,9 @@ index 06f5072..20df27a 100644
#include "hpmud.h"
#include "hpmudi.h"
diff --git a/io/hpmud/model.c b/io/hpmud/model.c
index 4ea8990..a917d69 100644
--- a/io/hpmud/model.c
+++ b/io/hpmud/model.c
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] == '[')
{
@ -88,11 +53,10 @@ index 4ea8990..a917d69 100644
break; /* done */
}
}
diff --git a/io/hpmud/musb.c b/io/hpmud/musb.c
index 6e99c15..755493e 100644
--- a/io/hpmud/musb.c
+++ b/io/hpmud/musb.c
@@ -775,7 +775,7 @@ static int device_id(int fd, unsigned char *buffer, int size)
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)
len -= 2;
@ -101,11 +65,10 @@ index 6e99c15..755493e 100644
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff --git a/io/hpmud/pp.c b/io/hpmud/pp.c
index 74c5fdc..021d627 100644
--- a/io/hpmud/pp.c
+++ b/io/hpmud/pp.c
@@ -632,7 +632,7 @@ static int device_id(int fd, char *buffer, int size)
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)
len -= 2;
@ -114,10 +77,39 @@ index 74c5fdc..021d627 100644
buffer[len]=0;
DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
diff --git a/pcard/fat.c b/pcard/fat.c
index caa383f..e1425c0 100644
--- a/pcard/fat.c
+++ b/pcard/fat.c
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
# Author: David Suffield, Naga Samrat Chowdary Narla, Sarbeswar Meher
-INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/
+INCLUDES = -Iip -Iio/hpmud -Iscan/sane -Iprnt/hpijs -Icommon/ -Iprotocol
CFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
CXXFLAGS+= -DCONFDIR=\"$(hplip_confdir)\"
@@ -310,7 +310,7 @@ dist_pcard_DATA = pcard/__init__.py pcar
pcardextdir = $(PYTHONEXECDIR)
pcardext_LTLIBRARIES = pcardext.la
pcardext_la_LDFLAGS = -module -avoid-version
-pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c
+pcardext_la_SOURCES = pcard/pcardext/pcardext.c pcard/fat.c pcard/pcardext/pcardext.h
pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
# prnt
@@ -322,7 +322,7 @@ lib_LTLIBRARIES += libhpipp.la
#hpipp_LTLIBRARIES = hpipp.la
#hpipp_la_LDFLAGS = -module -avoid-version
libhpipp_la_SOURCES = protocol/hp_ipp.c protocol/hp_ipp.h protocol/hp_ipp_i.h
-libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\"
+libhpipp_la_CFLAGS = -DCONFDIR=\"$(hplip_confdir)\" -D_GNU_SOURCE
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
@@ -519,14 +519,17 @@ int FatFreeSpace(void)
int FatDiskAttributes( PHOTO_CARD_ATTRIBUTES * pa )
@ -147,48 +139,9 @@ index caa383f..e1425c0 100644
cwd.StartSector = ConvertClusterToSector(fa.StartCluster);
cwd.CurrSector = cwd.StartSector;
cwd.StartCluster = fa.StartCluster;
diff --git a/prnt/hpcups/genPCLm.cpp b/prnt/hpcups/genPCLm.cpp
index c0cdc73..4db4bde 100644
--- a/prnt/hpcups/genPCLm.cpp
+++ b/prnt/hpcups/genPCLm.cpp
@@ -1237,11 +1237,16 @@ void PCLmGenerator::writeJobTicket()
char orientation[256];
char duplex[256];
char colorthemes[256];
- strncpy(colorthemes,getColorThemesString(m_pPCLmSSettings->colorTheme),256);
- strncpy(inputBin,getInputBinString(m_pPCLmSSettings->userInputBin),256);
- strncpy(outputBin,getOutputBin(m_pPCLmSSettings->userOutputBin),256);
- strncpy(orientation,getOrientationString(m_pPCLmSSettings->userOrientation),256);
- strncpy(duplex,getDuplexString(currDuplexDisposition),256);
+ strncpy(colorthemes,getColorThemesString(m_pPCLmSSettings->colorTheme), sizeof(colorthemes));
+ colorthemes[sizeof(colorthemes)-1] = '\0';
+ strncpy(inputBin,getInputBinString(m_pPCLmSSettings->userInputBin), sizeof(inputBin));
+ inputBin[sizeof(inputBin)-1] = '\0';
+ strncpy(outputBin,getOutputBin(m_pPCLmSSettings->userOutputBin), sizeof(outputBin));
+ outputBin[sizeof(outputBin)-1] = '\0';
+ strncpy(orientation,getOrientationString(m_pPCLmSSettings->userOrientation), sizeof(orientation));
+ orientation[sizeof(orientation)-1] = '\0';
+ strncpy(duplex,getDuplexString(currDuplexDisposition), sizeof(duplex));
+ duplex[sizeof(duplex)-1] = '\0';
snprintf(pOutStr,OUT_STR_SIZE,"%% genPCLm (Ver: %f)\n",PCLM_Ver); writeStr2OutBuff(pOutStr);
snprintf(pOutStr,OUT_STR_SIZE,"%%============= Job Ticket =============\n"); writeStr2OutBuff(pOutStr);
@@ -1635,7 +1640,10 @@ int PCLmGenerator::StartPage(PCLmPageSetup *PCLmPageContent, void **pOutBuffer,
}
if(strlen(PCLmPageContent->mediaSizeName))
- strncpy(currMediaName,PCLmPageContent->mediaSizeName,256);
+ {
+ strncpy(currMediaName,PCLmPageContent->mediaSizeName, sizeof(currMediaName));
+ currMediaName[sizeof(currMediaName)-1] = '\0';
+ }
currStripHeight=PCLmPageContent->stripHeight;
if(!currStripHeight)
diff --git a/prnt/hpijs/context2.cpp b/prnt/hpijs/context2.cpp
index c3df482..19490b1 100644
--- a/prnt/hpijs/context2.cpp
+++ b/prnt/hpijs/context2.cpp
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))
{
@ -197,11 +150,10 @@ index c3df482..19490b1 100644
}
thePrinter = pPFI->CreatePrinter (pSS, familyHandle);
if (thePrinter->constructor_error != NO_ERROR)
diff --git a/prnt/hpijs/systemservices.cpp b/prnt/hpijs/systemservices.cpp
index 95f5a64..f5b4bb5 100644
--- a/prnt/hpijs/systemservices.cpp
+++ b/prnt/hpijs/systemservices.cpp
@@ -396,7 +396,10 @@ void SystemServices::AdjustIO(IO_MODE IM, const char* model)
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;
if (model)
@ -212,11 +164,10 @@ index 95f5a64..f5b4bb5 100644
}
APDK_END_NAMESPACE
diff --git a/prnt/hpps/hppsfilter.c b/prnt/hpps/hppsfilter.c
index 5879a70..d246041 100644
--- a/prnt/hpps/hppsfilter.c
+++ b/prnt/hpps/hppsfilter.c
@@ -230,13 +230,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="));
@ -233,25 +184,24 @@ index 5879a70..d246041 100644
hpwrite(buffer, strlen(buffer));
fprintf(stderr, "HP PS filter func = WriteHeader : WRITING PJL HEADER INFO\n");
return;
diff --git a/protocol/hp_ipp.h b/protocol/hp_ipp.h
index 3853f84..de76202 100644
--- a/protocol/hp_ipp.h
+++ b/protocol/hp_ipp.h
@@ -166,5 +166,10 @@ int getCupsPrinters(printer_t **printer_list);
HPIPP_RESULT parseResponseHeader(char* header, int *content_length, int *chunked, int* header_size);
HPIPP_RESULT prepend_http_header(raw_ipp *raw_request);
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);
enum HPMUD_RESULT sendUSBFileRequest(char *buf, int size, int fileHandle,raw_ipp *responseptr, char *device_uri);
+void _releaseCupsInstance();
+int addCupsPrinter(char *name, char *device_uri, char *location, char *ppd_file, char *model, char *info);
+int delCupsPrinter(char *pr_name);
+int setDefaultCupsPrinter(char *pr_name);
+int controlCupsPrinter(char *pr_name, int op);
# endif //_IPP_H
diff --git a/scan/sane/bb_ledm.c b/scan/sane/bb_ledm.c
index b233d1e..7ba0edf 100644
--- a/scan/sane/bb_ledm.c
+++ b/scan/sane/bb_ledm.c
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
@@ -26,6 +26,7 @@
# include "http.h"
# include "xml.h"
@ -260,10 +210,9 @@ index b233d1e..7ba0edf 100644
# include <stdint.h>
diff --git a/scan/sane/common.h b/scan/sane/common.h
index 0f67542..e496a74 100644
--- a/scan/sane/common.h
+++ b/scan/sane/common.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
@@ -36,7 +36,7 @@
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
@ -273,11 +222,10 @@ index 0f67542..e496a74 100644
#define BUG_DUMP(data, size) bugdump((data), (size))
#define BUG_SZ(args...) {syslog(LOG_ERR, args); DBG(2, args);}
diff --git a/scan/sane/escl.c b/scan/sane/escl.c
index af45bff..4f59b21 100644
--- a/scan/sane/escl.c
+++ b/scan/sane/escl.c
@@ -795,7 +795,7 @@ SANE_Status escl_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
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)
{
@ -286,7 +234,7 @@ index af45bff..4f59b21 100644
}
return stat;
@@ -1102,7 +1102,7 @@ void escl_close(SANE_Handle handle)
@@ -1159,7 +1159,7 @@ void escl_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@ -295,10 +243,9 @@ index af45bff..4f59b21 100644
return;
}
diff --git a/scan/sane/http.c b/scan/sane/http.c
index 800df91..45668cd 100644
--- a/scan/sane/http.c
+++ b/scan/sane/http.c
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 <string.h>
#include <syslog.h>
@ -307,11 +254,10 @@ index 800df91..45668cd 100644
#include "hpmud.h"
#include "http.h"
diff --git a/scan/sane/io.c b/scan/sane/io.c
index 4508458..7bbddea 100755
--- a/scan/sane/io.c
+++ b/scan/sane/io.c
@@ -50,7 +50,7 @@ int __attribute__ ((visibility ("hidden"))) InitDbus(void)
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))
{
@ -320,7 +266,7 @@ index 4508458..7bbddea 100755
dbus_error_free(&dbus_err);
}
@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
@@ -79,7 +79,7 @@ int __attribute__ ((visibility ("hidden"
if (NULL == msg)
{
@ -329,7 +275,7 @@ index 4508458..7bbddea 100755
return 0;
}
@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"))) SendScanEvent(char *device_uri, int
@@ -94,7 +94,7 @@ int __attribute__ ((visibility ("hidden"
if (!dbus_connection_send(dbus_conn, msg, NULL))
{
@ -338,11 +284,10 @@ index 4508458..7bbddea 100755
return 0;
}
diff --git a/scan/sane/ledm.c b/scan/sane/ledm.c
index 9a1ff02..07ab5b0 100644
--- a/scan/sane/ledm.c
+++ b/scan/sane/ledm.c
@@ -802,7 +802,7 @@ SANE_Status ledm_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
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)
{
@ -351,7 +296,7 @@ index 9a1ff02..07ab5b0 100644
}
return stat;
@@ -1067,7 +1067,7 @@ void ledm_close(SANE_Handle handle)
@@ -1078,7 +1078,7 @@ void ledm_close(SANE_Handle handle)
if (ps == NULL || ps != session)
{
@ -360,11 +305,10 @@ index 9a1ff02..07ab5b0 100644
return;
}
diff --git a/scan/sane/marvell.c b/scan/sane/marvell.c
index ad267a3..236f7c9 100644
--- a/scan/sane/marvell.c
+++ b/scan/sane/marvell.c
@@ -134,7 +134,7 @@ static int get_ip_data(struct marvell_session *ps, SANE_Byte *data, SANE_Int max
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)
{
@ -373,7 +317,7 @@ index ad267a3..236f7c9 100644
goto bugout;
}
@@ -335,7 +335,7 @@ static struct marvell_session *create_session()
@@ -335,7 +335,7 @@ static struct marvell_session *create_se
if ((ps = malloc(sizeof(struct marvell_session))) == NULL)
{
@ -382,7 +326,7 @@ index ad267a3..236f7c9 100644
return NULL;
}
memset(ps, 0, sizeof(struct marvell_session));
@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -402,7 +402,7 @@ SANE_Status marvell_open(SANE_String_Con
if (session)
{
@ -391,7 +335,7 @@ index ad267a3..236f7c9 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -431,7 +431,7 @@ SANE_Status marvell_open(SANE_String_Con
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -400,7 +344,7 @@ index ad267a3..236f7c9 100644
goto bugout;
free(session);
@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Const device, SANE_Handle *handle)
@@ -441,7 +441,7 @@ SANE_Status marvell_open(SANE_String_Con
if (hpmud_open_channel(session->dd, HPMUD_S_MARVELL_SCAN_CHANNEL, &session->cd) != HPMUD_R_OK)
{
@ -418,7 +362,7 @@ index ad267a3..236f7c9 100644
return;
}
@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
@@ -849,7 +849,7 @@ SANE_Status marvell_control_option(SANE_
stat = SANE_STATUS_GOOD;
break;
}
@ -427,7 +371,7 @@ index ad267a3..236f7c9 100644
}
else
{ /* Set default. */
@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_Handle handle, SANE_Int option, SANE_Act
@@ -866,7 +866,7 @@ SANE_Status marvell_control_option(SANE_
if (stat != SANE_STATUS_GOOD)
{
@ -436,7 +380,7 @@ index ad267a3..236f7c9 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle handle)
@@ -905,7 +905,7 @@ SANE_Status marvell_start(SANE_Handle ha
if (set_extents(ps))
{
@ -445,7 +389,7 @@ index ad267a3..236f7c9 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -963,7 +963,7 @@ SANE_Status marvell_start(SANE_Handle handle)
@@ -963,7 +963,7 @@ SANE_Status marvell_start(SANE_Handle ha
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -454,7 +398,7 @@ index ad267a3..236f7c9 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength
@@ -1023,7 +1023,7 @@ SANE_Status marvell_read(SANE_Handle han
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@ -463,10 +407,9 @@ index ad267a3..236f7c9 100644
goto bugout;
}
diff --git a/scan/sane/sclpml.c b/scan/sane/sclpml.c
index 9a5975f..dc8b32c 100644
--- a/scan/sane/sclpml.c
+++ b/scan/sane/sclpml.c
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 <unistd.h>
#include <fcntl.h>
@ -484,11 +427,10 @@ index 9a5975f..dc8b32c 100644
return;
}
diff --git a/scan/sane/soap.c b/scan/sane/soap.c
index 07106fe..0d22e52 100644
--- a/scan/sane/soap.c
+++ b/scan/sane/soap.c
@@ -142,7 +142,7 @@ static int get_ip_data(struct soap_session *ps, SANE_Byte *data, SANE_Int maxLen
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)
{
@ -497,7 +439,7 @@ index 07106fe..0d22e52 100644
goto bugout;
}
@@ -219,7 +219,7 @@ static struct soap_session *create_session()
@@ -219,7 +219,7 @@ static struct soap_session *create_sessi
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@ -506,7 +448,7 @@ index 07106fe..0d22e52 100644
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
@@ -418,7 +418,7 @@ SANE_Status soap_open(SANE_String_Const
if (session)
{
@ -515,7 +457,7 @@ index 07106fe..0d22e52 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const device, SANE_Handle *handle)
@@ -434,7 +434,7 @@ SANE_Status soap_open(SANE_String_Const
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -533,7 +475,7 @@ index 07106fe..0d22e52 100644
return;
}
@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Handle handle, SANE_Int option, SANE_Action
@@ -824,7 +824,7 @@ SANE_Status soap_control_option(SANE_Han
if (stat != SANE_STATUS_GOOD)
{
@ -542,7 +484,7 @@ index 07106fe..0d22e52 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -862,7 +862,7 @@ SANE_Status soap_start(SANE_Handle handl
ps->user_cancel = 0;
if (set_extents(ps))
{
@ -551,7 +493,7 @@ index 07106fe..0d22e52 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -913,7 +913,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -913,7 +913,7 @@ SANE_Status soap_start(SANE_Handle handl
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -560,7 +502,7 @@ index 07106fe..0d22e52 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handle)
@@ -955,7 +955,7 @@ SANE_Status soap_start(SANE_Handle handl
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@ -569,7 +511,7 @@ index 07106fe..0d22e52 100644
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength, S
@@ -1007,7 +1007,7 @@ SANE_Status soap_read(SANE_Handle handle
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{
@ -578,11 +520,10 @@ index 07106fe..0d22e52 100644
goto bugout;
}
diff --git a/scan/sane/soapht.c b/scan/sane/soapht.c
index 269ab21..139100d 100644
--- a/scan/sane/soapht.c
+++ b/scan/sane/soapht.c
@@ -136,7 +136,7 @@ static int get_ip_data(struct soap_session *ps, SANE_Byte *data, SANE_Int maxLen
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)
{
@ -591,7 +532,7 @@ index 269ab21..139100d 100644
goto bugout;
}
@@ -435,7 +435,7 @@ static struct soap_session *create_session()
@@ -435,7 +435,7 @@ static struct soap_session *create_sessi
if ((ps = malloc(sizeof(struct soap_session))) == NULL)
{
@ -600,7 +541,7 @@ index 269ab21..139100d 100644
return NULL;
}
memset(ps, 0, sizeof(struct soap_session));
@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
@@ -459,7 +459,7 @@ SANE_Status soapht_open(SANE_String_Cons
if (session)
{
@ -609,7 +550,7 @@ index 269ab21..139100d 100644
return SANE_STATUS_DEVICE_BUSY;
}
@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Const device, SANE_Handle *handle)
@@ -475,7 +475,7 @@ SANE_Status soapht_open(SANE_String_Cons
if (hpmud_open_device(session->uri, ma.mfp_mode, &session->dd) != HPMUD_R_OK)
{
@ -627,7 +568,7 @@ index 269ab21..139100d 100644
return;
}
@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_Handle handle, SANE_Int option, SANE_Acti
@@ -904,7 +904,7 @@ SANE_Status soapht_control_option(SANE_H
if (stat != SANE_STATUS_GOOD)
{
@ -636,7 +577,7 @@ index 269ab21..139100d 100644
action==SANE_ACTION_GET_VALUE ? "get" : action==SANE_ACTION_SET_VALUE ? "set" : "auto");
}
@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -946,7 +946,7 @@ SANE_Status soapht_start(SANE_Handle han
if (set_extents(ps))
{
@ -645,7 +586,7 @@ index 269ab21..139100d 100644
ps->currentTlx, ps->currentTly, ps->currentBrx, ps->currentBry, ps->min_width, ps->min_height, ps->tlxRange.max, ps->tlyRange.max);
stat = SANE_STATUS_INVAL;
goto bugout;
@@ -1032,7 +1032,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -1032,7 +1032,7 @@ SANE_Status soapht_start(SANE_Handle han
/* Open image processor. */
if ((ret = ipOpen(pXform-xforms, xforms, 0, &ps->ip_handle)) != IP_DONE)
{
@ -654,7 +595,7 @@ index 269ab21..139100d 100644
stat = SANE_STATUS_INVAL;
goto bugout;
}
@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle handle)
@@ -1075,7 +1075,7 @@ SANE_Status soapht_start(SANE_Handle han
if (ret & (IP_INPUT_ERROR | IP_FATAL_ERROR | IP_DONE))
{
@ -663,7 +604,7 @@ index 269ab21..139100d 100644
stat = SANE_STATUS_IO_ERROR;
goto bugout;
}
@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle handle, SANE_Byte *data, SANE_Int maxLength,
@@ -1124,7 +1124,7 @@ SANE_Status soapht_read(SANE_Handle hand
if(ret & (IP_INPUT_ERROR | IP_FATAL_ERROR))
{

View file

@ -2,15 +2,6 @@ diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py
index c23957a..48b248f 100644
--- a/ui5/devmgr5.py
+++ b/ui5/devmgr5.py
@@ -2247,7 +2247,7 @@ class PasswordDialog(QDialog):
self.prompt = prompt
Layout= QGridLayout(self)
- Layout.setMargin(11)
+ Layout.setContentsMargins(11, 11, 11, 11)
Layout.setSpacing(6)
self.PromptTextLabel = QLabel(self)
@@ -2300,14 +2300,15 @@ class PasswordDialog(QDialog):
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

View file

@ -32,47 +32,3 @@ index fdb48e8..345ed82 100644
self.cleanup(EVENT_PCARD_UNABLE_TO_MOUNT)
return False
diff --git a/ui4/wifisetupdialog.py b/ui4/wifisetupdialog.py
index 9fd1786..4d36f83 100644
--- a/ui4/wifisetupdialog.py
+++ b/ui4/wifisetupdialog.py
@@ -256,7 +256,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
try:
self.dev = device.Device(self.device_uri)
except Error as e:
- FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, QString(e[0])))
+ FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, QString(e.msg)))
if self.dev is not None:
self.dev.close()
@@ -834,7 +834,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
def showIOError(self, e):
- FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % QString(e[0])))
+ FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % QString(e.msg)))
if self.dev is not None:
self.dev.close()
diff --git a/ui5/wifisetupdialog.py b/ui5/wifisetupdialog.py
index e0c7aee..74cc0ef 100644
--- a/ui5/wifisetupdialog.py
+++ b/ui5/wifisetupdialog.py
@@ -259,7 +259,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
try:
self.dev = device.Device(self.device_uri)
except Error as e:
- FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, str(e[0])))
+ FailureUI(self, self.__tr("<b>Error opening device:</b><p>%s</p><p>(%s)</p>") %(self.device_uri, str(e.msg)))
if self.dev is not None:
self.dev.close()
@@ -840,7 +840,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog):
def showIOError(self, e):
- FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % str(e[0])))
+ FailureUI(self, self.__tr("<b>An I/O error occurred.</b><p>Please check the USB connection to your printer and try again.</p>(%s)" % str(e.msg)))
if self.dev is not None:
self.dev.close()

View file

@ -1,13 +0,0 @@
diff --git a/ui5/fabwindow.py b/ui5/fabwindow.py
index 0b95c94..631727c 100644
--- a/ui5/fabwindow.py
+++ b/ui5/fabwindow.py
@@ -518,7 +518,7 @@ class FABWindow(QMainWindow, Ui_MainWindow):
self.__tr("Import fax addresses from LDIF or vCard"),
#user_conf.workingDirectory(),
self.user_settings.working_dir,
- "vCard (*.vcf);;LDIF (*.ldif *.ldi)"))
+ "vCard (*.vcf);;LDIF (*.ldif *.ldi)")[0])
if result:
working_directory = to_unicode(os.path.dirname(result))

View file

@ -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_

View file

@ -0,0 +1,13 @@
diff --git a/base/queues.py b/base/queues.py
index 2f56c8a..0818574 100755
--- a/base/queues.py
+++ b/base/queues.py
@@ -101,7 +101,7 @@ def parseQueues(mode):
try:
match = LPSTAT_PATTERN.search(p)
printer_name = match.group(1)
- device_uri = match.group(2)
+ device_uri = match.group(3)
cups_printers.append((printer_name, device_uri))
except AttributeError:
pass

View file

@ -0,0 +1,53 @@
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

13
hplip-gcc15-stdc23.patch Normal file
View file

@ -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);

View file

@ -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))

114
hplip-hpaio-gcc14.patch Normal file
View file

@ -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;

View file

@ -1,7 +1,6 @@
diff --git a/setup.py b/setup.py
index 5d48aaa..88e663f 100755
--- a/setup.py
+++ b/setup.py
diff -up hplip-3.23.3/setup.py.hpsetup-noscanjets hplip-3.23.3/setup.py
--- hplip-3.23.3/setup.py.hpsetup-noscanjets 2023-05-29 14:16:26.148133678 +0200
+++ hplip-3.23.3/setup.py 2023-05-29 14:16:26.220133253 +0200
@@ -399,9 +399,19 @@ else: # INTERACTIVE_MODE
#log.warning("Cannot setup fax - device does not have fax feature.")
setup_fax = False
@ -23,13 +22,12 @@ index 5d48aaa..88e663f 100755
plugin = mq.get('plugin', PLUGIN_NONE)
if ignore_plugin_check is False and plugin > PLUGIN_NONE:
diff --git a/ui5/setupdialog.py b/ui5/setupdialog.py
index c6f234b..a5041c1 100644
--- a/ui5/setupdialog.py
+++ b/ui5/setupdialog.py
@@ -1326,6 +1326,18 @@ class SetupDialog(QDialog, Ui_Dialog):
self.mq = device.queryModelByURI(self.device_uri)
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(self.device_uri)
diff -up hplip-3.23.3/ui5/setupdialog.py.hpsetup-noscanjets hplip-3.23.3/ui5/setupdialog.py
--- hplip-3.23.3/ui5/setupdialog.py.hpsetup-noscanjets 2023-05-29 14:16:26.220133253 +0200
+++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 14:18:12.475041454 +0200
@@ -1391,6 +1391,18 @@ class SetupDialog(QDialog, Ui_Dialog):
back_end, is_hp, bus, model, serial, dev_file, host, zc, port = device.parseDeviceURI(
self.device_uri)
self.model = models.normalizeModelName(model).lower()
+ if 'scanjet' in self.model:
+ FailureUI(self,

View file

@ -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)

View file

@ -1,14 +0,0 @@
diff -up hplip-3.14.6/scan.py.lineart hplip-3.14.6/scan.py
--- hplip-3.14.6/scan.py.lineart 2014-07-23 12:30:52.361517852 +0100
+++ hplip-3.14.6/scan.py 2014-07-23 12:32:17.052940000 +0100
@@ -977,8 +977,8 @@ try:
try:
pixels_per_line = bytes_per_line * 8 # Calculation of pixels_per_line for Lineart must be 8 time of bytes_per_line
# Otherwise, scanned image will be corrupted (slanted)
- im = Image.frombuffer('RGBA', (pixels_per_line, lines), buffer.read(),
- 'raw', 'RGBA', 0, 1).convert('L')
+ im = Image.frombuffer('1', (pixels_per_line, lines), buffer.read(),
+ 'raw', '1', 0, 1).convert('L')
except ValueError:
log.error("Did not read enough data from scanner (I/O Error?)")
sys.exit(1)

13
hplip-locale-format.patch Normal file
View file

@ -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):

View file

@ -0,0 +1,108 @@
diff --git a/scan/sane/escl.c b/scan/sane/escl.c
index 9fbbcaf..bc9e0b5 100644
--- a/scan/sane/escl.c
+++ b/scan/sane/escl.c
@@ -37,18 +37,12 @@ static int bb_load(struct escl_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
SendScanEvent(ps->uri, EVENT_PLUGIN_FAIL);
diff --git a/scan/sane/marvell.c b/scan/sane/marvell.c
index 236f7c9..793104c 100644
--- a/scan/sane/marvell.c
+++ b/scan/sane/marvell.c
@@ -60,18 +60,12 @@ static int bb_load(struct marvell_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
diff --git a/scan/sane/soap.c b/scan/sane/soap.c
index 0d22e52..dcd8c7c 100644
--- a/scan/sane/soap.c
+++ b/scan/sane/soap.c
@@ -68,18 +68,12 @@ static int bb_load(struct soap_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{
diff --git a/scan/sane/soapht.c b/scan/sane/soapht.c
index 139100d..74e8391 100644
--- a/scan/sane/soapht.c
+++ b/scan/sane/soapht.c
@@ -62,18 +62,12 @@ static int bb_load(struct soap_session *ps, const char *so)
int stat=1;
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- {
- if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
- goto bugout;
- }
+ if ((ps->hpmud_handle = load_library("libhpmud.so.0")) == NULL)
+ goto bugout;
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
- if ((ps->math_handle = load_library("libm.so")) == NULL)
- {
- if ((ps->math_handle = load_library("libm.so.6")) == NULL)
- goto bugout;
- }
+ if ((ps->math_handle = load_library("libm.so.6")) == NULL)
+ goto bugout;
if ((ps->bb_handle = load_plugin_library(UTILS_SCAN_PLUGIN_LIBRARY, so)) == NULL)
{

79
hplip-no-urlopener.patch Normal file
View file

@ -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)

View file

@ -1,7 +1,7 @@
diff -up hplip-3.17.4/Makefile.am.no-ernie hplip-3.17.4/Makefile.am
--- hplip-3.17.4/Makefile.am.no-ernie 2017-04-26 16:28:35.398099978 +0200
+++ hplip-3.17.4/Makefile.am 2017-04-26 16:29:02.235879035 +0200
@@ -519,7 +519,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
diff -up hplip-3.23.3/Makefile.am.no-ernie hplip-3.23.3/Makefile.am
--- hplip-3.23.3/Makefile.am.no-ernie 2023-05-29 13:15:58.008610471 +0200
+++ hplip-3.23.3/Makefile.am 2023-05-29 13:15:58.134609689 +0200
@@ -562,7 +562,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
prnt/hpcups/Mode2.cpp prnt/hpcups/Mode2.h prnt/hpcups/Mode3.cpp prnt/hpcups/Mode3.h \
prnt/hpcups/Mode9.cpp prnt/hpcups/Mode9.h prnt/hpcups/Mode10.cpp prnt/hpcups/Mode10.h \
prnt/hpcups/ModeDeltaPlus.cpp prnt/hpcups/ModeDeltaPlus.h prnt/hpcups/ModeJbig.cpp prnt/hpcups/ModeJbig.h \
@ -10,9 +10,9 @@ diff -up hplip-3.17.4/Makefile.am.no-ernie hplip-3.17.4/Makefile.am
prnt/hpcups/Encapsulator.cpp prnt/hpcups/Encapsulator.h prnt/hpcups/Pcl3.cpp prnt/hpcups/Pcl3.h \
prnt/hpcups/Pcl3Gui.cpp prnt/hpcups/Pcl3Gui.h prnt/hpcups/Pcl3Gui2.cpp prnt/hpcups/Pcl3Gui2.h \
prnt/hpcups/LJMono.cpp prnt/hpcups/LJMono.h prnt/hpcups/LJColor.cpp prnt/hpcups/LJColor.h \
diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp
--- hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie 2017-04-26 16:28:39.525066003 +0200
+++ hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp 2017-04-26 16:29:46.987510614 +0200
diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp
--- hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp.no-ernie 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpcups/Pcl3Gui2.cpp 2023-05-29 13:17:02.468210361 +0200
@@ -30,7 +30,6 @@
#include "CommonDefinitions.h"
@ -26,7 +26,7 @@ diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups
{
speed_mech_enabled = true;
- m_run_ernie_filter = true;
crd_type = eCrd_both;
crd_type = eCrd_color_only; // pcl3 printers support RGB only ref:hplip-1701
strcpy(m_szLanguage, "PCL3GUI");
}
@@ -59,21 +57,6 @@ DRIVER_ERROR Pcl3Gui2::Configure(Pipelin
@ -51,9 +51,9 @@ diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.cpp.no-ernie hplip-3.17.4/prnt/hpcups
if (crd_type != eCrd_black_only) {
Mode10 *pMode10;
diff -up hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h.no-ernie hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h
--- hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h.no-ernie 2017-04-26 16:28:43.277035115 +0200
+++ hplip-3.17.4/prnt/hpcups/Pcl3Gui2.h 2017-04-26 16:30:05.826355522 +0200
diff -up hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h.no-ernie hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h
--- hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h.no-ernie 2023-03-28 09:26:11.000000000 +0200
+++ hplip-3.23.3/prnt/hpcups/Pcl3Gui2.h 2023-05-29 13:15:58.134609689 +0200
@@ -60,7 +60,6 @@ private:
DRIVER_ERROR encapsulateRaster(BYTE *input_raster, unsigned int num_bytes, COLORTYPE c_type);
bool speed_mech_enabled;

View file

@ -1,12 +0,0 @@
diff -up hplip-3.21.12/base/password.py.osname-mismatch hplip-3.21.12/base/password.py
--- hplip-3.21.12/base/password.py.osname-mismatch 2022-01-14 08:36:11.413431048 +0100
+++ hplip-3.21.12/base/password.py 2022-01-14 09:14:57.315230889 +0100
@@ -105,7 +105,7 @@ def get_distro_name():
os_name = name.read().strip()
name.close()
- os_name = os_name.lower()
+ os_name = os_name.lower().replace(' ','')
if 'MX' in distro_release_name:
os_name = "mxlinux"
if "redhatenterprise" in os_name:

View file

@ -0,0 +1,18 @@
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 = $(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
-pcardext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
-
# prnt
prntdir = $(hplipdir)/prnt
dist_prnt_DATA = prnt/cups.py prnt/__init__.py prnt/ldl.py prnt/pcl.py prnt/colorcal.py

58
hplip-plugin-curl.patch Normal file
View file

@ -0,0 +1,58 @@
diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py
index 56683fb..031ceec 100755
--- a/installer/pluginhandler.py
+++ b/installer/pluginhandler.py
@@ -185,14 +185,16 @@ class PluginHandle(object):
if self.__plugin_conf_file.startswith('file://'):
status, filename = utils.download_from_network(self.__plugin_conf_file, local_conf, True)
else:
- wget = utils.which("wget", True)
- if wget:
- status, output = utils.run("%s --tries=3 --timeout=60 --output-document=%s %s --cache=off" %(wget, local_conf, self.__plugin_conf_file))
+ curl = utils.which("curl", True)
+ if curl:
+ cmd = "%s --retry 3 --max-time 10 --output %s --location %s" %(curl, local_conf, self.__plugin_conf_file)
+ log.debug(cmd)
+ status, output = utils.run(cmd)
if status:
log.error("Plugin download failed with error code = %d" %status)
return status, url, check_sum
else:
- log.error("Please install wget package to download the plugin.")
+ log.error("Please install curl package to download the plugin.")
return status, url, check_sum
except IOError as e:
log.error("I/O Error: %s" % e.strerror)
@@ -284,18 +284,18 @@ class PluginHandle(object):
if src.startswith('file://'):
status, filename = utils.download_from_network(src, plugin_file, True)
else:
- wget = utils.which("wget", True)
- if wget:
- 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)
log.debug(cmd)
status, output = utils.run(cmd)
- log.debug("wget returned: %d" % status)
+ log.debug("curl returned: %d" % status)
#Check whether plugin is accessible in Openprinting.org website otherwise dowload plugin from alternate location.
if status != 0 or os_utils.getFileSize(plugin_file) <= 0:
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)
log.debug(cmd)
status, output = utils.run(cmd)
@@ -323,7 +323,7 @@ class PluginHandle(object):
if digsig_url.startswith('file://'):
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)
log.debug(cmd)
status, output = utils.run(cmd)
except IOError as e:

28
hplip-plugin-script.patch Normal file
View file

@ -0,0 +1,28 @@
diff --git a/Makefile.am b/Makefile.am
index bb4195c..ddac16a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -680,6 +680,12 @@ if HPLIP_CLASS_DRIVER
filterdir=$(cupsfilterdir)
printpluginsdir=$(cupsfilterdir)
+#
+# HP Plugin
+#
+
+pkgplugindir=$(bindir)
+pkgplugin_DATA=hp-plugin
dist_filter_DATA = hpcups hpps dat2drv
dist_printplugins_DATA = prnt/plugins/hbpl1-arm32.so prnt/plugins/hbpl1-arm64.so prnt/plugins/hbpl1-x86_32.so prnt/plugins/hbpl1-x86_64.so prnt/plugins/lj-arm32.so prnt/plugins/lj-arm64.so prnt/plugins/lj-x86_32.so prnt/plugins/lj-x86_64.so
diff --git a/configure.in b/configure.in
index f8f1a28..7fa5d12 100644
--- a/configure.in
+++ b/configure.in
@@ -801,5 +801,5 @@ AC_SUBST(udev_sysfs_rules)
AC_SUBST(epm_class_driver)
AC_SUBST(epm_class_install)
-AC_CONFIG_FILES(Makefile hplip.conf hplip.desktop hp-uiscan.desktop hplip-systray.desktop prnt/drv/hpijs.drv prnt/drv/hpcups.drv hplip.list data/policykit/com.hp.hplip.service)
+AC_CONFIG_FILES(Makefile hplip.conf hplip.desktop hp-uiscan.desktop hplip-systray.desktop prnt/drv/hpijs.drv prnt/drv/hpcups.drv hplip.list data/policykit/com.hp.hplip.service hp-plugin)
AC_OUTPUT

41
hplip-plugin-stdout.patch Normal file
View file

@ -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)}")

17
hplip-pserror-c99.patch Normal file
View file

@ -0,0 +1,17 @@
prnt/pserror.c: Replace an implicit int with an explicit int
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/prnt/hpps/pserror.c b/prnt/hpps/pserror.c
index 114d7e1b5fa364fb..493b49c27917a7e6 100644
--- a/prnt/hpps/pserror.c
+++ b/prnt/hpps/pserror.c
@@ -24,7 +24,7 @@ extern char *program ; /* Defined by main program, giving program name */
void message(int flags, char *format, ...)
{
va_list args ;
- static column = 0 ; /* current screen column for message wrap */
+ static int column = 0 ; /* current screen column for message wrap */
char msgbuf[MAX_MESSAGE] ; /* buffer in which to put the message */
char *bufptr = msgbuf ; /* message buffer pointer */

View file

@ -57,8 +57,8 @@ diff -up hplip-3.15.2/fax/filters/pstotiff.pstotiff-is-rubbish hplip-3.15.2/fax/
+TMPFILE=`mktemp /tmp/pstotiff.XXXXXX` || exit 1
+gs -I/usr/share/cups/fonts -sDEVICE=tiffg4 -dMaxStripSize=0 -r204x196 \
+ -dNOPAUSE -dBATCH -dSAFER -dPARANOIDSAFER \
+ -dSHORTERRORS -dWRITESYSTEMDICT -dGHOSTSCRIPT \
+ -sstdout=%stderr -sOutputFile="$TMPFILE" "$IN"
+ -dSHORTERRORS -dGHOSTSCRIPT -sstdout=%stderr \
+ -sOutputFile="$TMPFILE" "$IN"
+RET=$?
+cat "$TMPFILE"
+rm -f "$TMPFILE"

View file

@ -1,13 +0,0 @@
diff --git a/base/exif.py b/base/exif.py
index 2b8c447..38dca63 100644
--- a/base/exif.py
+++ b/base/exif.py
@@ -798,7 +798,7 @@ class EXIF_header:
tag_name=tag_entry[0]
if len(tag_entry) != 1:
# optional 2nd tag element is present
- if isinstance(tag_entry[1], collections.Callable):
+ if isinstance(tag_entry[1], collections.abc.Callable):
# call mapping function
printable=tag_entry[1](values)
else:

View file

@ -1,13 +0,0 @@
diff --git a/base/smart_install.py b/base/smart_install.py
index ec30aef..dd95e09 100755
--- a/base/smart_install.py
+++ b/base/smart_install.py
@@ -226,7 +226,7 @@ def disable(mode, ui_toolkit='qt4', dialog=None, app=None, passwordObj = None):
dialog.init(printer_names, "", QUEUES_SMART_INSTALL_ENABLED)
else: # If QT object is not created, creating QT app
try:
- from ui4.queuesconf import QueuesDiagnose
+ from ui5.queuesconf import QueuesDiagnose
except ImportError:
log.error("Unable to load Qt4 support. Is it installed?")
else: # app = QApplication(sys.argv) # caller needs to inoke this, if already QApplication object is not created.

View file

@ -1,25 +0,0 @@
#!/bin/sh
if [ "$1" == "-h" -o "$1" == "--help" ]
then
echo "Usage: ./hplip-rebase.sh X.Y.Z"
echo " X.Y.Z - new hplip version"
exit 0
fi
wget -O hplip-plugin.run http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run
if [ $? -gt 0 ]
then
echo "Error while downloading plugin. Check version passed by argument or internet connection. For usage run script with -h or --help argument."
rm hplip-plugin.run
exit 1
fi
rm hplip-plugin.run
fedpkg mockbuild
if [ $? -gt 0 ]
then
echo "Error during mockbuild."
exit 1
fi
exit 0

View file

@ -12,11 +12,21 @@ fi
# extract the original tarball
tar -xaf hplip-$VERSION.tar.gz || exit 1
# remove unwanted files
rm hplip-$VERSION/prnt/hpcups/ErnieFilter.{cpp,h} hplip-$VERSION/prnt/hpijs/ernieplatform.h || exit 1
# remove unwanted files - license-related ones reported here https://bugs.launchpad.net/hplip/+bug/2028938
rm hplip-$VERSION/locatedriver
# compress into a new tarball
tar -cjvf hplip-$VERSION-repack.tar.gz hplip-$VERSION || exit 1
# check whether plugin is available
wget -O hplip-plugin.run https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-$1-plugin.run || wget -O hplip-plugin.run https://developers.hp.com/sites/default/files/hplip-$1-plugin.run || exit 1
# check whether the file is sane
file --mime hplip-plugin.run | grep 'x-shellscript' || exit 1
echo "hplip-${VERSION}-repack.tar.gz is prepared for uploading..."
exit 0
# upload a new source tarball
#fedpkg new-sources hplip-$VERSION-repack.tar.gz || exit 1

View file

@ -0,0 +1,19 @@
scam/sane/hpaio.c: Include orblite.h for more function prototypes
Otherwise the build fails with compilers which do not support
implicit function declarations.
Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c
index d342626822fc2190..57d1ddea32fb5816 100644
--- a/scan/sane/hpaio.c
+++ b/scan/sane/hpaio.c
@@ -50,6 +50,7 @@
#include "sclpml.h"
#include "escl.h"
#include "io.h"
+#include "orblite.h"
#include "orblitei.h"

View file

@ -0,0 +1,21 @@
diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c
index ba86640..2eb7aba 100644
--- a/scan/sane/orblite.c
+++ b/scan/sane/orblite.c
@@ -20,6 +20,7 @@
#include "orblitei.h"
#include "orblite.h"//Added New
#include <math.h>
+#include <dlfcn.h>
#include "utils.h"
#include "io.h"
@@ -195,7 +196,7 @@ bugout:
static int bb_unload(SANE_THandle ps)
{
- _DBG("Calling orblite bb_unload: \n");
+ DBG("Calling orblite bb_unload: \n");
if (ps->bb_handle)
{
dlclose(ps->bb_handle);

37
hplip-scan-size.patch Normal file
View file

@ -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'):

View file

@ -0,0 +1,16 @@
Switch the whole libsane-hpaio to get proper definition of strcasestr() used in
sclpml.c
diff --git a/Makefile.am b/Makefile.am
index 15d953a..7105f74 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -73,7 +73,7 @@ endif
# The following is a interlibrary dependency that must be compiled first.
libsane_hpaio_la_LIBADD = libhpip.la libhpmud.la libhpipp.la $(DBUS_LIBS) -lcups -ldl
#libsane_hpaio_la_CFLAGS = -DWITH_NONAMESPACES -DSOAP_DEBUG
-libsane_hpaio_la_CFLAGS = $(DBUS_CFLAGS) -Iprotocol
+libsane_hpaio_la_CFLAGS = $(DBUS_CFLAGS) -Iprotocol -D_GNU_SOURCE
if NETWORK_BUILD
libsane_hpaio_la_LIBADD += libhpdiscovery.la

View file

@ -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,};

View file

@ -1,14 +0,0 @@
diff --git a/base/module.py b/base/module.py
index 04ac5b8..56be168 100644
--- a/base/module.py
+++ b/base/module.py
@@ -301,6 +301,9 @@ class Module(object):
if UI_TOOLKIT_QT4 in self.supported_ui_toolkits and UI_TOOLKIT_QT4 in self.installed_ui_toolkits:
long_params.extend(['qt4', 'use-qt4'])
+ if UI_TOOLKIT_QT5 in self.supported_ui_toolkits and UI_TOOLKIT_QT5 in self.installed_ui_toolkits:
+ long_params.extend(['qt5', 'use-qt5'])
+
if extra_params is not None:
params = ''.join([params, extra_params])

123
hplip-use-raw-strings.patch Normal file
View file

@ -0,0 +1,123 @@
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
-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_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
@@ -46,7 +46,7 @@ HPPS = 3
HPOTHER = 4
DEVICE_URI_PATTERN = re.compile(r"""(.*):/(.*?)/(\S*?)\?(?:serial=(\S*)|device=(\S*)|ip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^&]*)|zc=(\S+))(?:&port=(\d))?""", re.I)
-NICKNAME_PATTERN = re.compile(b'''\*NickName:\s*\"(.*)"''', re.MULTILINE)
+NICKNAME_PATTERN = re.compile(r'''\*NickName:\s*\"(.*)"''', re.MULTILINE)
NET_PATTERN = re.compile(r"""(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})""")
NET_ZC_PATTERN = re.compile(r'''zc=(.*)''',re.IGNORECASE)
NET_OTHER_PATTERN = re.compile(r'''(.*)://(.*)''',re.IGNORECASE)
@@ -149,7 +149,7 @@ def parseQueues(mode):
desc=''
else:
try:
- desc = to_string_utf8( NICKNAME_PATTERN.search(fileptr).group(1) )
+ desc = to_string_utf8( NICKNAME_PATTERN.search(fileptr.decode('utf-8')).group(1) )
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
@@ -627,7 +627,7 @@ class DependenciesCheck(object):
status, output = utils.run("%s -d03f0:" % lsusb)
if output:
- lsusb_pat = re.compile("""^Bus\s([0-9a-fA-F]{3,3})\sDevice\s([0-9a-fA-F]{3,3}):\sID\s([0-9a-fA-F]{4,4}):([0-9a-fA-F]{4,4})(.*)""", re.IGNORECASE)
+ lsusb_pat = re.compile(r"""^Bus\s([0-9a-fA-F]{3,3})\sDevice\s([0-9a-fA-F]{3,3}):\sID\s([0-9a-fA-F]{4,4}):([0-9a-fA-F]{4,4})(.*)""", re.IGNORECASE)
log.debug(output)
try:
hpmudext = utils.import_ext('hpmudext')
@@ -682,7 +682,7 @@ class DependenciesCheck(object):
out =''
for g in getfacl_out_list:
- if 'getfacl' not in g and '' is not g and 'file' not in g:
+ if 'getfacl' not in g and '' != g and 'file' not in g:
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
@@ -42,7 +42,7 @@ from base.sixext import to_bytes_utf8
# **************************************************************************** #
-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)
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
@@ -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),
utils.USAGE_OPTIONS,
- ("To specify the port on a multi-port JetDirect:", "-p<port> or --port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
+ ("To specify the port on a multi-port JetDirect:", r"-p<port> or --port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
("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
@@ -42,11 +42,11 @@ USAGE = [(__doc__, "", "name", True),
("Usage: %s [OPTIONS]" % __mod__, "", "summary", True),
utils.USAGE_OPTIONS,
("Bus to probe:", "-b<bus> or --bus=<bus>", "option", False),
- ("", "<bus>: cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
+ ("", r"<bus>: cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False),
("Set Time to Live (TTL):", "-t<ttl> or --ttl=<ttl> (Default is 4).", "option", False),
("Set timeout:", "-o<timeout in secs.> or --timeout=<timeout is secs.>", "option", False),
("Filter by functionality:", "-e<filter list> or --filter=<filter list>", "option", False),
- ("", "<filter list>: comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
+ ("", r"<filter list>: comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False),
("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
@@ -79,11 +79,11 @@ USAGE = [ (__doc__, "", "name", True),
utils.USAGE_SPACE,
utils.USAGE_OPTIONS,
("Automatic mode:", "-a or --auto (-i mode only)", "option", False),
- ("To specify the port on a multi-port JetDirect:", "--port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
+ ("To specify the port on a multi-port JetDirect:", r"--port=<port> (Valid values are 1\*, 2, and 3. \*default)", "option", False),
("No testpage in automatic mode:", "-x (-i mode only)", "option", False),
("To specify a CUPS printer queue name:", "-p<printer> or --printer=<printer> (-i mode only)", "option", False),
("To specify a CUPS fax queue name:", "-f<fax> or --fax=<fax> (-i mode only)", "option", False),
- ("Type of queue(s) to install:", "-t<typelist> or --type=<typelist>. <typelist>: print*, fax\* (\*default) (-i mode only)", "option", False),
+ ("Type of queue(s) to install:", r"-t<typelist> or --type=<typelist>. <typelist>: print*, fax\* (\*default) (-i mode only)", "option", False),
("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,

View file

@ -1,12 +1,12 @@
diff -up hplip-3.19.6/ui5/wifisetupdialog.py.wifisetup-bad-call-fix hplip-3.19.6/ui5/wifisetupdialog.py
--- hplip-3.19.6/ui5/wifisetupdialog.py.wifisetup-bad-call-fix 2019-07-12 08:46:56.873167869 +0200
+++ hplip-3.19.6/ui5/wifisetupdialog.py 2019-07-12 08:49:36.813769803 +0200
@@ -570,7 +570,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog
try:
diff -up hplip-3.23.3/ui5/wifisetupdialog.py.wifisetup-bad-call-fix hplip-3.23.3/ui5/wifisetupdialog.py
--- hplip-3.23.3/ui5/wifisetupdialog.py.wifisetup-bad-call-fix 2023-05-29 13:45:35.830961640 +0200
+++ hplip-3.23.3/ui5/wifisetupdialog.py 2023-05-29 13:48:05.939993288 +0200
@@ -665,7 +665,7 @@ class WifiSetupDialog(QDialog, Ui_Dialog
self.ip,_,addressmode, subnetmask, gateway, pridns, sec_dns= self.wifiObj.getIPConfiguration(self.dev, self.adapterName)
if self.ip == "0.0.0.0":
- self.ip, subnetmask, gateway, pri_dns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
+ self.ip, subnetmask, gateway, pridns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
if not self.wifiObj == CdmWifi:
- self.ip, subnetmask, gateway, pri_dns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
+ self.ip, subnetmask, gateway, pridns, sec_dns, addressmode = self.wifiObj.getwifiotherdetails(self.dev,self.adapterName)
vsa_codes = self.wifiObj.getVSACodes(self.dev, self.adapterName)
ss_max, ss_min, ss_val, ss_dbm = self.wifiObj.getSignalStrength(self.dev, self.adapterName,self.network, self.adaptor_id)
self.hn = self.wifiObj.getHostname(self.dev)

View file

@ -6,9 +6,18 @@
Summary: HP Linux Imaging and Printing Project
Name: hplip
Version: 3.22.2
Version: 3.25.8
Release: 1%{?dist}
License: GPLv2+ and MIT and BSD and IJG and GPLv2+ with exceptions and ISC
# most files (base/*, *, ui*/...) - GPL2+
# prnt/hpijs/ jpeg related files - IJG
# prnt/* - BSD-3-Clause-HP - it is modified a little, asked here https://gitlab.com/fedora/legal/fedora-license-data/-/issues/267
# base/exif.py - BSD-2-Clause - reported as https://gitlab.com/fedora/legal/fedora-license-data/-/issues/268
# base/ldif.py - python-ldap - reported https://gitlab.com/fedora/legal/fedora-license-data/-/issues/269
# io/*, scan/* - MIT
# protocol/discovery/* - LGPL-2.1-or-later
# protocol/* - GPL2only
# scan/sane/sane.h - Public Domain
License: GPL-2.0-or-later AND MIT AND BSD-3-Clause-HP AND IJG AND GPL-2.0-only AND LGPL-2.1-or-later AND BSD-2-Clause AND LicenseRef-Fedora-Public-Domain AND python-ldap
Url: https://developers.hp.com/hp-linux-imaging-and-printing
# Original source tarball
@ -27,6 +36,7 @@ Source3: %{name}.appdata.xml
Source4: hp-laserjet_cp_1025nw.ppd.gz
Source5: hp-laserjet_professional_p_1102w.ppd.gz
Source6: hplip-repack.sh
Source7: hp-plugin.in
Patch1: hplip-pstotiff-is-rubbish.patch
Patch2: hplip-strstr-const.patch
@ -66,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
@ -167,52 +179,103 @@ Patch52: hplip-clean-ldl.patch
# - it will cause malfunction of printing and scanning for them
# https://bugs.launchpad.net/hplip/+bug/1883898
Patch53: hplip-revert-plugins.patch
# non-sudoers cannot authenticate
# reported upstream https://bugs.launchpad.net/hplip/+bug/1904888
Patch54: hplip-check-userperms.patch
# 1919556 - hp-fab crashed: QFileDialog.getOpenFileName is not used correctly
# getOpenFileName returns a tuple, but hp-fab expects a simple variable
# reported upstream as https://bugs.launchpad.net/hplip/+bug/1914743
Patch55: hplip-fab-import.patch
# if an user tries to install scanner via hp-setup (printer/fax utility)
# it fails further down - break out earlier with a message
# reported upstream as https://bugs.launchpad.net/hplip/+bug/1916114
Patch56: hplip-hpsetup-noscanjets.patch
# 1951922 - hp-systray doesn't support a valid --qt5 option
# reported upstream https://bugs.launchpad.net/hplip/+bug/1925480
Patch57: hplip-systray-qt5.patch
Patch54: hplip-hpsetup-noscanjets.patch
# 1963114 - patch for hplip firmware load timeout fix
# reported upstream https://bugs.launchpad.net/hplip/+bug/1922404
Patch58: hplip-hpfirmware-timeout.patch
Patch55: hplip-hpfirmware-timeout.patch
# 1985251 - Incorrect permission for gpg directory
# reported upstream https://bugs.launchpad.net/hplip/+bug/1938442
Patch59: hplip-gpgdir-perms.patch
Patch56: hplip-gpgdir-perms.patch
# 1987141 - hp-plugin installs malformed udev files
# reported upstream https://bugs.launchpad.net/hplip/+bug/1847477
Patch60: hplip-plugin-udevissues.patch
# reported upstream https://bugs.launchpad.net/hplip/+bug/1938504
Patch61: hplip-osname-mismatch.patch
# 2015428 - python3.10 has Callable in collections.abc
# reported as https://bugs.launchpad.net/hplip/+bug/1948801
Patch62: hplip-py310-collections-abc.patch
# 2015910 - [GUI] hp-setup crashes when loading smart_install module
# reported as https://bugs.launchpad.net/hplip/+bug/1957891
Patch63: hplip-qt5-smart-install.py
Patch57: hplip-plugin-udevissues.patch
# 2080235 - Misleading errors about missing shared libraries when scanning
# downstream patch to prevent errors:
# - when loading libhpmud.so - unversioned .so files belong into devel packages,
# but dlopen() in hplip was set to load the unversioned .so - so to remove rpmlint
# error (when libhpmud.so is in non-devel package) and prevent runtime dependency on -devel
# package (if libhpmud.so had been moved to -devel) the dlopen on unversioned .so file was
# 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
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
Patch60: 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
# 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
# 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
# undefined strcasestr() in sclpml.c - build with _GNU_SOURCE
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
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
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.
Patch66: hplip-plugin-curl.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
%if 0%{?fedora} || 0%{?rhel} <= 8
# mention hplip-gui if you want to have GUI
Patch1000: hplip-fedora-gui.patch
%endif
# uses automatic creation of configure
BuildRequires: autoconf
# uses automatic creation of Makefile
BuildRequires: automake
# Make sure we get postscriptdriver tags - need cups and python3-cups.
BuildRequires: cups
BuildRequires: python3-cups
# uses functions from CUPS in filters, backends and libraries defining them
BuildRequires: cups-devel
%if 0%{?rhel} <= 8 || 0%{?fedora}
# needed for desktop file validation in spec file
BuildRequires: desktop-file-utils
%endif
# gcc and gcc-c++ are no longer in buildroot by default
# gcc is needed for compilation of HPAIO scanning backend, HP implementation of
# IPP and MDNS protocols, hpps driver, hp backend, hpip (image processing
@ -235,60 +298,67 @@ BuildRequires: openssl-devel
# supports mDNS device discovery via Avahi
BuildRequires: pkgconfig(avahi-client)
BuildRequires: pkgconfig(avahi-core)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: python3-cups
# implements C Python extensions like hpmudext, cupsext, scanext
BuildRequires: python3-devel
# distutils are removed in Python3.12, use setuptools
BuildRequires: python3-setuptools
# SANE backend hpaio uses function from SANE API
BuildRequires: sane-backends-devel
BuildRequires: pkgconfig(dbus-1)
# macros: %%{_tmpfilesdir}, %%{_udevrulesdir}
BuildRequires: systemd
%if 0%{?rhel} <= 8 || 0%{?fedora}
# needed for desktop file validation in spec file
BuildRequires: desktop-file-utils
%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
Recommends: libsane-hpaio%{?_isa} = %{version}-%{release}
# downloaded plugin requires python3-gobject to work even via CLI...
# but make it weak dependency, so users which don't need the plugin and have servers
# can remove the python3-gobject which is used by desktop apps
Recommends: python3-gobject
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%if 0%{?rhel} <= 8 || 0%{?fedora}
Requires: python3-pillow
%endif
Requires: cups
Requires: wget
Requires: python3-dbus
# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
# which causes great delays...
Requires: curl
# set require directly to /usr/bin/gpg, because gnupg2 and gnupg ships it,
# but gnupg will be deprecated in the future
Requires: %{_bindir}/gpg
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
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
# 1733449 - Scanner on an HP AIO printer is not detected unless libsane-hpaio is installed
Requires: libsane-hpaio
# 1788643 - Fedora minimal does not ship tar by default
Requires: tar
# require usbutils, hp-diagnose_queues needs lsusb
Requires: usbutils
# uses avahi-browse for discovering IPP-over-USB printers
Recommends: avahi-tools
# require coreutils, because timeout binary is needed in post scriptlet,
# because hpcups-update-ppds script can freeze in certain situation and
# stop the update
Requires(post): coreutils
%description
The Hewlett-Packard Linux Imaging and Printing Project provides
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
@ -298,16 +368,19 @@ 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
Recommends: avahi-tools
Requires: python3-qt5
Requires: python3-reportlab
Recommends: libsane-hpaio%{?_isa} = %{version}-%{release}
# for hp-check
Recommends: pkgconf
Requires: %{name}%{?_isa} = %{version}-%{release}
# hpssd.py
Requires: python3-gobject
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: libsane-hpaio%{?_isa} = %{version}-%{release}
Requires: python3-reportlab
Requires: python3-qt5
%description gui
HPLIP graphical tools.
@ -315,7 +388,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}
@ -326,21 +399,21 @@ SANE driver for scanners in HP's multi-function devices (from HPOJ).
%setup -q
# The pstotiff filter is rubbish so replace it (launchpad #528394).
%patch1 -p1 -b .pstotiff-is-rubbish
%patch -P 1 -p1 -b .pstotiff-is-rubbish
# Fix compilation.
%patch2 -p1 -b .strstr-const
%patch -P 2 -p1 -b .strstr-const
# Make utils.checkPyQtImport() look for the gui sub-package (bug #243273).
%patch3 -p1 -b .ui-optional
%patch -P 3 -p1 -b .ui-optional
# Make sure to avoid handwritten asm.
%patch4 -p1 -b .no-asm
%patch -P 4 -p1 -b .no-asm
# Corrected several IEEE 1284 Device IDs using foomatic data.
# Color LaserJet 2500 series (bug #659040)
# LaserJet 4100 Series/2100 Series (bug #659039)
%patch5 -p1 -b .deviceIDs-drv
%patch -P 5 -p1 -b .deviceIDs-drv
chmod +x %{SOURCE2}
mv prnt/drv/hpijs.drv.in{,.deviceIDs-drv-hpijs}
%{SOURCE2} prnt/drv/hpcups.drv.in \
@ -348,28 +421,28 @@ mv prnt/drv/hpijs.drv.in{,.deviceIDs-drv-hpijs}
> prnt/drv/hpijs.drv.in
# Move udev rules from /etc/ to /usr/lib/ (bug #748208).
%patch6 -p1 -b .udev-rules
%patch -P 6 -p1 -b .udev-rules
# Retry when connecting to device fails (bug #532112).
%patch7 -p1 -b .retry-open
%patch -P 7 -p1 -b .retry-open
# Mark SNMP quirks in PPD for HP OfficeJet Pro 8500 (bug #581825).
%patch8 -p1 -b .snmp-quirks
%patch -P 8 -p1 -b .snmp-quirks
# Fixed bogus low ink warnings from hpijs driver (bug #643643).
%patch9 -p1 -b .hpijs-marker-supply
%patch -P 9 -p1 -b .hpijs-marker-supply
# Clear old printer-state-reasons we used to manage (bug #510926).
%patch10 -p1 -b .clear-old-state-reasons
%patch -P 10 -p1 -b .clear-old-state-reasons
# Avoid busy loop in hpcups when backend has exited (bug #525944).
%patch11 -p1 -b .hpcups-sigpipe
%patch -P 11 -p1 -b .hpcups-sigpipe
# CUPS filters should use TMPDIR when available (bug #865603).
%patch12 -p1 -b .logdir
%patch -P 12 -p1 -b .logdir
# Fixed Device ID parsing code in hpijs's dj9xxvip.c (bug #510926).
%patch13 -p1 -b .bad-low-ink-warning
%patch -P 13 -p1 -b .bad-low-ink-warning
# Add Device ID for
# HP LaserJet Color M451dn (bug #1159380)
@ -377,7 +450,7 @@ for ppd_file in $(grep '^diff' %{PATCH14} | cut -d " " -f 4);
do
gunzip ${ppd_file#*/}.gz
done
%patch14 -p1 -b .deviceIDs-ppd
%patch -P 14 -p1 -b .deviceIDs-ppd
for ppd_file in $(grep '^diff' %{PATCH14} | cut -d " " -f 4);
do
gzip -n ${ppd_file#*/}
@ -388,142 +461,176 @@ for ppd_file in $(grep '^diff' %{PATCH15} | cut -d " " -f 4);
do
gunzip ${ppd_file#*/}.gz
done
%patch15 -p1 -b .ImageableArea
%patch -P 15 -p1 -b .ImageableArea
for ppd_file in $(grep '^diff' %{PATCH15} | cut -d " " -f 4);
do
gzip -n ${ppd_file#*/}
done
# Scan to /var/tmp instead of /tmp (bug #1076954).
%patch16 -p1 -b .scan-tmp
%patch -P 16 -p1 -b .scan-tmp
# Treat logging before importing of logger module (bug #984699).
%patch17 -p1 -b .log-stderr
%patch -P 17 -p1 -b .log-stderr
# Fix parsing of avahi-daemon output (bug #1096939).
%patch18 -p1 -b .parsing
%patch -P 18 -p1 -b .parsing
# Fixed left/right margins for HP DeskJet 990C (LP #1405212).
%patch19 -p1 -b .dj990c-margin
%patch -P 19 -p1 -b .dj990c-margin
# Fixed uses of strncpy throughout.
%patch20 -p1 -b .strncpy
%patch -P 20 -p1 -b .strncpy
# Don't try to write bytecode cache for hpfax backend (bug #1192761)
# or hp-config_usb_printer (bug #1266903)
# or hpps filter (bug #1241548).
%patch21 -p1 -b .no-write-bytecode
%patch -P 21 -p1 -b .no-write-bytecode
# Ignore IOError when logging output (bug #712537).
%patch22 -p1 -b .silence-ioerror
%patch -P 22 -p1 -b .silence-ioerror
# [abrt] hplip: hp-scan:663:<module>:NameError: name 'source_option' is not defined (bug #1341304)
%patch23 -p1 -b .sourceoption
%patch -P 23 -p1 -b .sourceoption
# hplip license problem (bug #1364711)
%patch24 -p1 -b .no-ernie
%patch -P 24 -p1 -b .no-ernie
# hplip appdata
%patch25 -p1 -b .appdata
%patch -P 25 -p1 -b .appdata
# hp-check shows 'CUPS incompatible or not running' even if CUPS is running (bug #1456467)
%patch26 -p1 -b .check-cups
%patch -P 26 -p1 -b .check-cups
# hp-firmware:NameError: name 'INTERACTIVE_MODE4' is not defined (bug #1533869)
%patch27 -p1 -b .typo
%patch -P 27 -p1 -b .typo
%patch28 -p1 -b .use-binary-str
%patch -P 28 -p1 -b .use-binary-str
# TypeError: 'Error' object does not support indexing (bug #1564770)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/1718129
# in python2 it was possible to acces Exception message by index [0].
# in python3 this is no longer possible and it causes TypeError.
%patch29 -p1 -b .error-print-fix
%patch -P 29 -p1 -b .error-print-fix
# TypeError: not all arguments converted during string formatting (bug #1566938)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/616450
# bug caused by more arguments than argument specifiers in formatted string
%patch30 -p1 -b .hpfax-import-error-print
%patch -P 30 -p1 -b .hpfax-import-error-print
# 'WifiSetupDialog' object has no attribute 'wifiobj' (bug #1626877)
# upstream bug: https://bugs.launchpad.net/hplip/+bug/1752060
# bug caused by typo in wifisetupdialog wifiObj property call
%patch31 -p1 -b .wifisetup-bad-call-fix
%patch -P 31 -p1 -b .wifisetup-bad-call-fix
# have pool of keyservers to choose
%patch32 -p1 -b .keyserver
%patch -P 32 -p1 -b .keyserver
# TypeError: argument 5 has unexpected type 'StandardButtons' (bug #1594602)
# upstream bug: https://bugs.launchpad.net/ubuntu/+source/hplip/+bug/1745383
# bug caused by typo in QMessageBox constructor call
# this patch fixes more of those typos - some fixed by tkorbar, some taken from ubuntu fix
%patch33 -p1 -b .qmsgbox-typos-fix
%patch -P 33 -p1 -b .qmsgbox-typos-fix
# removal of non open source code, taken from ubuntu
%patch34 -p1 -b .libimageprocessor-removal
%patch -P 34 -p1 -b .libimageprocessor-removal
%{_bindir}/rm prnt/hpcups/libImageProcessor-x86*
%patch35 -p1 -b .toolbox-crash
%patch -P 35 -p1 -b .toolbox-crash
# part of https://bugzilla.redhat.com/show_bug.cgi?id=1666076
%patch36 -p1 -b .add-ppd-crash
%patch -P 36 -p1 -b .add-ppd-crash
# 1671513 - after 'successful' plugin installation it is not installed
%patch37 -p1 -b .missing-links
%patch -P 37 -p1 -b .missing-links
# 1684434 - Scanning broken for HP LaserJet 3052
%patch38 -p1 -b .hp-laserjet-3052-broken-scanning
%patch -P 38 -p1 -b .hp-laserjet-3052-broken-scanning
# 1694663 - Cannot scan with M281fdw LaserJet - failed: Error during device I/O (part 1)
%patch39 -p1 -b .hpmud-string-parse
%patch -P 39 -p1 -b .hpmud-string-parse
# 1694663 - Cannot scan with M281fdw LaserJet - failed: Error during device I/O (part 2)
%patch40 -p1 -b .m278-m281-needs-plugin
%patch -P 40 -p1 -b .m278-m281-needs-plugin
# 1695716 - hpcups crashes in Compressor destructor
%patch41 -p1 -b .hpcups-crash
%patch -P 41 -p1 -b .hpcups-crash
# fixing issues found by coverity scan
%patch42 -p1 -b .covscan
%patch -P 42 -p1 -b .covscan
# segfault during logging (1727162)
%patch43 -p1 -b .logging-segfault
%patch -P 43 -p1 -b .logging-segfault
# 1738321 - [abrt] hp-systray:BlockingIOError: [Errno 11] Resource temporarily unavailable
%patch44 -p1 -b .systray-blockerror
%patch -P 44 -p1 -b .systray-blockerror
# 1742949, 1740132, 1739855 - missing drivers
%patch45 -p1 -b .missing-drivers
%patch -P 45 -p1 -b .missing-drivers
# 1772698 - Can't setup printer (HP LJ 2200): no attributes found in model.dat
%patch46 -p1 -b .model-mismatch
%patch -P 46 -p1 -b .model-mismatch
# 1573430 - sixext.py:to_string_utf8:UnicodeDecodeError: 'utf-8' codec can't decode bytes
%patch47 -p1 -b .unicodeerror
%patch48 -p1 -b .Wreturn-fix
%patch49 -p1 -b .configure-python
%patch50 -p1 -b .dialog-infinite-loop
%patch -P 47 -p1 -b .unicodeerror
%patch -P 48 -p1 -b .Wreturn-fix
%patch -P 49 -p1 -b .configure-python
%patch -P 50 -p1 -b .dialog-infinite-loop
# 1590014 - hplip PPD search doesn't expect '-' in device name
%patch51 -p1 -b .find-driver
%patch -P 51 -p1 -b .find-driver
# 1833308 - hp-clean cannot clean HP PSC1410 - Device I/O error
%patch52 -p1 -b .clean-ldl
%patch53 -p1 -b .revert-plugins
# 1899410 - non-sudoers cannot authenticate because of bad username in prompt
%patch54 -p1 -b .check-userperms
# 1919556 - hp-fab crashed: QFileDialog.getOpenFileName is not used correctly
%patch55 -p1 -b .fab-import
%patch -P 52 -p1 -b .clean-ldl
%patch -P 53 -p1 -b .revert-plugins
# if an user tries to install scanner via hp-setup (printer/fax utility)
# it fails further down - break out earlier with a message
%patch56 -p1 -b .hpsetup-noscanjets
# 1951922 - hp-systray doesn't support a valid --qt5 option
%patch57 -p1 -b .systray-qt5
%patch -P 54 -p1 -b .hpsetup-noscanjets
# 1963114 - patch for hplip firmware load timeout fix
%patch58 -p1 -b .hpfirmware-timeout
%patch -P 55 -p1 -b .hpfirmware-timeout
# 1985251 - Incorrect permission for gpg directory
%patch59 -p1 -b .gpgdir-perms
%patch -P 56 -p1 -b .gpgdir-perms
# 1987141 - hp-plugin installs malformed udev files
%patch60 -p1 -b .hpplugin-udevperms
# upstream bug https://bugs.launchpad.net/hplip/+bug/1938504
%patch61 -p1 -b .osname-mismatch
# 2015428 - python3.10 has Callable in collections.abc
%patch62 -p1 -b .abc
# 2015910 - [GUI] hp-setup crashes when loading smart_install module
%patch63 -p1 -b .qt5-smart
%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
# C99 compatibility fixes by fweimer - use explicit int
# Submitted upstream: <https://bugs.launchpad.net/hplip/+bug/1997875>
%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: <https://bugs.launchpad.net/hplip/+bug/1997875>
%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: <https://bugs.launchpad.net/hplip/+bug/1997875>
%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 63 -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
# 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
# switch to curl by downstream patch from wget to workaround openstack dropping IPv6
# which causes great delays...
%patch -P 66 -p1 -b .curl-switch
# 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
# Fedora specific patches now, don't put a generic patches under it
%if 0%{?fedora} || 0%{?rhel} <= 8
# mention hplip-gui should be installed if you want GUI
%patch1000 -p1 -b .fedora-gui
%patch -P 1000 -p1 -b .fedora-gui
%endif
sed -i.duplex-constraints \
-e 's,\(UIConstraints.* \*Duplex\),//\1,' \
prnt/drv/hpcups.drv.in
@ -535,10 +642,12 @@ sed -i.env-python -e 's,^#!/usr/bin/env python,#!%{__python3},' \
prnt/filters/hpps \
fax/filters/pstotiff
rm locatedriver
cp -p %{SOURCE4} %{SOURCE5} ppd/hpcups
# 2129849 - move hp-plugin script into srcdir
cp -p %{SOURCE7} .
%build
# Work-around Makefile.am imperfections.
sed -i 's|^AM_INIT_AUTOMAKE|AM_INIT_AUTOMAKE([foreign])|g' configure.in
@ -587,8 +696,9 @@ rm -rf %{buildroot}%{_sysconfdir}/sane.d \
%{buildroot}%{_docdir} \
%{buildroot}%{_datadir}/hal/fdi \
%{buildroot}%{_datadir}/hplip/pkservice.py \
%{buildroot}%{_bindir}/hp-pkservice \
%{buildroot}%{_datadir}/hplip/locatedriver* \
%{buildroot}%{_bindir}/hp-pkservice
rm -rf %{buildroot}%{_datadir}/hplip/locatedriver* \
%{buildroot}%{_datadir}/hplip/dat2drv*
rm -f %{buildroot}%{_bindir}/hp-logcapture \
@ -611,6 +721,33 @@ rm -f %{buildroot}%{_bindir}/foomatic-rip \
%{buildroot}%{_datadir}/applications/hplip.desktop \
%{buildroot}%{_datadir}/ppd/HP/*.ppd
rm -f %{buildroot}%{_datadir}/hplip/hpaio.desc
rm -rf %{buildroot}%{_datadir}/hplip/install.* \
%{buildroot}%{_datadir}/hplip/uninstall.* \
%{buildroot}%{_bindir}/hp-uninstall \
%{buildroot}%{_datadir}/hplip/upgrade.* \
%{buildroot}%{_bindir}/hp-upgrade \
%{buildroot}%{_datadir}/hplip/hplip-install
rm -f %{buildroot}%{_datadir}/hplip/hpijs.drv.in.template
rm -f %{buildroot}%{_datadir}/cups/mime/pstotiff.types \
%{buildroot}%{_datadir}/hplip/fax/pstotiff*
rm -f %{buildroot}%{_datadir}/hplip/hplip-install
rm -f %{buildroot}%{_unitdir}/hplip-printer@.service
rm -f %{buildroot}%{_datadir}/ipp-usb/quirks/HPLIP.conf
rm -rf %{buildroot}%{_bindir}/hp-unload \
%{buildroot}%{_datadir}/%{name}/pcard
# The systray applet doesn't work properly (displays icon as a
# window), so don't ship the launcher yet.
rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%if 0%{?rhel} > 8
rm -rf %{buildroot}%{_bindir}/hp-check \
%{buildroot}%{_bindir}/hp-devicesettings \
@ -649,6 +786,8 @@ rm -rf %{buildroot}%{_bindir}/hp-check \
doc/hpscan.html
%endif
install -p -m755 hp-plugin %{buildroot}%{_bindir}/hp-plugin-download
%if 0%{?rhel} <= 8 || 0%{?fedora}
mkdir -p %{buildroot}%{_datadir}/metainfo
cp %{SOURCE3} %{buildroot}%{_datadir}/metainfo/
@ -702,24 +841,6 @@ find doc/images -type f -exec chmod 644 {} \;
# SELinux file context (bug #564551).
%{__mkdir_p} %{buildroot}%{_datadir}/hplip/prnt/plugins
# Remove files we don't want to package.
rm -f %{buildroot}%{_datadir}/hplip/hpaio.desc
rm -f %{buildroot}%{_datadir}/hplip/hplip-install
rm -rf %{buildroot}%{_datadir}/hplip/install.*
rm -f %{buildroot}%{_datadir}/hplip/uninstall.*
rm -f %{buildroot}%{_bindir}/hp-uninstall
rm -f %{buildroot}%{_datadir}/hplip/upgrade.*
rm -f %{buildroot}%{_bindir}/hp-upgrade
rm -f %{buildroot}%{_datadir}/hplip/hpijs.drv.in.template
rm -f %{buildroot}%{_datadir}/cups/mime/pstotiff.types
rm -f %{buildroot}%{_datadir}/hplip/fax/pstotiff*
rm -f %{buildroot}%{_unitdir}/hplip-printer@.service
rm -f %{buildroot}%{_datadir}/ipp-usb/quirks/HPLIP.conf
# The systray applet doesn't work properly (displays icon as a
# window), so don't ship the launcher yet.
rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%post
# timeout is to prevent possible freeze during update
%{_bindir}/timeout 10m -k 15m %{_bindir}/hpcups-update-ppds &>/dev/null ||:
@ -744,6 +865,7 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%{_bindir}/hp-levels
%{_bindir}/hp-makeuri
%{_bindir}/hp-plugin
%{_bindir}/hp-plugin-download
%{_bindir}/hp-probe
%{_bindir}/hp-query
%if 0%{?rhel} <= 8 || 0%{?fedora}
@ -753,10 +875,10 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%{_bindir}/hp-setup
%{_bindir}/hp-testpage
%{_bindir}/hp-timedate
%{_bindir}/hp-unload
%{_cups_serverbin}/backend/hp
%{_cups_serverbin}/backend/hpfax
# ex-hpijs
%{_cups_serverbin}/filter/hpcdmfax
%{_cups_serverbin}/filter/hpcups
%{_cups_serverbin}/filter/hpcupsfax
%{_cups_serverbin}/filter/hpps
@ -800,7 +922,6 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%{_datadir}/hplip/data/pcl
%{_datadir}/hplip/data/ps
%{_datadir}/hplip/installer
%{_datadir}/hplip/pcard
%{_datadir}/hplip/prnt
%if 0%{?rhel} <= 8 || 0%{?fedora}
%{_datadir}/hplip/scan
@ -873,6 +994,174 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop
%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
* Tue Oct 03 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-10
- BSD-3-Clause-HP and python-ldap are added into SPDX list
* Thu Aug 24 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-9
- hp-check: use pkgconf when checking for cups version
* Thu Aug 03 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-8
- fallback to using external plugin for Hbpl1 printers
* Fri Jul 28 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-7
- SPDX migration
* Thu Jul 27 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-6
- remove redundant files
* Fri Jul 21 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-6
- fix syntax warnings
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.5-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 18 2023 Adam Williamson <awilliam@redhat.com> - 3.23.5-4
- Require curl, not curl-minimal, due to conflicts
* Mon Jul 17 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-3
- 2192131 - parseQueues() doesn't get device uri from 'lpstat -v', because parsing pattern changed
- switch to curl when downloading plugin
- 2221311 - [python3.12] hplip tools/binaries crash due depending on removed configparser.readfp()
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 3.23.5-2
- Rebuilt for Python 3.12
* Tue Jun 06 2023 Zdenek Dohnal <zdohnal@redhat.com> - 3.23.5-1
- 2184067 - hplip-3.23.5 is available
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.22.10-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Dec 01 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.10-3
- 2148210 - hplip: pcardext Python extension broken
- stop shipping hp-unload, since it depends on pcardext
* Thu Nov 24 2022 Florian Weimer <fweimer@redhat.com> - 3.22.10-2
- C99 compatibility fixes
- Stop building the pcardext Python extension because it unusable (#2148210)
* Wed Nov 23 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.10-1
- 2139309 - hplip-3.22.10 is available
* Wed Oct 19 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.6-5
- distutils will be removed in Python3.12, use setuptools now
* Thu Oct 13 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.6-4
- bump the NVR
* Thu Oct 13 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.6-3
- 2129849 - hp-plugin unable to load plugin.conf - add a new backup download script
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.22.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Tue Jul 19 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.6-1
- 2101790 - hplip-3.22.6 is available
* Mon Jul 18 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.4-3
- recommend libsane-hpaio - duplicated scanners are better than no scanner
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 3.22.4-2
- Rebuilt for Python 3.11
* Tue May 17 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.4-1
- 2080235 - Misleading errors about missing shared libraries when scanning
* Wed May 11 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.4-1
- 2079740 - hplip-3.22.4 is available
* Mon Mar 28 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.2-2
- make libsane-hpaio only suggested to prevent possible duplicated scanner devices
* Thu Mar 10 2022 Zdenek Dohnal <zdohnal@redhat.com> - 3.22.2-1
- 2059085 - hplip-3.22.2 is available

37
plans.fmf Normal file
View file

@ -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

10
rpminspect.yaml Normal file
View file

@ -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

View file

@ -1 +1 @@
SHA512 (hplip-3.22.2-repack.tar.gz) = ab7e0bb4eaaa04aa4be4ee8d1ea5825d3856e93f9a2108149f7282c988c079949668dacfd5b69af0e2a812d2ebc01ff2205d2548336ce43faf6591a98f80e874
SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059

View file

@ -1,30 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)
mQGiBEsnpscRBACyclffkMVkXXdtY2qTT2+B6HN4hBoUxBwZBULyHFuSP9lsB7wK
16Hl5ZTu+oy+GegzzFRrHWxBLN9i67T0plNkqDJhWUrmXR7xvX+dFc+Qrl+uPR0i
CY1NMnWwnFh01YtYb9NAlb3bLn8RLBH8Zo60i7wfwdW9Wi1mgzmUT/UI9wCg7y6R
VmF4RjNWJ2WRdL/jVeAB8H0D/0xfePoYWrSGzOp7+Vl+xYo5TdSrzohUUnly6xla
UIKwlBCG/jpQqKH17803GpkFyh5FxG1Db7VWsciDv7flcBLPtn75gU2fPHXL+gnv
r1eJ+ugQwCl4/8d4iJ5TMXmHQOW2Pd0U47OmbZYNNgtA+lXhF8n8+6w3GRhqubLF
/9b/A/4wH37bv1shLhdLpP+9WYHc8z9+jmStVUFdAGoD/n6vOpBX+GQYaEY5Y8RS
Wf0DFhMF6CFYNZ2ngDyvPt53M2jU7hrxXIfs/b5bLMqG2et9M/avdEWGUKTsC7wu
0zeGtD07r9EA3WDIhxN9QEGZAq5Q3NSbedMHIVE4Ynq7VNCdsrQ0SFBMSVAgKEhQ
IExpbnV4IEltYWdpbmcgYW5kIFByaW50aW5nKSA8aHBsaXBAaHAuY29tPohgBBMR
AgAgBQJLJ6bHAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQc9dwzaWQR7n4
dQCghZgIpxuTC+GhiQIO0dK9wTlbMmoAoOB252fEOvf73v8Ya8qmN1GlmYiXuQIN
BEsnpscQCACEO/wh+X9Apok41vn+qby5YLvSuXNcub1iVSlsByv+28KQbbvXDNPh
LP9wdO9DmzfIGwarj0uLtn0h9UWTnEpXSZ0bKJnCYc7GZpUvcNyjIuSs69hK2rLd
38MSb1hoBaICLjZERUhe+ZGwlx7zvAIghj+ss1udwpc6PcdPNaimp+ck9/+eSpir
BZsWRDEyYZ8r0Tzh0vCMZG3AJZvm439gsze5ImvAt+xFluYRCHMAkXaYimXAipHd
Hudqu5B1/KNp3kRc68pDw/kzFSJ4bEdSW/3Qu5gJxb4y9XDTMipyFt1YZrP4sYJN
EMAjIllnMHqQsK4efdNY/JSk92wEjmN/AAQLB/42X5RSrDQc9k/2RdgbRUQPXAXF
YRySDMt4XfaQNAYiU2nQ1thxJuLzFLnp8VumzMD4tmsmBNmacVFTAMJyWZrum6eP
dvyczSBG0e+4t6e2YCGdA8hfxJYNHCEE0i6NI7FCu2OPDqgXKsyViql7vchQAAg3
N4ILBlcoO86JOCbugj+Yjp8mI2tzw2o3GEZLgHPD+t7ECFmeB6QypH02CXGTsTNQ
6qt99zr86urV8Ta39Q0A6pVV81fkXaGIg1eLX7LCE5g4lV9D/G6KXYWYju3EBz/t
eZRyrE3BrKM7MEqVUcgBwjIswBPDfJFW+H6B7Ma9RsT0efJgeruc712Z6cztiEkE
GBECAAkFAksnpscCGwwACgkQc9dwzaWQR7mkswCcD+QNKEcLN9XmWhlzJfwzjW3N
JgMAniNROBBXr37dCkmawTcagKSwhiUx
=2aUQ
-----END PGP PUBLIC KEY BLOCK-----