diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index c534931..00397c1 100644 --- a/.gitignore +++ b/.gitignore @@ -91,6 +91,28 @@ hplip-3.10.6.tar.gz /hplip-3.18.6.tar.gz /hplip-3.18.12.tar.gz /hplip-3.19.6.tar.gz -/hp-laserjet_cp_1025nw.ppd.gz -/hp-laserjet_professional_p_1102w.ppd.gz /hplip-3.19.8.tar.gz +/hplip-3.19.10.tar.gz +/hplip-3.19.11.tar.gz +/hplip-3.19.12.tar.gz +/hplip-3.20.2.tar.gz +/hplip-3.20.3.tar.gz +/hplip-3.20.5.tar.gz +/hplip-3.20.6.tar.gz +/hplip-3.20.9.tar.gz +/hplip-3.20.11.tar.gz +/hplip-3.21.2.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 diff --git a/0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch b/0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch index 6a975cd..7c61d77 100644 --- a/0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch +++ b/0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch @@ -1,16 +1,17 @@ -diff -up hplip-3.18.12/Makefile.am.libimageprocessor-removal hplip-3.18.12/Makefile.am ---- hplip-3.18.12/Makefile.am.libimageprocessor-removal 2019-01-08 12:51:08.629447883 +0100 -+++ hplip-3.18.12/Makefile.am 2019-01-08 12:51:08.710447208 +0100 -@@ -166,7 +166,7 @@ if !HPLIP_CLASS_DRIVER +diff --git a/Makefile.am b/Makefile.am +index f65afea..12317dc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -167,7 +167,7 @@ if !HPLIP_CLASS_DRIVER dist_hplip_SCRIPTS = hpssd.py __init__.py hpdio.py endif #HPLIP_CLASS_DRIVER -dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template prnt/hpcups/libImageProcessor-x86_64.so prnt/hpcups/libImageProcessor-x86_32.so +dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template - dist_noinst_SCRIPTS += dat2drv.py install.py hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv - if !HPLIP_CLASS_DRIVER -@@ -594,7 +594,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte + dist_noinst_DATA += prnt/ipp-usb/HPLIP.conf + dist_noinst_SCRIPTS += dat2drv.py install.py hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv +@@ -597,7 +597,7 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilter.cpp prnt/hpcups/HPCupsFilter.h prnt/hp prnt/hpcups/ImageProcessor.h hpcups_CXXFLAGS = $(APDK_ENDIAN_FLAG) $(DBUS_CFLAGS) @@ -19,7 +20,7 @@ diff -up hplip-3.18.12/Makefile.am.libimageprocessor-removal hplip-3.18.12/Makef #else #hpcupsdir = $(cupsfilterdir) #hpcups_PROGRAMS = hpcups -@@ -684,16 +684,6 @@ endif #HPLIP_CLASS_DRIVER +@@ -687,16 +687,6 @@ endif #HPLIP_CLASS_DRIVER install-data-hook: if HPLIP_BUILD @@ -33,69 +34,6 @@ diff -up hplip-3.18.12/Makefile.am.libimageprocessor-removal hplip-3.18.12/Makef - chmod 775 $(libdir)/libImageProcessor-x86_32.so ; \ - ln -sf $(libdir)/libImageProcessor-x86_32.so $(libdir)/libImageProcessor.so ; \ - fi - if !HPLIP_CLASS_DRIVER - # If scanner build, add hpaio entry to sane dll.conf. - if [ "$(scan_build)" = "yes" ]; then \ -diff -up hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp.libimageprocessor-removal hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp ---- hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp.libimageprocessor-removal 2019-01-08 12:51:08.619447966 +0100 -+++ hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp 2019-01-08 12:52:39.321686854 +0100 -@@ -31,7 +31,6 @@ - \*****************************************************************************/ - - #include "HPCupsFilter.h" --#include "ImageProcessor.h" - - #include - #include -@@ -645,16 +644,10 @@ int HPCupsFilter::processRasterData(cups - - - snprintf(hpPreProcessedRasterFile, sizeof (hpPreProcessedRasterFile), "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name); -- image_processor_t* imageProcessor = imageProcessorCreate(); - - while (cupsRasterReadHeader2(cups_raster, &cups_header)) - { - -- IMAGE_PROCESSOR_ERROR result = imageProcessorStartPage(imageProcessor, &cups_header); -- if (result != IPE_SUCCESS){ -- dbglog("DEBUG: imageProcessorStartPage failed result = %d\n", result); -- } -- - current_page_number++; - - if (current_page_number == 1) { -@@ -753,12 +746,6 @@ int HPCupsFilter::processRasterData(cups - color_raster = rgbRaster; - black_raster = kRaster; - -- result = imageProcessorProcessLine(imageProcessor, m_pPrinterBuffer, cups_header.cupsBytesPerLine); -- if (result != IPE_SUCCESS){ -- dbglog("DEBUG: imageProcessorProcessLine failed result = %d\n", result); -- } -- -- - if ((y == 0) && !is_ljmono) { - //For ljmono, make sure that first line is not a blankRaster line.Otherwise printer - //may not skip blank lines before actual data -@@ -788,12 +775,6 @@ int HPCupsFilter::processRasterData(cups - } - } // for() loop end - -- result = imageProcessorEndPage(imageProcessor); -- if (result != IPE_SUCCESS){ -- dbglog("DEBUG: imageProcessorEndPage failed result = %d\n", result); -- } -- -- - m_Job.NewPage(); - if (err != NO_ERROR) { - break; -@@ -808,8 +789,6 @@ int HPCupsFilter::processRasterData(cups - rgbRaster = NULL; - } - -- imageProcessorDestroy(imageProcessor); -- - unlink(hpPreProcessedRasterFile); - return ret_status; - } + if [ -d "/usr/share/ipp-usb/quirks/" ]; then \ + echo "ipp-usb directory exists"; \ + cp prnt/ipp-usb/HPLIP.conf /usr/share/ipp-usb/quirks/ ; \ diff --git a/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch b/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch index ef7d370..c0b26ec 100644 --- a/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch +++ b/0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch @@ -1,45 +1,108 @@ -From 95a73bbc9bd65602a0f9411469ab511bc80a01d0 Mon Sep 17 00:00:00 2001 -From: Till Kamppeter -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("The HPLIP plugin is already installed.

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("Unable to find an appropriate su/sudo utility to run hp-plugin.

Install kdesu, gnomesu, or gksu.

"), +- 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("An error occurred.

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("%s

Without this, it is not possible to authenticate and validate the plug-in prior to installation.

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("%s

Without this, it is not possible to authenticate and validate this tool prior to installation.

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("Annoying Confirmation: Are you sure you want to delete this group?"), @@ -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("Annoying Confirmation: Are you sure you want to delete this address book entry?"), @@ -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("One or more email addresses are missing.

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("

Please check your email for a test message.

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("The HPLIP plugin is already installed.

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("Unable to find an appropriate su/sudo utility to run hp-plugin.

Install kdesu, gnomesu, or gksu.

"), -- 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("An error occurred.

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("%s

Without this, it is not possible to authenticate and validate the plug-in prior to installation.

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("%s

Without this, it is not possible to authenticate and validate this tool prior to installation.

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 diff --git a/ci.fmf b/ci.fmf new file mode 100644 index 0000000..c5aa0e0 --- /dev/null +++ b/ci.fmf @@ -0,0 +1 @@ +resultsdb-testcase: separate diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..71d105b --- /dev/null +++ b/gating.yaml @@ -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} diff --git a/hp-laserjet_cp_1025nw.ppd.gz b/hp-laserjet_cp_1025nw.ppd.gz new file mode 100644 index 0000000..ab80803 Binary files /dev/null and b/hp-laserjet_cp_1025nw.ppd.gz differ diff --git a/hp-laserjet_professional_p_1102w.ppd.gz b/hp-laserjet_professional_p_1102w.ppd.gz new file mode 100644 index 0000000..b716711 Binary files /dev/null and b/hp-laserjet_professional_p_1102w.ppd.gz differ diff --git a/hp-plugin.in b/hp-plugin.in new file mode 100644 index 0000000..5bdbab0 --- /dev/null +++ b/hp-plugin.in @@ -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 diff --git a/hplip-3.18.6.tar.gz.asc b/hplip-3.18.6.tar.gz.asc deleted file mode 100644 index 8221531..0000000 --- a/hplip-3.18.6.tar.gz.asc +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.11 (GNU/Linux) - -iEYEABECAAYFAlsYzCYACgkQc9dwzaWQR7k3kQCgpUG6Okb3nGf7qodmI9zTBf3A -a8AAoLD0LiwifYlnEBlHS5Eaw/ylB9A8 -=H/1x ------END PGP SIGNATURE----- diff --git a/hplip-add-ppd-crash.patch b/hplip-add-ppd-crash.patch index 43bcd2b..beb070d 100644 --- a/hplip-add-ppd-crash.patch +++ b/hplip-add-ppd-crash.patch @@ -1,14 +1,17 @@ -diff --git a/setup.py b/setup.py -index ba1b519..4f64eed 100755 ---- a/setup.py -+++ b/setup.py -@@ -556,6 +556,9 @@ else: # INTERACTIVE_MODE - else: - nickname = open(file_path, 'r').read(4096) +diff -up hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash hplip-3.23.3/ui5/setupdialog.py +--- hplip-3.23.3/ui5/setupdialog.py.add-ppd-crash 2023-05-29 13:55:03.443497903 +0200 ++++ hplip-3.23.3/ui5/setupdialog.py 2023-05-29 13:57:19.014700721 +0200 +@@ -765,10 +765,9 @@ class SetupDialog(QDialog, Ui_Dialog): + pass -+ if sys.version_info[0] > 2: -+ nickname = nickname.decode('utf-8') -+ - try: - desc = nickname_pat.search(nickname).group(1) - except AttributeError: + 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 (*)"))) ++ 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] + + if ppd_file and os.path.exists(ppd_file): + self.print_ppd = (ppd_file, cups.getPPDDescription(ppd_file)) diff --git a/hplip-check-cups.patch b/hplip-check-cups.patch index 053eb50..e0f1570 100644 --- a/hplip-check-cups.patch +++ b/hplip-check-cups.patch @@ -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), diff --git a/hplip-clean-ldl.patch b/hplip-clean-ldl.patch new file mode 100644 index 0000000..89553ec --- /dev/null +++ b/hplip-clean-ldl.patch @@ -0,0 +1,44 @@ +diff --git a/base/device.py b/base/device.py +index 6d7add9..bf27307 100644 +--- a/base/device.py ++++ b/base/device.py +@@ -2264,7 +2264,8 @@ class Device(object): + self.callback() + + if total_bytes_to_write != bytes_out: +- raise Error(ERROR_DEVICE_IO_ERROR) ++ raise Error(ERROR_DEVICE_IO_ERROR, 'Number of written ' ++ 'bytes by hpmudext mismatch with expected amount.') + + return bytes_out + +diff --git a/base/g.py b/base/g.py +index 9856662..0aa0e2e 100644 +--- a/base/g.py ++++ b/base/g.py +@@ -398,9 +398,11 @@ ERROR_STRINGS = { + + + class Error(Exception): +- def __init__(self, opt=ERROR_INTERNAL): ++ def __init__(self, opt=ERROR_INTERNAL, msg=None): + self.opt = opt + self.msg = ERROR_STRINGS.get(opt, ERROR_STRINGS[ERROR_INTERNAL]) ++ if msg: ++ self.msg = '{} - {}'.format(self.msg, msg) + log.debug("Exception: %d (%s)" % (opt, self.msg)) + Exception.__init__(self, self.msg, opt) + +diff --git a/prnt/ldl.py b/prnt/ldl.py +index e3f77f7..8b28e7f 100644 +--- a/prnt/ldl.py ++++ b/prnt/ldl.py +@@ -145,7 +145,7 @@ def buildLIDILPacket(packet_type, command=0, operation=0, other={}): + p = '$\x00\x10\x00\x08\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$' + + elif packet_type == PACKET_TYPE_RESET_LIDIL: +- p = '$\x00\x10\x00\x06\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$' ++ p = b'$\x00\x10\x00\x06\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$' + + elif packet_type == PACKET_TYPE_COMMAND: + diff --git a/hplip-colorlaserjet-mfp-m278-m281.patch b/hplip-colorlaserjet-mfp-m278-m281.patch deleted file mode 100644 index 2ce7870..0000000 --- a/hplip-colorlaserjet-mfp-m278-m281.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff -up hplip-3.17.11/data/models/models.dat.colorlaserjet-mfp-m278-m281 hplip-3.17.11/data/models/models.dat ---- hplip-3.17.11/data/models/models.dat.colorlaserjet-mfp-m278-m281 2017-11-23 13:10:17.000000000 +0100 -+++ hplip-3.17.11/data/models/models.dat 2018-01-19 08:24:21.554788787 +0100 -@@ -58516,6 +58516,59 @@ usb-pid=3c2a - usb-vid=3f0 - wifi-config=3 - -+[hp_colorlaserjet_mfp_m278-m281] -+align-type=0 -+clean-type=0 -+color-cal-type=0 -+copy-type=0 -+embedded-server-type=1 -+fax-type=7 -+fw-download=False -+icon=hp_color_laserjet_cm1312_mfp.png -+io-mfp-mode=1 -+io-mode=1 -+io-support=14 -+job-storage=0 -+linefeed-cal-type=0 -+model1=HP Color LaserJet MFP M278-281 -+monitor-type=0 -+panel-check-type=0 -+pcard-type=0 -+plugin=1 -+plugin-reason=64 -+power-settings=0 -+ppd-name=hp-color_laserjet_pro_mfp_m277 -+pq-diag-type=0 -+r-type=0 -+r0-agent1-kind=4 -+r0-agent1-sku=CF400A/CF400X -+r0-agent1-type=1 -+r0-agent2-kind=4 -+r0-agent2-sku=CF401A -+r0-agent2-type=4 -+r0-agent3-kind=4 -+r0-agent3-sku=CF403A -+r0-agent3-type=5 -+r0-agent4-kind=4 -+r0-agent4-sku=CF402A -+r0-agent4-type=6 -+scan-src=3 -+scan-type=5 -+status-battery-check=0 -+status-dynamic-counters=0 -+status-type=10 -+support-released=True -+support-subtype=48c3 -+support-type=2 -+support-ver=3.15.4 -+tech-class=Postscript -+family-class=Undefined -+tech-subclass=Normal -+tech-type=4 -+usb-pid=3c2a -+usb-vid=3f0 -+wifi-config=3 -+ - [hp_color_laserjet_m553] - align-type=0 - clean-type=0 diff --git a/hplip-configure-python.patch b/hplip-configure-python.patch new file mode 100644 index 0000000..2ae7620 --- /dev/null +++ b/hplip-configure-python.patch @@ -0,0 +1,52 @@ +diff -up hplip-3.20.9/configure.in.configure-python hplip-3.20.9/configure.in +--- hplip-3.20.9/configure.in.configure-python 2020-09-23 07:24:27.000000000 +0200 ++++ hplip-3.20.9/configure.in 2020-10-02 07:27:09.082331431 +0200 +@@ -604,17 +604,29 @@ if test "$class_driver" = "no" && test " + fi + fi + +-SAVE_CPPFLAGS="$CPPFLAGS" +-CFLAGS=`python-config --includes` +-if [ $? -eq 0 ] +-then +- echo $FLAGS +-else +-CFLAGS=`python3-config --includes` +- if [ $? -eq 0 ] +- then +- echo $FLAGS +- fi ++AC_PATH_PROG(python3_config_path, python3-config, [AC_MSG_ERROR([python3-config not installed], 6)]) ++ ++PYTHON_INCLUDES=`$python3_config_path --includes` ++if test "X$PYTHON_INCLUDES" = "X" ; then ++ AC_MSG_ERROR([Cannot get Python includes via python3-config], 6) ++fi ++ ++PYTHON_LIBS=`$python3_config_path --libs` ++if test "X$PYTHON_LIBS" = "X" ; then ++ AC_MSG_ERROR([Cannot get Python libs via python3-config], 6) ++fi ++ ++SAVE_CFLAGS="$CFLAGS" ++SAVE_LIBS="$LIBS" ++ ++CFLAGS="$CFLAGS $PYTHON_INCLUDES" ++LIBS="$LIBS $PYTHON_LIBS" ++ ++AC_TRY_LINK(,[ ], AC_MSG_RESULT(yes); python_includes="ok", AC_MSG_ERROR([no: PYTHON DISABLED], 6)) ++ ++if test "X$python_includes" != "Xok" ; then ++ CFLAGS="$SAVE_CFLAGS" ++ LIBS="$SAVE_LIBS" + fi + + #CFLAGS=`(python-config --includes)` +@@ -631,7 +643,6 @@ if test "$class_driver" = "no" && test " + AS_IF([test "x$FOUND_HEADER" != "xyes"], + [AC_MSG_ERROR([cannot find python-devel support], 6)]) + fi +-CFLAGS="$save_CFLAGS" + + if test "$hpijs_only_build" = "no" && test "$scan_build" = "yes" && test "$hpcups_only_build" = "no"; then + AC_CHECK_LIB([sane], [sane_open], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find sane-backends-devel support (or --disable-scan-build)], 12)]) diff --git a/hplip-covscan.patch b/hplip-covscan.patch index 3ce9af1..29384dc 100644 --- a/hplip-covscan.patch +++ b/hplip-covscan.patch @@ -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 #include #include -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,40 +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/discovery/mdns.c b/protocol/discovery/mdns.c -index abca295..8dd6fa5 100644 ---- a/protocol/discovery/mdns.c -+++ b/protocol/discovery/mdns.c -@@ -31,6 +31,10 @@ - #include - #include - #include -+#include -+#include -+#include -+#include - #include "mdns.h" - - /* Convert "www.google.com" to "3www6google3com". */ -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" @@ -275,10 +210,9 @@ index b233d1e..7ba0edf 100644 # include -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) @@ -288,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) { @@ -301,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) { @@ -310,22 +243,9 @@ index af45bff..4f59b21 100644 return; } -diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c -index ae34cfb..ffde2ad 100644 ---- a/scan/sane/hpaio.c -+++ b/scan/sane/hpaio.c -@@ -41,6 +41,7 @@ - #include "soap.h" - #include "soapht.h" - #include "marvell.h" -+#include "mdns.h" - #include "hpaio.h" - #include "ledm.h" - #include "sclpml.h" -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 #include @@ -334,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)) { @@ -347,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) { @@ -356,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)) { @@ -365,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) { @@ -378,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) { @@ -387,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) { @@ -400,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) { @@ -409,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) { @@ -418,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) { @@ -427,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) { @@ -445,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; } @@ -454,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) { @@ -463,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)) { @@ -472,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) { @@ -481,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)) { @@ -490,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 #include @@ -511,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) { @@ -524,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) { @@ -533,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) { @@ -542,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) { @@ -560,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) { @@ -569,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)) { @@ -578,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) { @@ -587,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)) { @@ -596,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)) { @@ -605,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) { @@ -618,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) { @@ -627,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) { @@ -636,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) { @@ -654,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) { @@ -663,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)) { @@ -672,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) { @@ -681,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)) { @@ -690,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)) { diff --git a/hplip-dialog-infinite-loop.patch b/hplip-dialog-infinite-loop.patch new file mode 100644 index 0000000..cfd635b --- /dev/null +++ b/hplip-dialog-infinite-loop.patch @@ -0,0 +1,25 @@ +diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py +index c23957a..48b248f 100644 +--- a/ui5/devmgr5.py ++++ b/ui5/devmgr5.py +@@ -2300,14 +2300,15 @@ class PasswordDialog(QDialog): + # XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + def showPasswordUI(prompt): ++ dlg = None ++ + try: + dlg = PasswordDialog(prompt, None) ++ except Exception as e: ++ log.error('Unable to open password dialog due following error:\n {}'.format(e)) + +- if dlg.exec_() == QDialog.Accepted: +- return (dlg.getUsername(), dlg.getPassword()) +- +- finally: +- pass ++ if dlg and dlg.exec_() == QDialog.Accepted: ++ return (dlg.getUsername(), dlg.getPassword()) + + return ("", "") + diff --git a/hplip-dist-removed.patch b/hplip-dist-removed.patch deleted file mode 100644 index fa7fb2c..0000000 --- a/hplip-dist-removed.patch +++ /dev/null @@ -1,56 +0,0 @@ -diff --git a/base/password.py b/base/password.py -index 45c6641..62d93ca 100644 ---- a/base/password.py -+++ b/base/password.py -@@ -78,10 +78,15 @@ def get_distro_name(): - os_name = None - try: - import platform -- os_name = platform.dist()[0] - except ImportError: - os_name = None - -+ try: -+ os_name = platform.dist()[0] -+ except AttributeError: -+ import distro -+ os_name = distro.linux_distribution()[0] -+ - if not os_name: - name = os.popen('lsb_release -i | cut -f 2') - os_name = name.read().strip() -@@ -140,7 +145,11 @@ class Password(object): - self.__authType = AUTH_TYPES[distro_name] - if distro_name == 'fedora': - import platform -- ver = int(platform.dist()[1]) -+ try: -+ ver = int(platform.dist()[1]) -+ except AttributeError: -+ import distro -+ ver = int(distro.linux_distribution()[1]) - if ver >= 28: - self.__authType = AUTH_TYPES['fedora28'] - except KeyError: -diff --git a/installer/core_install.py b/installer/core_install.py -index 9a3b5ac..af1348d 100644 ---- a/installer/core_install.py -+++ b/installer/core_install.py -@@ -640,8 +640,15 @@ class CoreInstall(object): - # Getting distro information using platform module - try: - import platform -- name = platform.dist()[0].lower() -- ver = platform.dist()[1] -+ try: -+ name = platform.dist()[0].lower() -+ ver = platform.dist()[1] -+ except AttributeError: -+ import distro -+ -+ name = distro.linux_distribution()[0].lower() -+ ver = distro.linux_distribution()[1] -+ - if not name: - found = False - log.debug("Not able to detect distro") diff --git a/hplip-error-print.patch b/hplip-error-print.patch index e4b3e5f..b7b1a6f 100644 --- a/hplip-error-print.patch +++ b/hplip-error-print.patch @@ -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("Error opening device:

%s

(%s)

") %(self.device_uri, QString(e[0]))) -+ FailureUI(self, self.__tr("Error opening device:

%s

(%s)

") %(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("An I/O error occurred.

Please check the USB connection to your printer and try again.

(%s)" % QString(e[0]))) -+ FailureUI(self, self.__tr("An I/O error occurred.

Please check the USB connection to your printer and try again.

(%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("Error opening device:

%s

(%s)

") %(self.device_uri, str(e[0]))) -+ FailureUI(self, self.__tr("Error opening device:

%s

(%s)

") %(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("An I/O error occurred.

Please check the USB connection to your printer and try again.

(%s)" % str(e[0]))) -+ FailureUI(self, self.__tr("An I/O error occurred.

Please check the USB connection to your printer and try again.

(%s)" % str(e.msg))) - - if self.dev is not None: - self.dev.close() diff --git a/hplip-fedora-gui.patch b/hplip-fedora-gui.patch new file mode 100644 index 0000000..499f4da --- /dev/null +++ b/hplip-fedora-gui.patch @@ -0,0 +1,31 @@ +diff --git a/base/utils.py b/base/utils.py +index d493b54..401dc41 100644 +--- a/base/utils.py ++++ b/base/utils.py +@@ -727,8 +727,8 @@ def canEnterGUIMode4(): # qt4 + except ImportError: + try: + import ui5.setupdialog +- except ImportError as e: +- log.warn(e) ++ except ImportError: ++ log.error("hplip-gui not installed. GUI not available.") + return False + + return True +@@ -746,6 +746,7 @@ def checkPyQtImport(): # qt3 + try: + import ui + except ImportError: ++ log.error("hplip-gui not installed. GUI not available.") + return False + + log.error("PyQt not installed. GUI not available. Exiting.") +@@ -800,6 +801,7 @@ def checkPyQtImport4(): + import ui5.setupdialog + except ImportError: + log.debug('GUI not available.') ++ log.error('hplip-gui not installed. GUI not available.') + return False + + return True diff --git a/hplip-find-driver.patch b/hplip-find-driver.patch new file mode 100644 index 0000000..f991967 --- /dev/null +++ b/hplip-find-driver.patch @@ -0,0 +1,163 @@ +diff --git a/prnt/cups.py b/prnt/cups.py +index a9f410a..3783a60 100644 +--- a/prnt/cups.py ++++ b/prnt/cups.py +@@ -489,78 +489,77 @@ def getPPDFile2(mq,model, ppds): # New PPD find + #Check if common ppd name is already given in models.dat(This is needed because in case of devices having more than one derivatives + #will have diffrent model name strings in device ID, because of which we don't get the common ppd name for search) + family_check=isfamilydrv(ppds) +- family_class=getFamilyClassName(model) ++ + model = models.normalizeModelName(model) +- if family_check==0: +- ppd_name = mq.get('ppd-name',0) +- else: +- ppd_name = mq.get('family-ppd',0) + +- if ppd_name == 0: +- stripped_model = stripModel2(model) +- else: +- stripped_model = stripModel2(ppd_name) ++ ppd_name = mq.get('{}'.format('family-ppd' if family_check else 'ppd-name'), 0) ++ ++ stripped_model = stripModel2(ppd_name) if ppd_name else stripModel2(model) ++ ++ wanted_model = getFamilyClassName(model) if family_check else stripped_model + + log.debug("Matching PPD list to model %s..." % stripped_model) + + matches = [] +- if family_check ==0 : +- for f in ppds: +- match = ppd_pat.match(f) +- if match is not None: +- if match.group(1) == stripped_model: +- log.debug("Found match: %s" % f) +- try: +- pdls = match.group(2).split('-') +- except AttributeError: +- pdls = [] +- if (prop.hpcups_build and 'hpijs' not in f) or \ +- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \ +- ('ps' in pdls) or ('pdf' in pdls): +- matches.append((f, [p for p in pdls if p and p != 'hpijs'])) +- else: +- for f in ppds: +- match = ppd_pat1.match(f) +- if match is not None: +- if match.group(1) == family_class: +- log.debug("Found match: %s" % f) +- try: +- pdls = match.group(2).split('-') +- except AttributeError: +- pdls = [] +- if (prop.hpcups_build and 'hpijs' not in f) or \ +- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \ +- ('ps' in pdls) or ('pdf' in pdls): +- matches.append((f, [p for p in pdls if p and p != 'hpijs'])) +- log.debug(matches) +- num_matches = len(matches) ++ for f in ppds: ++ # ignore foomatic and gutenprint drivers ++ if 'foomatic' in f or 'gutenprint' in f: ++ continue ++ ++ # see if driver type is in driver name ++ driver_types = [] ++ if 'hpcups' in f: ++ driver_types.append('hpcups') ++ if 'hpijs' in f: ++ driver_types.append('hpijs') ++ ++ ++ ppd_filename = f.rsplit('/', 1)[1].split('.')[0].replace('hp-', '') ++ ++ if not ppd_filename: ++ continue ++ ++ # we need to sanitize the end of filename - there can be a driver type (-hpijs, -hpcups), ++ # pdl name (-zjstream, -pdf, -ps etc.) or the device can just have '-' in their name ++ # (HP Photosmart Premium C309g-m). ++ # So if we don't know the name after '-', take it as part of device name. ++ # If we know them either like driver type of PDL, remove the string from ppd name ++ # so we can compare it with stripped model ++ pdl_candidates = [] ++ pdl_candidates = ppd_filename.split('-')[1:] ++ ++ pdls = [] ++ ppd_model = ppd_filename ++ ++ for pdl in pdl_candidates: ++ if pdl in ['hpijs', 'hpcups']: ++ ppd_model=ppd_model.replace('-{}'.format(pdl), '') ++ continue + +- if num_matches == 0: +- log.debug("No PPD found for model %s using new algorithm. Trying old algorithm..." % stripped_model) +- #Using Old algo, ignores the series keyword in ppd searching. +- matches2 = list(getPPDFile(stripModel(stripped_model), ppds).items()) +- log.debug(matches2) +- num_matches2 = len(matches2) +- if num_matches2: +- for f, d in matches2: +- match = ppd_pat.match(f) +- if match is not None: +- log.debug("Found match: %s" % f) +- try: +- pdls = match.group(2).split('-') +- except AttributeError: +- pdls = [] ++ if not models.PDL_TYPES.get(pdl): ++ log.debug('Unknown PDL named \'{}\' - can be a new PDL or ' ++ 'just a part of device name. Assume it is ' ++ 'a part of device name.'.format(pdl)) ++ else: ++ pdls.append(pdl) ++ ppd_model=ppd_model.replace('-{}'.format(pdl), '') ++ ++ if ppd_model != wanted_model and ppd_model != '{}_series'.format(wanted_model): ++ continue ++ ++ log.debug("Found match: %s" % f) + +- if (prop.hpcups_build and 'hpijs' not in f) or \ +- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \ +- ('ps' in pdls) or ('pdf' in pdls): +- matches.append((f, [p for p in pdls if p and p != 'hpijs'])) ++ if (prop.hpcups_build and 'hpijs' not in f) or \ ++ ((prop.hpijs_build and 'hpijs' in driver_types) or (prop.hpcups_build and 'hpijs' not in driver_types)) or \ ++ ('ps' in pdls) or ('pdf' in pdls): ++ matches.append((f, pdls, [d for d in driver_types if d and d != 'hpijs'])) + +- log.debug(matches) +- num_matches = len(matches) ++ ++ log.debug(matches) ++ num_matches = len(matches) + + if num_matches == 0: +- log.error("No PPD found for model %s using old algorithm." % stripModel(stripped_model)) ++ log.error("No PPD found for model %s." % stripModel(stripped_model)) + return None + + elif num_matches == 1: +@@ -570,7 +569,7 @@ def getPPDFile2(mq,model, ppds): # New PPD find + # > 1 + log.debug("%d matches found. Searching based on PDL: Host > PS,PDF > PCL/Other" % num_matches) + for p in [models.PDL_TYPE_HOST, models.PDL_TYPE_PS,models.PDL_TYPE_PDF, models.PDL_TYPE_PCL]: +- for f, pdl_list in matches: ++ for f, pdl_list, driver_list in matches: + for x in pdl_list: + # default to HOST-based PDLs, as newly supported PDLs will most likely be of this type + if models.PDL_TYPES.get(x, models.PDL_TYPE_HOST) == p: +@@ -579,8 +578,8 @@ def getPPDFile2(mq,model, ppds): # New PPD find + + log.debug("%d matches found. Searching based on Filters: HPCUPS > HPIJS" % num_matches) + for p in ["hpcups","hpijs"]: +- for f, pdl_list in matches: +- if p in f: ++ for f, pdl_list, driver_list in matches: ++ if p in driver_list: + log.debug("Selecting PPD: %s" % (f)) + return (f, '') + diff --git a/hplip-fix-Wreturn-type-warning.patch b/hplip-fix-Wreturn-type-warning.patch new file mode 100644 index 0000000..aa40e1a --- /dev/null +++ b/hplip-fix-Wreturn-type-warning.patch @@ -0,0 +1,100 @@ +--- 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_ + + extern void sane_hpaio_close(SANE_Handle handle) + { +- if (strcmp(*((char **)handle), "MARVELL") == 0) +- return marvell_close(handle); +- if (strcmp(*((char **)handle), "SOAP") == 0) +- return soap_close(handle); +- if (strcmp(*((char **)handle), "SOAPHT") == 0) +- return soapht_close(handle); +- if (strcmp(*((char **)handle), "LEDM") == 0) +- return ledm_close(handle); +- if (strcmp(*((char **)handle), "SCL-PML") == 0) +- return sclpml_close(handle); +- if (strcmp(*((char **)handle), "ESCL") == 0) +- return escl_close(handle); +- if (strcmp(*((char **)handle), "ORBLITE") == 0) +- return orblite_close(handle); ++ if (strcmp(*((char **)handle), "MARVELL") == 0) { ++ marvell_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SOAP") == 0) { ++ soap_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SOAPHT") == 0) { ++ soapht_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "LEDM") == 0) { ++ ledm_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SCL-PML") == 0) { ++ sclpml_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "ESCL") == 0) { ++ escl_close(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "ORBLITE") == 0) { ++ orblite_close(handle); ++ return; ++ } + } /* sane_hpaio_close() */ + + extern const SANE_Option_Descriptor * sane_hpaio_get_option_descriptor(SANE_Handle handle, SANE_Int option) +@@ -539,20 +553,34 @@ extern SANE_Status sane_hpaio_read(SANE_ + /* Note, sane_cancel is called normally not just during IO abort situations. */ + extern void sane_hpaio_cancel( SANE_Handle handle ) + { +- if (strcmp(*((char **)handle), "MARVELL") == 0) +- return marvell_cancel(handle); +- if (strcmp(*((char **)handle), "SOAP") == 0) +- return soap_cancel(handle); +- if (strcmp(*((char **)handle), "SOAPHT") == 0) +- return soapht_cancel(handle); +- if (strcmp(*((char **)handle), "LEDM") == 0) +- return ledm_cancel(handle); +- if (strcmp(*((char **)handle), "SCL-PML") == 0) +- return sclpml_cancel(handle); +- if (strcmp(*((char **)handle), "ESCL") == 0) +- return escl_cancel(handle); +- if (strcmp(*((char **)handle), "ORBLITE") == 0) +- return orblite_cancel(handle); ++ if (strcmp(*((char **)handle), "MARVELL") == 0) { ++ marvell_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SOAP") == 0) { ++ soap_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SOAPHT") == 0) { ++ soapht_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "LEDM") == 0) { ++ ledm_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "SCL-PML") == 0) { ++ sclpml_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "ESCL") == 0) { ++ escl_cancel(handle); ++ return; ++ } ++ if (strcmp(*((char **)handle), "ORBLITE") == 0) { ++ orblite_cancel(handle); ++ return; ++ } + } /* sane_hpaio_cancel() */ + + extern SANE_Status sane_hpaio_set_io_mode(SANE_Handle handle, SANE_Bool nonBlocking) diff --git a/hplip-fix-parsing-lpstat.patch b/hplip-fix-parsing-lpstat.patch new file mode 100644 index 0000000..d6028ab --- /dev/null +++ b/hplip-fix-parsing-lpstat.patch @@ -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 diff --git a/hplip-format-qdatetime.patch b/hplip-format-qdatetime.patch new file mode 100644 index 0000000..9517e65 --- /dev/null +++ b/hplip-format-qdatetime.patch @@ -0,0 +1,53 @@ +From 839a216f17ce17a5667eecd54de2a70b1383df2c Mon Sep 17 00:00:00 2001 +From: "FeRD (Frank Dana)" +Date: Wed, 5 Jan 2022 21:57:06 -0500 +Subject: [PATCH 1/2] Info dlg: Use QDateTime.toString() + +--- + ui5/infodialog.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ui5/infodialog.py b/ui5/infodialog.py +index 0de62fb..eaa846d 100644 +--- a/ui5/infodialog.py ++++ b/ui5/infodialog.py +@@ -186,7 +186,7 @@ class InfoDialog(QDialog, Ui_Dialog): + for row, h in enumerate(history): + dt = QDateTime() + dt.setTime_t(int(h.timedate)) +- dt = value_str(dt) ++ dt = value_str(dt.toString()) + + ess = device.queryString(h.event_code, 0) + +-- +2.33.1 + +From f6e7ab1542afe7fbcd2d29b6cb15b97484e3779c Mon Sep 17 00:00:00 2001 +From: "FeRD (Frank Dana)" +Date: Wed, 5 Jan 2022 21:56:39 -0500 +Subject: [PATCH 2/2] value_str: Handle QDateTime correctly + +--- + ui5/ui_utils.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/ui5/ui_utils.py b/ui5/ui_utils.py +index caba339..225ca1c 100644 +--- a/ui5/ui_utils.py ++++ b/ui5/ui_utils.py +@@ -105,7 +105,10 @@ def value_str(data): + if data is None: + return "" + try: +- if not PY3: ++ if PY3: ++ if isinstance(data, QDateTime): ++ data = data.toString() ++ else: + try: + data = data.toString() + except AttributeError as e: +-- +2.33.1 + diff --git a/hplip-gcc15-stdc23.patch b/hplip-gcc15-stdc23.patch new file mode 100644 index 0000000..a18f245 --- /dev/null +++ b/hplip-gcc15-stdc23.patch @@ -0,0 +1,13 @@ +diff --git a/scan/sane/ledmi.h b/scan/sane/ledmi.h +index a987c5d..f72847b 100644 +--- a/scan/sane/ledmi.h ++++ b/scan/sane/ledmi.h +@@ -162,7 +162,7 @@ struct ledm_session + int bb_open(struct ledm_session*); + int bb_close(struct ledm_session*); + int bb_get_parameters(struct ledm_session*, SANE_Parameters*, int); +-int bb_is_paper_in_adf(); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */ ++int bb_is_paper_in_adf(struct ledm_session*); /* 0 = no paper in adf, 1 = paper in adf, -1 = error */ + SANE_Status bb_start_scan(struct ledm_session*); + int bb_get_image_data(struct ledm_session*, int); + int bb_end_page(struct ledm_session*, int); diff --git a/hplip-gpgdir-perms.patch b/hplip-gpgdir-perms.patch new file mode 100644 index 0000000..51475de --- /dev/null +++ b/hplip-gpgdir-perms.patch @@ -0,0 +1,13 @@ +diff --git a/base/validation.py b/base/validation.py +index 96e65be..35f22eb 100644 +--- a/base/validation.py ++++ b/base/validation.py +@@ -58,7 +58,7 @@ class GPG_Verification(DigiSign_Verification): + + if not os.path.exists(self.__gpg_dir): + try: +- os.mkdir(self.__gpg_dir, 0o755) ++ os.mkdir(self.__gpg_dir, 0o700) + except OSError: + log.error("Failed to create %s" % self.__gpg_dir) + self.__change_owner() diff --git a/hplip-gui-close-trace.patch b/hplip-gui-close-trace.patch new file mode 100644 index 0000000..39d8f01 --- /dev/null +++ b/hplip-gui-close-trace.patch @@ -0,0 +1,24 @@ +diff --git a/ui5/devmgr5.py b/ui5/devmgr5.py +index 79f8fa8..28a77b3 100644 +--- a/ui5/devmgr5.py ++++ b/ui5/devmgr5.py +@@ -816,6 +816,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow): + + + def updateWindowTitle(self): ++ if self.cur_device is None or self.cur_device_uri is None: ++ return ++ + if self.cur_device.device_type == DEVICE_TYPE_FAX: + self.setWindowTitle(self.__tr("HP Device Manager - %s (Fax)"%self.cur_device.model_ui)) + else: +@@ -1876,6 +1879,9 @@ class DevMgr5(Ui_MainWindow_Derived, Ui_MainWindow, QMainWindow): + + + def updatePrintControlTab(self): ++ if self.cur_device is None or self.cur_printer is None: ++ return ++ + if self.cur_device.device_type == DEVICE_TYPE_PRINTER: + self.PrintControlPrinterNameLabel.setText(self.__tr("Printer Name:")) + self.groupBox.setTitle(QApplication.translate("MainWindow", "Printer Queue Control", None)) diff --git a/hplip-hpaio-gcc14.patch b/hplip-hpaio-gcc14.patch new file mode 100644 index 0000000..f7d195e --- /dev/null +++ b/hplip-hpaio-gcc14.patch @@ -0,0 +1,114 @@ +diff --git a/scan/sane/hpaio.c b/scan/sane/hpaio.c +index 57d1dde..3475929 100644 +--- a/scan/sane/hpaio.c ++++ b/scan/sane/hpaio.c +@@ -379,7 +379,7 @@ extern SANE_Status sane_hpaio_get_devices(const SANE_Device ***deviceList, SANE_ + ResetDeviceList(&DeviceList); + DevDiscovery(localOnly); + *deviceList = (const SANE_Device **)DeviceList; +- SANE_Device*** devList; ++ const SANE_Device*** devList; + orblite_get_devices(devList, localOnly); + + return SANE_STATUS_GOOD; +diff --git a/scan/sane/orblite.c b/scan/sane/orblite.c +index 2eb7aba..4eaa468 100644 +--- a/scan/sane/orblite.c ++++ b/scan/sane/orblite.c +@@ -64,28 +64,28 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_SCAN_TL_X, SANE_TITLE_SCAN_TL_X, SANE_DESC_SCAN_TL_X, // name, title, desc + SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeLeft // constraint_type, constraint ++ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeLeft // constraint_type, constraint + }, + + { + SANE_NAME_SCAN_TL_Y, SANE_TITLE_SCAN_TL_Y, SANE_DESC_SCAN_TL_Y, // name, title, desc + SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeTop // constraint_type, constraint ++ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeTop // constraint_type, constraint + }, + + { + SANE_NAME_SCAN_BR_X, SANE_TITLE_SCAN_BR_X, SANE_DESC_SCAN_BR_X, // name, title, desc + SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeRight // constraint_type, constraint ++ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeRight // constraint_type, constraint + }, + + { + SANE_NAME_SCAN_BR_Y, SANE_TITLE_SCAN_BR_Y, SANE_DESC_SCAN_BR_Y, // name, title, desc + SANE_TYPE_FIXED, SANE_UNIT_MM, sizeof(SANE_Fixed),// type, unit, size + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_RANGE, (SANE_Char**)&SANE_rangeBottom // constraint_type, constraint ++ SANE_CONSTRAINT_RANGE, (const SANE_Char**)&SANE_rangeBottom // constraint_type, constraint + }, + + // optResolution, // resolution group +@@ -93,7 +93,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_SCAN_RESOLUTION, SANE_TITLE_SCAN_RESOLUTION, SANE_DESC_SCAN_RESOLUTION, // name, title, desc + SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size, + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint ++ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint + }, + + // optMode, // color/depth group +@@ -101,7 +101,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_SCAN_MODE, SANE_TITLE_SCAN_MODE, SANE_DESC_SCAN_MODE, // name, title, desc + SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size, + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_modes // constraint type, constraint ++ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_modes // constraint type, constraint + }, + + // optSource, +@@ -109,7 +109,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_SCAN_SOURCE, SANE_TITLE_SCAN_SOURCE, SANE_DESC_SCAN_SOURCE, // name, title, desc + SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size, + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_sources // constraint type, constraint ++ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_sources // constraint type, constraint + }, + + // optPaperSize, +@@ -117,7 +117,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc + SANE_TYPE_STRING, SANE_UNIT_NONE, 256, // type, unit, size, + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_STRING_LIST, (SANE_Char**)SANE_paper_sizes // constraint type, constraint ++ SANE_CONSTRAINT_STRING_LIST, (const SANE_Char**)SANE_paper_sizes // constraint type, constraint + }, + + // optPaperSize, +@@ -125,7 +125,7 @@ SANE_Option_Descriptor DefaultOrbOptions[] = { + SANE_NAME_PAPER_SIZE, SANE_TITLE_PAPER_SIZE, SANE_DESC_PAPER_SIZE, // name, title, desc + SANE_TYPE_INT, SANE_UNIT_DPI, sizeof(SANE_Word), // type, unit, size, + SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT, // cap(ability) +- SANE_CONSTRAINT_WORD_LIST, (SANE_Char**)SANE_resolutions // constraint type, constraint ++ SANE_CONSTRAINT_WORD_LIST, (const SANE_Char**)SANE_resolutions // constraint type, constraint + }, + #ifdef NOTDEF + // default template +@@ -274,6 +274,7 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle) + SANE_Auth_Callback authorize; + const SANE_Device *** device_list; + SANE_Bool local_only; ++ void * temp_handle; + + + // Allocate handle, set all handle values to zero +@@ -305,7 +306,9 @@ orblite_open (SANE_String_Const devicename, SANE_Handle * handle) + if (stat != SANE_STATUS_GOOD) + return stat; + +- stat = g_handle->bb_orblite_open(devicename, &g_handle); ++ temp_handle = g_handle; ++ stat = g_handle->bb_orblite_open(devicename, &temp_handle); ++ g_handle = temp_handle; + if (stat == SANE_STATUS_GOOD) + *handle = g_handle; + diff --git a/hplip-hpfax-importerror-print.patch b/hplip-hpfax-importerror-print.patch index 8d487c4..3fdafda 100644 --- a/hplip-hpfax-importerror-print.patch +++ b/hplip-hpfax-importerror-print.patch @@ -1,16 +1,10 @@ -commit cdf5cb36e5d5a86f6a690c5861666cdc2da70593 -Author: Tomas Korbar -Date: Wed Sep 19 15:33:03 2018 +0200 - - Fix TypeError in hpfax - diff --git a/fax/backend/hpfax.py b/fax/backend/hpfax.py -index 9560e84..bc0912a 100755 +index a63051d..3e187c9 100755 --- a/fax/backend/hpfax.py +++ b/fax/backend/hpfax.py @@ -89,7 +89,7 @@ try: from base import utils - from prnt import cups + #from prnt import cups except ImportError as e: - bug("Error importing HPLIP modules: %s\n" % (pid, e)) + bug("Error importing HPLIP modules: %s\n" % (e)) diff --git a/hplip-hpfirmware-timeout.patch b/hplip-hpfirmware-timeout.patch new file mode 100644 index 0000000..77db559 --- /dev/null +++ b/hplip-hpfirmware-timeout.patch @@ -0,0 +1,24 @@ +diff --git a/config_usb_printer.py b/config_usb_printer.py +index 946a2d4..8db097e 100755 +--- a/config_usb_printer.py ++++ b/config_usb_printer.py +@@ -28,6 +28,7 @@ __doc__ = "Udev invokes this tool. Tool detects the plugin, Smart Install (C/DVD + # Std Lib + import sys + import os ++import time + + # Local + from base.g import * +@@ -181,9 +182,10 @@ try: + # ******************************* RUNNING FIRMWARE DOWNLOAD TO DEVICE FOR SUPPORTED PRINTER'S + fw_download_req = mq.get('fw-download', False) + if fw_download_req: +- fw_cmd = "hp-firmware -y3 -s %s"%param ++ fw_cmd = "hp-firmware -n -y3 -s %s"%param + log.info(fw_cmd) + fw_sts, fw_out = utils.run(fw_cmd) ++ time.sleep(5) + if fw_sts == 0: + log.debug("Firmware downloaded to %s "%device_uri) + else: diff --git a/hplip-hpsetup-noscanjets.patch b/hplip-hpsetup-noscanjets.patch new file mode 100644 index 0000000..52a4690 --- /dev/null +++ b/hplip-hpsetup-noscanjets.patch @@ -0,0 +1,46 @@ +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 + ++ norm_model = models.normalizeModelName(model).lower() ++ ++ # get out if the found model is standalone scanner, hp-setup is printer/fax setup tool ++ if 'scanjet' in norm_model: ++ log.error('The device {} is a standalone scanner. ' ++ 'hp-setup is a printer/MFD setup tool, ' ++ 'not scanner installation tool. '.format(model)) ++ log.info(log.bold('Scanners do not need a installation, but they may ' ++ 'require a binary plugin (install by \'hp-plugin -i\').')) ++ clean_exit(1) ++ + # ******************************* PLUGIN + +- norm_model = models.normalizeModelName(model).lower() + plugin = mq.get('plugin', PLUGIN_NONE) + + if ignore_plugin_check is False and plugin > PLUGIN_NONE: +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, ++ self.__tr('The device {} is a standalone ' ++ 'scanner.

\'hp-setup\' is a tool ' ++ 'for installing printers and multifunction ' ++ 'devices. Scanners supported by HPLIP ' ++ 'work out-of-the-box after HPLIP installation, ' ++ 'or they may require a binary plugin, which you ' ++ 'can install by \'hp-plugin -i\'.

'.format(model))) ++ self.displayPage(PAGE_DEVICES) ++ return ++ + self.showAddPrinterPage() + + elif p == PAGE_ADD_PRINTER: diff --git a/hplip-keyserver.patch b/hplip-keyserver.patch index fb69217..c525503 100644 --- a/hplip-keyserver.patch +++ b/hplip-keyserver.patch @@ -1,12 +1,12 @@ -diff -up hplip-3.18.6/base/validation.py.keyserver hplip-3.18.6/base/validation.py ---- hplip-3.18.6/base/validation.py.keyserver 2018-11-13 17:35:38.085322569 +0100 -+++ hplip-3.18.6/base/validation.py 2018-11-13 17:36:18.026991983 +0100 -@@ -42,7 +42,7 @@ class DigiSign_Verification(object): +diff --git a/base/tui.py b/base/tui.py +index 99bda7b..0f90f92 100644 +--- a/base/tui.py ++++ b/base/tui.py +@@ -241,6 +241,7 @@ class ProgressMeter(object): + sys.stdout.write(y) + sys.stdout.flush() ++ sys.stdout.write('\n') + self.prev_length = len(y) + self.spinner_pos = (self.spinner_pos + 1) % 8 - class GPG_Verification(DigiSign_Verification): -- def __init__(self, pgp_site = 'pgp.mit.edu', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): -+ def __init__(self, pgp_site = 'sks-keyservers.net', key = 0x4ABA2F66DBD5A95894910E0673D770CDA59047B9): - self.__pgp_site = pgp_site - self.__key = key - self.__gpg = utils.which('gpg',True) diff --git a/hplip-lineart.patch b/hplip-lineart.patch deleted file mode 100644 index 1580086..0000000 --- a/hplip-lineart.patch +++ /dev/null @@ -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) diff --git a/hplip-locale-format.patch b/hplip-locale-format.patch new file mode 100644 index 0000000..32fba1e --- /dev/null +++ b/hplip-locale-format.patch @@ -0,0 +1,13 @@ +diff --git a/base/utils.py b/base/utils.py +index e2de550..55848b8 100644 +--- a/base/utils.py ++++ b/base/utils.py +@@ -474,7 +474,7 @@ def sort_dict_by_value(d): + + + def commafy(val): +- return locale.format("%s", val, grouping=True) ++ return locale.format_string("%s", val, grouping=True) + + + def format_bytes(s, show_bytes=False): diff --git a/hplip-logdir.patch b/hplip-logdir.patch index e18bb5a..702d328 100644 --- a/hplip-logdir.patch +++ b/hplip-logdir.patch @@ -1,18 +1,18 @@ -diff -up hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp.logdir hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp ---- hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp.logdir 2019-01-08 12:31:15.346315031 +0100 -+++ hplip-3.18.12/prnt/hpcups/HPCupsFilter.cpp 2019-01-08 12:47:42.314131260 +0100 -@@ -643,7 +643,7 @@ int HPCupsFilter::processRasterData(cups +diff -up hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp.logdir hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp +--- hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp.logdir 2022-01-12 11:27:25.509348511 +0100 ++++ hplip-3.21.12/prnt/hpcups/HPCupsFilter.cpp 2022-01-12 11:29:11.507661838 +0100 +@@ -669,7 +669,7 @@ int HPCupsFilter::processRasterData(cups char hpPreProcessedRasterFile[MAX_FILE_PATH_LEN]; //temp file needed to store raster data with swaped pages. - sprintf(hpPreProcessedRasterFile, "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name); + snprintf(hpPreProcessedRasterFile, sizeof (hpPreProcessedRasterFile), "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name); - image_processor_t* imageProcessor = imageProcessorCreate(); - - while (cupsRasterReadHeader2(cups_raster, &cups_header)) -diff -up hplip-3.18.12/prnt/hpcups/SystemServices.cpp.logdir hplip-3.18.12/prnt/hpcups/SystemServices.cpp ---- hplip-3.18.12/prnt/hpcups/SystemServices.cpp.logdir 2018-12-03 08:07:13.000000000 +0100 -+++ hplip-3.18.12/prnt/hpcups/SystemServices.cpp 2019-01-08 12:31:15.346315031 +0100 + #ifndef DISABLE_IMAGEPROCESSOR + image_processor_t* imageProcessor=NULL; + IMAGE_PROCESSOR_ERROR result; +diff -up hplip-3.21.12/prnt/hpcups/SystemServices.cpp.logdir hplip-3.21.12/prnt/hpcups/SystemServices.cpp +--- hplip-3.21.12/prnt/hpcups/SystemServices.cpp.logdir 2021-12-13 10:07:36.000000000 +0100 ++++ hplip-3.21.12/prnt/hpcups/SystemServices.cpp 2022-01-12 11:27:25.509348511 +0100 @@ -38,7 +38,7 @@ SystemServices::SystemServices(int iLogL if (iLogLevel & SAVE_OUT_FILE) { diff --git a/hplip-missing-drivers.patch b/hplip-missing-drivers.patch index 967a62e..bb9b759 100644 --- a/hplip-missing-drivers.patch +++ b/hplip-missing-drivers.patch @@ -1,63 +1,25 @@ -diff --git a/Makefile.in b/Makefile.in -index 57b2812..250e2dc 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -1542,6 +1542,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-designjet_z6810ps_42in-ps.ppd.gz \ - ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \ - ppd/hpcups/hp-laserjet_cp1025.ppd.gz \ - ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \ -+ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \ - ppd/hpcups/hp-laserjet_m1005.ppd.gz \ - ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \ - ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \ -@@ -1655,6 +1656,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-designjet_z6810ps_42in-ps.ppd.gz \ - ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \ - ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \ - ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \ -+ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \ - ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \ - ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \ - ppd/hpcups/hp-neverstop_laser_100x.ppd.gz \ -@@ -3895,6 +3897,7 @@ dist_unrel_DATA = - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \ -+@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m1005.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \ -@@ -4007,6 +4010,7 @@ dist_unrel_DATA = - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \ -+@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \ - @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \ -diff --git a/cups_drv.inc b/cups_drv.inc -index 3863c52..50c570d 100644 ---- a/cups_drv.inc -+++ b/cups_drv.inc -@@ -398,6 +398,7 @@ cups_ppd_printers = \ +diff -up hplip-3.22.2/cups_drv.inc.missing-drivers hplip-3.22.2/cups_drv.inc +--- hplip-3.22.2/cups_drv.inc.missing-drivers 2022-02-23 08:42:29.000000000 +0100 ++++ hplip-3.22.2/cups_drv.inc 2022-03-10 09:11:00.337315604 +0100 +@@ -411,6 +411,7 @@ cups_ppd_printers = \ ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \ ppd/hpcups/hp-laserjet_cp1025.ppd.gz \ ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \ + ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \ ppd/hpcups/hp-laserjet_m1005.ppd.gz \ ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \ - ppd/hpcups/hp-laserjet_m1120_mfp.ppd.gz \ -@@ -510,6 +511,7 @@ cups_ppd_printers = \ + ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \ +@@ -527,6 +528,7 @@ cups_ppd_printers = \ ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \ ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \ ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \ + ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \ ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \ - ppd/hpcups/hp-mopier_240-pcl3.ppd.gz \ - ppd/hpcups/hp-mopier_320-pcl3.ppd.gz \ -diff --git a/data/models/models.dat b/data/models/models.dat -index 9dfcf3d..9da0acd 100644 ---- a/data/models/models.dat -+++ b/data/models/models.dat + ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \ + ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \ +diff -up hplip-3.22.2/data/models/models.dat.missing-drivers hplip-3.22.2/data/models/models.dat +--- hplip-3.22.2/data/models/models.dat.missing-drivers 2022-03-10 09:10:13.601066235 +0100 ++++ hplip-3.22.2/data/models/models.dat 2022-03-10 09:10:13.622066347 +0100 @@ -2104,7 +2104,7 @@ usb-pid=411 usb-vid=3f0 wifi-config=0 @@ -461,7 +423,7 @@ index 9dfcf3d..9da0acd 100644 [officejet_100_mobile_l411] align-type=-1 clean-type=1 -@@ -17865,6 +18229,58 @@ usb-pid=2c17 +@@ -17867,6 +18231,58 @@ usb-pid=2c17 usb-vid=3f0 wifi-config=0 @@ -520,7 +482,7 @@ index 9dfcf3d..9da0acd 100644 [hp_laserjet_cp1025nw] align-type=0 clean-type=0 -@@ -18466,6 +18882,49 @@ usb-pid=3011 +@@ -18468,6 +18884,49 @@ usb-pid=3011 usb-vid=3f0 wifi-config=0 @@ -570,15 +532,48 @@ index 9dfcf3d..9da0acd 100644 [hp_laserjet_professional_p1102] align-type=0 clean-type=0 -diff --git a/prnt/drv/hpcups.drv.in b/prnt/drv/hpcups.drv.in -index 335b3da..d7a1872 100644 ---- a/prnt/drv/hpcups.drv.in -+++ b/prnt/drv/hpcups.drv.in -@@ -22258,6 +22258,14 @@ Group "RLT/HP Real Life Technologies" - Attribute "Product" "" "(HP LaserJet Professional p1102 Printer)" +diff -up hplip-3.22.2/Makefile.in.missing-drivers hplip-3.22.2/Makefile.in +--- hplip-3.22.2/Makefile.in.missing-drivers 2022-02-23 08:42:31.000000000 +0100 ++++ hplip-3.22.2/Makefile.in 2022-03-10 09:11:45.915558795 +0100 +@@ -1613,6 +1613,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase + ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \ + ppd/hpcups/hp-laserjet_cp1025.ppd.gz \ + ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \ ++ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \ + ppd/hpcups/hp-laserjet_m1005.ppd.gz \ + ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \ + ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \ +@@ -1729,6 +1730,7 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-lase + ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \ + ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \ + ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \ ++ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \ + ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \ + ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \ + ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \ +@@ -4090,6 +4092,7 @@ dist_unrel_DATA = + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cm1418fnw-pcl3.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp1025nw.ppd.gz \ ++@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_cp_1025nw.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m1005.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m101-m106.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_m109-m112.ppd.gz \ +@@ -4206,6 +4209,7 @@ dist_unrel_DATA = + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1607dn.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1608dn.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1609dn.ppd.gz \ ++@HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p1102w.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_professional_p_1102w.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_tank_1020.ppd.gz \ + @HPLIP_CLASS_DRIVER_FALSE@ ppd/hpcups/hp-laserjet_tank_150x.ppd.gz \ +diff -up hplip-3.22.2/prnt/drv/hpcups.drv.in.missing-drivers hplip-3.22.2/prnt/drv/hpcups.drv.in +--- hplip-3.22.2/prnt/drv/hpcups.drv.in.missing-drivers 2022-03-10 09:10:13.554065984 +0100 ++++ hplip-3.22.2/prnt/drv/hpcups.drv.in 2022-03-10 09:10:13.629066384 +0100 +@@ -22693,6 +22693,14 @@ Group "RLT/HP Real Life Technologies" Attribute "Product" "" "(HP LaserJet Professional p1102s Printer)" } -+ { + { + ModelName "HP LaserJet Professional p1102w" + Attribute "NickName" "" "HP LaserJet Professional p1102w, hpcups $Version, requires proprietary plugin" + Attribute "ShortNickName" "" "HP LaserJet Professional p1102w hpijs" @@ -586,10 +581,11 @@ index 335b3da..d7a1872 100644 + PCFileName "hp-laserjet_professional_p1102w.ppd" + Attribute "Product" "" "(HP LaserJet Professional p1102w Printer)" + } - { ++ { ModelName "HP LaserJet Professional p1106" - Attribute "NickName" "" "HP LaserJet Professional p1106, hpcups $Version, requires proprietary plugin" -@@ -22692,6 +22700,14 @@ Group "RLT/HP Real Life Technologies" + Attribute "NickName" "" "HP LaserJet Professional p1106, hpcups $Version" + Attribute "ShortNickName" "" "HP LJ Pro p1106 hpijs" +@@ -23126,6 +23134,14 @@ Group "RLT/HP Real Life Technologies" PCFileName "hp-laserjet_cp1025nw.ppd" Attribute "Product" "" "(HP LaserJet Pro cp1025nw Color Printer Series)" } diff --git a/hplip-missing-links.patch b/hplip-missing-links.patch index 3e19877..0deab1f 100644 --- a/hplip-missing-links.patch +++ b/hplip-missing-links.patch @@ -1,9 +1,8 @@ -diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py -index 4d7c1b8..1af8d85 100755 ---- a/installer/pluginhandler.py -+++ b/installer/pluginhandler.py -@@ -164,7 +164,7 @@ class PluginHandle(object): - for src, trg, link in copies: +diff -up hplip-3.21.12/installer/pluginhandler.py.missing-links hplip-3.21.12/installer/pluginhandler.py +--- hplip-3.21.12/installer/pluginhandler.py.missing-links 2022-01-12 16:55:39.761934879 +0100 ++++ hplip-3.21.12/installer/pluginhandler.py 2022-01-12 17:22:33.367435334 +0100 +@@ -167,7 +167,7 @@ class PluginHandle(object): + continue if link != "": if not utils.check_library(link): - self.__plugin_state = PLUGIN_FILES_CORRUPTED diff --git a/hplip-model-mismatch.patch b/hplip-model-mismatch.patch new file mode 100644 index 0000000..1dbe3c0 --- /dev/null +++ b/hplip-model-mismatch.patch @@ -0,0 +1,64 @@ +diff --git a/io/hpmud/jd.c b/io/hpmud/jd.c +index 20df27a..7ed4918 100644 +--- a/io/hpmud/jd.c ++++ b/io/hpmud/jd.c +@@ -208,7 +208,22 @@ enum HPMUD_RESULT __attribute__ ((visibility ("hidden"))) jd_open(mud_device *pd + { + /* Make sure uri model matches device id model. */ + hpmud_get_uri_model(pd->uri, uri_model, sizeof(uri_model)); ++ ++ /* remove possible hp_ string */ ++ if (strncasecmp(uri_model, "HP_", 3) == 0) ++ { ++ memmove(uri_model, uri_model + 3, 127); ++ uri_model[127] = '\0'; ++ } ++ + hpmud_get_model(pd->id, model, sizeof(model)); ++ /* remove possible hp_ string */ ++ if (strncasecmp(model, "HP_", 3) == 0) ++ { ++ memmove(model, model + 3, 127); ++ model[127] = '\0'; ++ } ++ + if (strcasecmp(uri_model, model) != 0) + { + stat = HPMUD_R_INVALID_URI; /* different device plugged in */ +diff --git a/io/hpmud/model.c b/io/hpmud/model.c +index d546ec1..adb3d87 100644 +--- a/io/hpmud/model.c ++++ b/io/hpmud/model.c +@@ -407,7 +407,10 @@ static int ParseFile(char *datFile, char *model, char *attr, int attrSize, int * + char rcbuf[255]; + char section[128]; + char file[128]; +- int found=0, n; ++ int found=0; ++ size_t n; ++ ++ size_t model_len = strlen(model); + + if ((fp = fopen(datFile, "r")) == NULL) + goto bugout; +@@ -422,10 +425,17 @@ static int ParseFile(char *datFile, char *model, char *attr, int attrSize, int * + strncpy(section, rcbuf+1, sizeof(section)); /* found new section */ + n = strlen(section); + section[n-2]=0; /* remove ']' and CR */ ++ n -= 2; + if (strcasecmp(model, section) == 0 || +- (section[0] == 'h' && section[1] == 'p' && +- section[2] == '_' && +- strcasecmp(model, section + 3) == 0)) ++ (section[0] == 'h' && ++ section[1] == 'p' && ++ section[2] == '_' && ++ strcasecmp(model, section + 3) == 0) || ++ (n > model_len && ++ strncasecmp(section, model, model_len) == 0 && ++ strncasecmp(section + model_len, "_series", strlen("_series")) == 0 ++ ) ++ ) + { + /* Found model match. */ + *bytes_read = ResolveAttributes(fp, attr, attrSize); diff --git a/hplip-no-libhpmud-libm-warnings.patch b/hplip-no-libhpmud-libm-warnings.patch new file mode 100644 index 0000000..160b70e --- /dev/null +++ b/hplip-no-libhpmud-libm-warnings.patch @@ -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) + { diff --git a/hplip-no-urlopener.patch b/hplip-no-urlopener.patch new file mode 100644 index 0000000..903fbbc --- /dev/null +++ b/hplip-no-urlopener.patch @@ -0,0 +1,79 @@ +diff --git a/base/device.py b/base/device.py +index 2fdb29c..ca0d97e 100644 +--- a/base/device.py ++++ b/base/device.py +@@ -2526,9 +2526,9 @@ Content-length: %d\r + data = None + + log.debug("Opening: %s" % url2) +- opener = LocalOpener({}) ++ opener = LocalOpener() + try: +- f = opener.open(url2, data) ++ f = opener.open_hp(url2, data) + + except Error: + log.error("Status read failed: %s" % url2) +@@ -2548,7 +2548,7 @@ Content-length: %d\r + try: + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpenerEWS_LEDM({}) ++ opener = LocalOpenerEWS_LEDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2563,7 +2563,7 @@ Content-length: %d\r + try: + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpener_LEDM({}) ++ opener = LocalOpener_LEDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2580,7 +2580,7 @@ Content-length: %d\r + url="/cdm/supply/v1/suppliesPublic" + url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url) + data = self +- opener = LocalOpener_CDM({}) ++ opener = LocalOpener_CDM() + try: + if footer: + return opener.open_hp(url2, data, footer) +@@ -2688,7 +2688,7 @@ Content-length: %d\r + + + # URLs: hp:/usb/HP_LaserJet_3050?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener(urllib_request.URLopener): ++class LocalOpener(): + def open_hp(self, url, dev): + log.debug("open_hp(%s)" % url) + +@@ -2718,7 +2718,7 @@ class LocalOpener(urllib_request.URLopener): + return response#.fp + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpenerEWS_LEDM(urllib_request.URLopener): ++class LocalOpenerEWS_LEDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + +@@ -2744,7 +2744,7 @@ class LocalOpenerEWS_LEDM(urllib_request.URLopener): + + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener_LEDM(urllib_request.URLopener): ++class LocalOpener_LEDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + +@@ -2771,7 +2771,7 @@ class LocalOpener_LEDM(urllib_request.URLopener): + + + # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml +-class LocalOpener_CDM(urllib_request.URLopener): ++class LocalOpener_CDM(): + def open_hp(self, url, dev, foot=""): + log.debug("open_hp(%s)" % url) + match_obj = http_pat_url.search(url) diff --git a/hplip-noernie.patch b/hplip-noernie.patch index 4ac83b4..47bb9d0 100644 --- a/hplip-noernie.patch +++ b/hplip-noernie.patch @@ -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; diff --git a/hplip-pcardext-disable.patch b/hplip-pcardext-disable.patch new file mode 100644 index 0000000..158379d --- /dev/null +++ b/hplip-pcardext-disable.patch @@ -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 diff --git a/hplip-pillow-version.patch b/hplip-pillow-version.patch deleted file mode 100644 index 9e2924b..0000000 --- a/hplip-pillow-version.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/installer/dcheck.py b/installer/dcheck.py -index 38bb76c..3d0624e 100644 ---- a/installer/dcheck.py -+++ b/installer/dcheck.py -@@ -370,7 +370,7 @@ def get_pil_version(): - except ImportError: - return '-' - else: -- return Image.VERSION -+ return Image.PILLOW_VERSION - - def get_libpthread_version(): - try: diff --git a/hplip-plugin-curl.patch b/hplip-plugin-curl.patch new file mode 100644 index 0000000..380ce9b --- /dev/null +++ b/hplip-plugin-curl.patch @@ -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: diff --git a/hplip-plugin-script.patch b/hplip-plugin-script.patch new file mode 100644 index 0000000..9b3c196 --- /dev/null +++ b/hplip-plugin-script.patch @@ -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 diff --git a/hplip-plugin-stdout.patch b/hplip-plugin-stdout.patch new file mode 100644 index 0000000..92f8016 --- /dev/null +++ b/hplip-plugin-stdout.patch @@ -0,0 +1,41 @@ +diff --git a/base/os_utils.py b/base/os_utils.py +index 82a8b42..d918822 100644 +--- a/base/os_utils.py ++++ b/base/os_utils.py +@@ -26,6 +26,7 @@ import locale + import stat + import subprocess + import shlex ++import sys + + #Local + from . import logger +@@ -37,17 +38,22 @@ def execute(cmd): + try: + # Use shlex.split to safely split the command into arguments + args = shlex.split(cmd) +- process = subprocess.Popen(args,stdout=subprocess.PIPE, stderr=subprocess.PIPE) ++ process = subprocess.Popen(args,stdout=sys.stdout, stderr=sys.stderr, stdin=sys.stdin) + process.wait() + stdout, stderr = process.communicate() +- log.debug(f"Command executed: {cmd}\n{stdout.decode()}") ++ ++ log.debug(f"Command executed: {cmd}{f'\n{stdout.decode()}' if stdout else ''}") ++ + if process.returncode != 0: +- error_message = f"Command failed with return code {process.returncode}: {cmd}\n{stderr.decode()}" +- log.error(error_message) ++ log.error(f"Command failed with return code" \ ++ f"{process.returncode}: {cmd}" \ ++ f"{f'\n{stderr.decode()}' if stderr else ''}") ++ + return process.returncode + except subprocess.CalledProcessError as e: +- error_message = f"Command failed with return code {e.returncode}: {cmd}\n{e.stderr.decode()}" +- log.error(error_message) ++ log.error(f"Command failed with return code" \ ++ f"{e.returncode}: {cmd}" \ ++ f"{f'\n{e.stderr.decode()}' if e.stderr else ''}") + return e.returncode + except Exception as e: + log.error(f"Error executing command: {cmd}\n{str(e)}") diff --git a/hplip-plugin-udevissues.patch b/hplip-plugin-udevissues.patch new file mode 100644 index 0000000..3a35c6b --- /dev/null +++ b/hplip-plugin-udevissues.patch @@ -0,0 +1,26 @@ +diff --git a/installer/pluginhandler.py b/installer/pluginhandler.py +index 1af8d85..5c498ab 100755 +--- a/installer/pluginhandler.py ++++ b/installer/pluginhandler.py +@@ -403,7 +403,20 @@ class PluginHandle(object): + log.error("Target file %s does not exist. File copy failed." % trg) + continue + else: +- os.chmod(trg, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH) ++ if trg == '/etc/udev/rules.d/S99-2000S1.rules' or \ ++ trg == '/etc/udev/rules.d/40-libsane.rules': ++ os.chmod(trg, 0o644) ++ with open(trg, 'r') as udev_f: ++ content = udev_f.read() ++ ++ content = content.replace('libsane_rules_end', 'libsane_usb_rules_end') ++ content = content.replace('GROUP="scanner", ', '') ++ ++ with open(trg, 'w') as udev_f: ++ udev_f.write(content) ++ ++ else: ++ os.chmod(trg, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH) + + if link: + if os.path.exists(link): diff --git a/hplip-pserror-c99.patch b/hplip-pserror-c99.patch new file mode 100644 index 0000000..747af3a --- /dev/null +++ b/hplip-pserror-c99.patch @@ -0,0 +1,17 @@ +prnt/pserror.c: Replace an implicit int with an explicit int + +Submitted upstream: + +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 */ + diff --git a/hplip-pstotiff-is-rubbish.patch b/hplip-pstotiff-is-rubbish.patch index 014e2cf..901e6a2 100644 --- a/hplip-pstotiff-is-rubbish.patch +++ b/hplip-pstotiff-is-rubbish.patch @@ -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" diff --git a/hplip-rebase.sh b/hplip-rebase.sh deleted file mode 100755 index f33edca..0000000 --- a/hplip-rebase.sh +++ /dev/null @@ -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 diff --git a/hplip-repack.sh b/hplip-repack.sh new file mode 100755 index 0000000..a67e7ee --- /dev/null +++ b/hplip-repack.sh @@ -0,0 +1,32 @@ +#!/usr/bin/bash + + +VERSION=$1 + +if [ "${VERSION:="*"}" == "*" ] +then + echo "Define a version of hplip as an argument." + exit 1 +fi + +# extract the original tarball +tar -xaf hplip-$VERSION.tar.gz || 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 diff --git a/hplip-revert-plugins.patch b/hplip-revert-plugins.patch new file mode 100644 index 0000000..823fb14 --- /dev/null +++ b/hplip-revert-plugins.patch @@ -0,0 +1,1178 @@ +diff -up hplip-3.20.9/data/models/models.dat.revert-plugins hplip-3.20.9/data/models/models.dat +--- hplip-3.20.9/data/models/models.dat.revert-plugins 2020-10-02 07:44:26.873416731 +0200 ++++ hplip-3.20.9/data/models/models.dat 2020-10-02 08:49:32.418280169 +0200 +@@ -2123,7 +2123,7 @@ ppd-name=hp-laserjet_100_color_mfp_m175- + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=64 + power-settings=0 + pq-diag-type=0 +@@ -3373,7 +3373,7 @@ model1=HP LaserJet Pro MFP M125r + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3416,7 +3416,7 @@ model1=HP LaserJet Pro MFP M125s + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3459,7 +3459,7 @@ model1=HP LaserJet Pro MFP M125a + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3502,7 +3502,7 @@ model1=HP LaserJet Pro MFP M125nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3545,7 +3545,7 @@ model1=HP LaserJet Pro MFP M125rnw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3588,7 +3588,7 @@ model1=HP LaserJet Pro MFP M125nr + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3631,7 +3631,7 @@ model1=HP LaserJet Pro MFP M126a + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3674,7 +3674,7 @@ model1=HP LaserJet Pro MFP M126nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3717,7 +3717,7 @@ model1=HP LaserJet Pro MFP M127fp + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3760,7 +3760,7 @@ model1=HP LaserJet Pro MFP M127fn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3846,7 +3846,7 @@ model1=HP LaserJet Pro MFP M128fn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3889,7 +3889,7 @@ model1=HP LaserJet Pro MFP M128fp + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -3932,7 +3932,7 @@ model1=HP LaserJet Pro MFP M128fw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -4225,7 +4225,7 @@ model1=HP Color LaserJet Pro MPF M177fw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -4277,8 +4277,8 @@ model1=HP LaserJet Pro 200 color MFP M27 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4331,8 +4331,8 @@ model1=HP LaserJet 200 Color MFP M275s + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m275-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4385,8 +4385,8 @@ model1=HP LaserJet 200 Color MFP M275u + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m275-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4439,8 +4439,8 @@ model1=HP LaserJet 200 Color MFP M275t + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m275-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4492,8 +4492,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4545,8 +4545,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4598,8 +4598,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4652,8 +4652,8 @@ model1=HP LaserJet Pro 200 color MFP M27 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4705,8 +4705,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4758,8 +4758,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4811,8 +4811,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4864,8 +4864,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4917,8 +4917,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -4970,8 +4970,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -5023,8 +5023,8 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m276-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -5077,8 +5077,8 @@ model1=HP LaserJet 200 Color MFP M275nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_200_colormfp_m275-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -6214,7 +6214,7 @@ model1=HP LaserJet Pro MFP M225rdn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=2112 + power-settings=0 + ppd-name=hp-laserjet_pro_mfp_m225_m226-ps.ppd +@@ -6257,7 +6257,7 @@ model1=HP LaserJet Pro MFP M225dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=2112 + power-settings=0 + ppd-name=hp-laserjet_pro_mfp_m225_m226-ps.ppd +@@ -6298,7 +6298,7 @@ model1=HP LaserJet Pro MFP M225dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=2112 + power-settings=0 + ppd-name=hp-laserjet_pro_mfp_m225_m226-ps.ppd +@@ -6339,7 +6339,7 @@ model1=HP LaserJet Pro MFP M226dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=2112 + power-settings=0 + ppd-name=hp-laserjet_pro_mfp_m225_m226-ps.ppd +@@ -6381,7 +6381,7 @@ model1=HP LaserJet Pro MFP M226dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=2112 + power-settings=0 + ppd-name=hp-laserjet_pro_mfp_m225_m226-ps.ppd +@@ -6830,8 +6830,8 @@ model1=HP LaserJet 300 Color MFP M375nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-lj_300_400_color_mfp_m375_m475-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -8227,8 +8227,8 @@ model1=HP LaserJet 400 Color MFP M475dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-lj_300_400_color_mfp_m375_m475-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -8371,8 +8371,8 @@ model1=HP LaserJet 400 MFP M425dw + monitor-type=1 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_400_mfp_m425-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -8416,8 +8416,8 @@ model1=HP Laserjet 400 MFP M425dn + monitor-type=1 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_400_mfp_m425-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -8804,8 +8804,8 @@ model1=HP LaserJet 400 Color MFP M475dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-lj_300_400_color_mfp_m375_m475-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -9115,8 +9115,8 @@ model1=HP LaserJet Pro MFP M435nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -9738,8 +9738,8 @@ model1=HP Color Laserjet Pro MFP M476dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m476-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -9780,8 +9780,8 @@ model1=HP Color Laserjet Pro MFP M476nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m476-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -9822,8 +9822,8 @@ model1=HP Color Laserjet Pro MFP M476dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m476-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -10118,8 +10118,8 @@ model1=HP LaserJet Pro 500 color MFP M57 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_500_color_mfp_m570-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -10172,8 +10172,8 @@ model1=HP LaserJet Pro 500 color MFP M57 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_500_color_mfp_m570-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -10747,8 +10747,8 @@ model1=HP LaserJet Pro M521dn Multifunct + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_mfp_m521-ps.ppd + family-ppd=hp-postscript-laserjet.ppd +@@ -10792,8 +10792,8 @@ model1=HP LaserJet Pro M521dw Multifunct + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_mfp_m521-ps.ppd + family-ppd=hp-postscript-laserjet.ppd +@@ -18353,7 +18353,7 @@ model1=HP LaserJet Pro CP1025 Color Prin + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -18989,7 +18989,7 @@ model1=HP LaserJet Professional P 1102w + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19032,7 +19032,7 @@ model1=HP Laserjet Professional P1106w P + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19075,7 +19075,7 @@ model1=HP Laserjet Professional P1106 Pr + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19118,7 +19118,7 @@ model1=HP LaserJet Professional P1107 Pr + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19161,7 +19161,7 @@ model1=HP LaserJet Professional P1107w P + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19204,7 +19204,7 @@ model1=HP Laserjet Professional P1108w P + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19247,7 +19247,7 @@ model1=HP Laserjet Professional P1108 Pr + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19290,7 +19290,7 @@ model1=HP LaserJet Professional P1109w P + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19333,7 +19333,7 @@ model1=HP LaserJet Professional P1109 Pr + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -19683,7 +19683,7 @@ model2=HP LaserJet Professional M1132s M + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -19726,7 +19726,7 @@ model1=HP Laserjet Professional M1136 Mu + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -19769,7 +19769,7 @@ model1=HP LaserJet Professional M1137 Mu + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -19812,7 +19812,7 @@ model1=HP LaserJet Professional M1138 Mu + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -19855,7 +19855,7 @@ model1=HP LaserJet Professional M1139 Mu + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20447,7 +20447,7 @@ model1=HP LaserJet Professional M1212nf + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20490,7 +20490,7 @@ model1=HP LaserJet Professional M1213nf + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20533,7 +20533,7 @@ model1=HP LaserJet Professional M1214nfh + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20675,7 +20675,7 @@ model1=HP LaserJet Professional M1216nfh + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20718,7 +20718,7 @@ model1=HP Color LaserJet CP1217 Printer + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -20813,7 +20813,7 @@ model1=HP Laserjet M1210 MFP Series + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20903,7 +20903,7 @@ model1=HP HotSpot LaserJet Pro M1218nfs + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20945,7 +20945,7 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -20987,7 +20987,7 @@ linefeed-cal-type=0 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -21030,7 +21030,7 @@ model1=HP LaserJet Professional M1219nf + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -22320,8 +22320,8 @@ model1=HP LaserJet Professional CM1411fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22373,8 +22373,8 @@ model1=HP LaserJet Professional CM1412fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22426,8 +22426,8 @@ model1=HP LaserJet Professional CM1413fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22479,8 +22479,8 @@ model1=HP LaserJet Professional CM1415fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22532,8 +22532,8 @@ model1=HP LaserJet Professional CM1415fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22585,8 +22585,8 @@ model1=HP LaserJet Professional CM1416fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22638,8 +22638,8 @@ model1=HP LaserJet Professional CM1417fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -22691,8 +22691,8 @@ model1=HP LaserJet Professional CM1418fn + monitor-type=0 + panel-check-type=1 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_cm1410_series-ps.ppd + pq-diag-type=0 +@@ -23889,8 +23889,8 @@ model1=HP LaserJet M1536dnf MFP + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_m1530_mfp_series-ps.ppd + family-ppd=hp-postscript-laserjet.ppd +@@ -23934,8 +23934,8 @@ model1=HP LaserJet M1537dnf MFP + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_m1530_mfp_series-ps.ppd + pq-diag-type=0 +@@ -23978,8 +23978,8 @@ model1=HP LaserJet M1538dnf MFP + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_m1530_mfp_series-ps.ppd + pq-diag-type=0 +@@ -24022,8 +24022,8 @@ model1=HP LaserJet M1539dnf MFP + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_m1530_mfp_series-ps.ppd + pq-diag-type=0 +@@ -24109,7 +24109,7 @@ model1=HP LaserJet Professional P1567 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24152,7 +24152,7 @@ model1=HP LaserJet Professional P1568 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24195,7 +24195,7 @@ model1=HP LaserJet Professional P1569 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24631,7 +24631,7 @@ model1=HP LaserJet Professional P1606dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24674,7 +24674,7 @@ model1=HP LaserJet Professional P1607dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24717,7 +24717,7 @@ model1=HP LaserJet Professional P1608dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -24760,7 +24760,7 @@ model1=HP LaserJet Professional P1609dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -29946,8 +29946,8 @@ ppd-name=hp-color_laserjet_2800-ps.ppd + monitor-type=0 + panel-check-type=1 + pcard-type=2 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -30068,8 +30068,8 @@ ppd-name=hp-color_laserjet_2820-ps.ppd + monitor-type=0 + panel-check-type=1 + pcard-type=2 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -53138,8 +53138,8 @@ model1=HP Color LaserJet MFP M277n + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_mfp_m277 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -53192,8 +53192,8 @@ model1=HP Color LaserJet MFP M277dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m277 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -53933,8 +53933,8 @@ model1=HP Color LaserJet Pro MFP M274n + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_mfp_m274-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54716,8 +54716,8 @@ model1=HP Laserjet Pro MFP M426fdn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=laserjet_mfp_m426_m427 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54761,8 +54761,8 @@ model1=HP Laserjet Pro MFP M426fdw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=laserjet_mfp_m426_m427 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54806,8 +54806,8 @@ model1=HP Laserjet Pro MFP M427dn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=laserjet_mfp_m426_m427 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54851,8 +54851,8 @@ model1=HP Laserjet Pro MFP M427fdw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=laserjet_mfp_m426_m427 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54896,8 +54896,8 @@ model1=HP Laserjet Pro MFP M426dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=laserjet_mfp_m426_m427 + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -54941,8 +54941,8 @@ model1=HP Laserjet Pro MFP M427dw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-laserjet_mfp_m426_m427-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -55271,8 +55271,8 @@ model1=HP Color Laserjet Pro MFP M477 fn + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m477-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -55313,8 +55313,8 @@ model1=HP Color Laserjet Pro MFP M477 fd + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=color_laserjet_pro_mfp_m477d + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -55355,8 +55355,8 @@ model1=HP Color Laserjet Pro MFP M477 fd + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m477d-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -55437,7 +55437,7 @@ model1=HP LaserJet Pro MFP M127fs + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=65 + power-settings=0 + pq-diag-type=0 +@@ -56513,8 +56513,8 @@ model1=HP Color Laserjet MFP M377 fnw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m377-ps.ppd + family-ppd=hp-postscript-laserjet-pro.ppd +@@ -57475,8 +57475,8 @@ model1=HP Color LaserJet MFP M277c6 + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + ppd-name=hp-color_laserjet_pro_mfp_m277-ps.ppd + pq-diag-type=0 +@@ -60453,7 +60453,7 @@ model1=HP LaserJet Pro MFP M26a + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -60493,7 +60493,7 @@ model1=HP LaserJet Pro MFP M26nw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -60653,7 +60653,7 @@ model1=HP LaserJet Pro MFP M27cnw + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 ++plugin=1 + plugin-reason=1 + power-settings=0 + pq-diag-type=0 +@@ -65387,8 +65387,8 @@ model1=HP Smart Tank Plus 570 series + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -67470,8 +67470,8 @@ model2=HP DeskJet Ink Advantage 2700 All + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -67510,8 +67510,8 @@ model1=HP DeskJet Plus 4100 All-in-One P + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 +@@ -67632,8 +67632,8 @@ model2=HP DeskJet Ink Advantage 2300 All + monitor-type=0 + panel-check-type=0 + pcard-type=0 +-plugin=0 +-plugin-reason=0 ++plugin=1 ++plugin-reason=64 + power-settings=0 + pq-diag-type=0 + r-type=0 diff --git a/hplip-scan-hpaio-include.patch b/hplip-scan-hpaio-include.patch new file mode 100644 index 0000000..79d1d94 --- /dev/null +++ b/hplip-scan-hpaio-include.patch @@ -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: + +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" + + diff --git a/hplip-scan-orblite-c99.patch b/hplip-scan-orblite-c99.patch new file mode 100644 index 0000000..c921f22 --- /dev/null +++ b/hplip-scan-orblite-c99.patch @@ -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 ++#include + #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); diff --git a/hplip-scan-size.patch b/hplip-scan-size.patch new file mode 100644 index 0000000..1ff8cb3 --- /dev/null +++ b/hplip-scan-size.patch @@ -0,0 +1,37 @@ +diff --git a/scan.py b/scan.py +index b262ef2..cb0ffc1 100755 +--- a/scan.py ++++ b/scan.py +@@ -83,7 +83,7 @@ edge_erase_value = 0 + contrast = 0 + set_contrast = False + +-page_size = '' ++page_size = 'a4' + size_desc = '' + page_units = 'mm' + default_res = 300 +@@ -1615,7 +1615,7 @@ try: + else: + im = im.convert("RGB") + +- #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res) ++ #im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res) + if barcode_count>0: + if barcode_first_occurence == True: + if barcode_first_page == False: +@@ -1718,12 +1718,12 @@ try: + #so that the output image size matches with the input scan area + #for Flatbad + if im: +- im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[size],res) ++ im = imageprocessing.resize_to_scan_area(im,PAGE_SIZES[page_size],res) + """ + #for ADF + for Image_file in adf_page_files: + image = Image.open(Image_file) +- resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[size],res) ++ resized_image = imageprocessing.resize_to_scan_area(image,PAGE_SIZES[page_size],res) + resized_image.save(Image_file) + """ + if adf and (save_file =='jpg' or save_file == 'png' or save_file == 'tiff' or save_file == 'pdf' or save_file == 'bmp'): diff --git a/hplip-sclpml-strcasestr.patch b/hplip-sclpml-strcasestr.patch new file mode 100644 index 0000000..daf86c8 --- /dev/null +++ b/hplip-sclpml-strcasestr.patch @@ -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 diff --git a/hplip-3165-sourceoption.patch b/hplip-sourceoption.patch similarity index 100% rename from hplip-3165-sourceoption.patch rename to hplip-sourceoption.patch diff --git a/hplip-strncpy.patch b/hplip-strncpy.patch index eac29b8..cbd262d 100644 --- a/hplip-strncpy.patch +++ b/hplip-strncpy.patch @@ -1,7 +1,7 @@ -diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp ---- hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy 2015-01-21 16:52:44.066497631 +0000 -+++ hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp 2015-01-21 16:59:46.216434376 +0000 -@@ -203,6 +203,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte +diff -up hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp +--- hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp.strncpy 2025-04-11 10:16:00.438702562 +0200 ++++ hplip-3.25.2/prnt/hpcups/HPCupsFilter.cpp 2025-04-11 10:21:25.088096376 +0200 +@@ -211,6 +211,7 @@ HPCupsFilter::HPCupsFilter() : m_pPrinte adj_k_width = 0; black_raster = NULL; color_raster = NULL; @@ -9,7 +9,7 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h } HPCupsFilter::~HPCupsFilter() -@@ -384,9 +385,9 @@ DRIVER_ERROR HPCupsFilter::startPage (cu +@@ -428,15 +429,15 @@ DRIVER_ERROR HPCupsFilter::startPage (cu m_JA.media_attributes.physical_height = cups_header->PageSize[1]; m_JA.media_attributes.printable_width = ((cups_header->ImagingBoundingBox[2]-cups_header->ImagingBoundingBox[0]) * horz_res) / 72; m_JA.media_attributes.printable_height = ((cups_header->ImagingBoundingBox[3]-cups_header->ImagingBoundingBox[1]) * vert_res) / 72; @@ -20,11 +20,18 @@ diff -up hplip-3.14.10/prnt/hpcups/HPCupsFilter.cpp.strncpy hplip-3.14.10/prnt/h + strncpy(m_JA.media_attributes.MediaTypeName, cups_header->MediaType, sizeof(m_JA.media_attributes.MediaTypeName)-1); + strncpy(m_JA.quality_attributes.hbpl1_print_quality, cups_header->OutputType, sizeof(m_JA.quality_attributes.hbpl1_print_quality)-1); m_JA.color_mode = cups_header->cupsRowStep; + + if (m_JA.media_attributes.PageSizeName[0] == '\0') { + // Copy the value of cups_header->cupsPageSizeName if it isnot null + if (cups_header->cupsPageSizeName != nullptr) { +- strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName)); ++ strncpy(m_JA.media_attributes.PageSizeName, cups_header->cupsPageSizeName, sizeof(m_JA.media_attributes.PageSizeName) - 1); + } + } } - else { -diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijs.cpp ---- hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy 2015-01-21 17:00:03.225512410 +0000 -+++ hplip-3.14.10/prnt/hpijs/hpijs.cpp 2015-01-21 17:04:59.308870785 +0000 +diff -up hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijs.cpp +--- hplip-3.25.2/prnt/hpijs/hpijs.cpp.strncpy 2025-04-11 10:16:00.434453252 +0200 ++++ hplip-3.25.2/prnt/hpijs/hpijs.cpp 2025-04-11 10:16:00.501228045 +0200 @@ -605,7 +605,7 @@ int main (int argc, char *argv[], char * } @@ -34,9 +41,9 @@ diff -up hplip-3.14.10/prnt/hpijs/hpijs.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpi #ifdef HAVE_LIBHPIP char *pDev; -diff -up hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.14.10/prnt/hpijs/hpijsfax.cpp ---- hplip-3.14.10/prnt/hpijs/hpijsfax.cpp.strncpy 2015-01-21 17:05:06.585904171 +0000 -+++ hplip-3.14.10/prnt/hpijs/hpijsfax.cpp 2015-01-21 17:05:15.787946389 +0000 +diff -up hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy hplip-3.25.2/prnt/hpijs/hpijsfax.cpp +--- hplip-3.25.2/prnt/hpijs/hpijsfax.cpp.strncpy 2025-02-27 13:12:29.000000000 +0100 ++++ hplip-3.25.2/prnt/hpijs/hpijsfax.cpp 2025-04-11 10:16:00.501403513 +0200 @@ -282,7 +282,7 @@ int hpijsFaxServer (int argc, char **arg char user_name[32]={0,}; diff --git a/hplip-typo.patch b/hplip-typo.patch index f8a6aca..4d93801 100644 --- a/hplip-typo.patch +++ b/hplip-typo.patch @@ -1,6 +1,6 @@ -diff -up hplip-3.17.11/firmware.py.typo hplip-3.17.11/firmware.py ---- hplip-3.17.11/firmware.py.typo 2018-01-12 16:50:10.338366719 +0100 -+++ hplip-3.17.11/firmware.py 2018-01-12 16:50:33.563184939 +0100 +diff -up hplip-3.20.11/firmware.py.typo hplip-3.20.11/firmware.py +--- hplip-3.20.11/firmware.py.typo 2021-02-03 10:53:34.311743805 +0100 ++++ hplip-3.20.11/firmware.py 2021-02-03 10:54:13.229386257 +0100 @@ -99,7 +99,7 @@ try: if mode == GUI_MODE and (ui_toolkit == 'qt4' or ui_toolkit == 'qt5'): if not utils.canEnterGUIMode4(): diff --git a/hplip-ui-optional.patch b/hplip-ui-optional.patch index 0710d10..d724a30 100644 --- a/hplip-ui-optional.patch +++ b/hplip-ui-optional.patch @@ -1,76 +1,96 @@ -diff -up hplip-3.19.6/base/utils.py.ui-optional hplip-3.19.6/base/utils.py ---- hplip-3.19.6/base/utils.py.ui-optional 2019-06-26 15:07:10.000000000 +0200 -+++ hplip-3.19.6/base/utils.py 2019-07-12 08:16:22.390256936 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/python3 - # -*- coding: utf-8 -*- - # - # (c) Copyright 2001-2018 HP Development Company, L.P. -@@ -734,6 +734,13 @@ def checkPyQtImport(): # qt3 +diff --git a/base/module.py b/base/module.py +index dd3efa3..04ac5b8 100644 +--- a/base/module.py ++++ b/base/module.py +@@ -432,6 +432,12 @@ class Module(object): + if show_usage is not None: + sys.exit(0) + ++ if mode == GUI_MODE: ++ if not utils.canEnterGUIMode4(): ++ log.warn("GUI mode not available - switching to interactive mode.") ++ mode = INTERACTIVE_MODE ++ ui_toolkit = 'none' ++ + self.mode = mode + return opts, device_uri, printer_name, mode, ui_toolkit, lang + +diff --git a/base/utils.py b/base/utils.py +index 98437a3..9b8813b 100644 +--- a/base/utils.py ++++ b/base/utils.py +@@ -722,6 +722,15 @@ def canEnterGUIMode4(): # qt4 + log.warn(e) + return False + ++ try: ++ import ui4 ++ except ImportError: ++ try: ++ import ui5.setupdialog ++ except ImportError as e: ++ log.warn(e) ++ return False ++ + return True + + +@@ -734,6 +743,11 @@ def checkPyQtImport(): # qt3 if os.getenv('DISPLAY') and os.getenv('STARTED_FROM_MENU'): no_qt_message_gtk() -+ # hplip-gui sub-package (Fedora) + try: + import ui + except ImportError: -+ log.error("hplip-gui not installed. GUI not available. Exiting.") + return False + log.error("PyQt not installed. GUI not available. Exiting.") return False -@@ -784,7 +791,8 @@ def checkPyQtImport4(): - import PyQt5 - import ui5 - else: +@@ -781,11 +795,13 @@ def checkPyQtImport4(): + import PyQt4 + import ui4 + except ImportError: +- import PyQt5 +- import ui5 +- else: - log.debug("HPLIP is not installed properly or is installed without graphical support. Please reinstall HPLIP again") -+ # hplip-gui sub-package (Fedora) requires python3-qt5 -+ log.error("Install the hplip-gui package for graphical support.") - return False +- return False ++ try: ++ import PyQt5 ++ import ui5.setupdialog ++ except ImportError: ++ log.debug('GUI not available.') ++ return False ++ return True -@@ -2456,6 +2464,7 @@ def checkPyQtImport45(): - except ImportError as e: - log.debug(e) + # def checkPyQtImport5(): +diff --git a/fab.py b/fab.py +index 5577af5..194ceed 100755 +--- a/fab.py ++++ b/fab.py +@@ -776,14 +776,15 @@ mod.setUsage(module.USAGE_FLAG_NONE) + opts, device_uri, printer_name, mode, ui_toolkit, loc = \ + mod.parseStdOpts(handle_device_printer=False) -+ log.error("Install the hplip-gui package for graphical support.") - raise ImportError("GUI Modules PyQt4 and PyQt5 are not installed") +-if ui_toolkit == 'qt3': +- if not utils.canEnterGUIMode(): +- log.error("%s GUI mode requires GUI support (try running with --qt4). Entering interactive mode." % __mod__) +- mode = INTERACTIVE_MODE +-else: +- if not utils.canEnterGUIMode4(): +- log.error("%s GUI mode requires GUI support (try running with --qt3). Entering interactive mode." % __mod__) +- mode = INTERACTIVE_MODE ++if ui_toolkit != 'none': ++ if ui_toolkit == 'qt3': ++ if not utils.canEnterGUIMode(): ++ log.error("%s GUI mode requires GUI support (try running with --qt4). Entering interactive mode." % __mod__) ++ mode = INTERACTIVE_MODE ++ else: ++ if not utils.canEnterGUIMode4(): ++ log.error("%s GUI mode requires GUI support (try running with --qt3). Entering interactive mode." % __mod__) ++ mode = INTERACTIVE_MODE -@@ -2477,6 +2486,7 @@ def import_dialog(ui_toolkit): - return (QApplication, "ui4") - except ImportError as e: - log.error(e) -+ log.error("Unable to load Qt support. Is hplip-gui package installed?") - sys.exit(1) - elif ui_toolkit == "qt5": - try: -@@ -2485,9 +2495,7 @@ def import_dialog(ui_toolkit): - return (QApplication, "ui5") - except ImportError as e: - log.error(e) -- sys.exit(1) -- else: -- log.error("Unable to load Qt support. Is it installed?") -+ log.error("Unable to load Qt support. Is hplip-gui package installed?") - sys.exit(1) - - -diff -up hplip-3.19.6/plugin.py.ui-optional hplip-3.19.6/plugin.py ---- hplip-3.19.6/plugin.py.ui-optional 2019-06-26 15:07:10.000000000 +0200 -+++ hplip-3.19.6/plugin.py 2019-07-12 08:15:03.731933177 +0200 -@@ -252,7 +252,11 @@ if mode == GUI_MODE: - # clean_exit(1) - - QApplication, ui_package = utils.import_dialog(ui_toolkit) -- ui = import_module(ui_package + ".plugindialog") -+ try: -+ ui = import_module(ui_package + ".plugindialog") -+ except ModuleNotFoundError: -+ log.error("hplip-gui not installed. GUI not available. Exiting.") -+ clean_exit(1) - if ui_toolkit == "qt5": - from PyQt5.QtWidgets import QMessageBox - elif ui_toolkit == "qt4": + if mode == GUI_MODE: diff --git a/hplip-unicodeerror.patch b/hplip-unicodeerror.patch new file mode 100644 index 0000000..f98c7a3 --- /dev/null +++ b/hplip-unicodeerror.patch @@ -0,0 +1,18 @@ +diff --git a/base/sixext.py b/base/sixext.py +index 0bf4fc4..311bf72 100644 +--- a/base/sixext.py ++++ b/base/sixext.py +@@ -110,11 +110,11 @@ if PY3: + + + def to_string_utf8(s): +- return s.decode("utf-8") ++ return s.decode("utf-8", 'ignore') + + + def to_string_latin(s): +- return s.decode("latin-1") ++ return s.decode("latin-1", 'ignore') + + + def to_unicode(s, enc=None): diff --git a/hplip-use-raw-strings.patch b/hplip-use-raw-strings.patch new file mode 100644 index 0000000..77d1b87 --- /dev/null +++ b/hplip-use-raw-strings.patch @@ -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 or --port= (Valid values are 1\*, 2, and 3. \*default)", "option", False), ++ ("To specify the port on a multi-port JetDirect:", r"-p or --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 or --bus=", "option", False), +- ("", ": cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False), ++ ("", r": cups, usb\*, net, bt, fw, par (\*default) (Note: bt and fw not supported in this release.)", "option", False), + ("Set Time to Live (TTL):", "-t or --ttl= (Default is 4).", "option", False), + ("Set timeout:", "-o or --timeout=", "option", False), + ("Filter by functionality:", "-e or --filter=", "option", False), +- ("", ": comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False), ++ ("", r": comma separated list of one or more of: scan, pcard, fax, copy, or none\*. (\*none is the default)", "option", False), + ("Search:", "-s or --search=", "option", False), + ("", " must be a valid regular expression (not case sensitive)", "option", False), + ("Network discovery method:", "-m or --method=: is 'slp'* or 'mdns'.", "option", False), +diff -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= (Valid values are 1\*, 2, and 3. \*default)", "option", False), ++ ("To specify the port on a multi-port JetDirect:", r"--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 or --printer= (-i mode only)", "option", False), + ("To specify a CUPS fax queue name:", "-f or --fax= (-i mode only)", "option", False), +- ("Type of queue(s) to install:", "-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False), ++ ("Type of queue(s) to install:", r"-t or --type=. : print*, fax\* (\*default) (-i mode only)", "option", False), + ("To specify the device URI to install:", "-d or --device= (--qt4 mode only)", "option", False), + ("Remove printers or faxes instead of setting-up:", "-r or --rm or --remove", "option", False), + utils.USAGE_LANGUAGE, diff --git a/hplip-wifisetup.patch b/hplip-wifisetup.patch index 7247b01..a7dc21b 100644 --- a/hplip-wifisetup.patch +++ b/hplip-wifisetup.patch @@ -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) diff --git a/hplip.appdata.xml b/hplip.appdata.xml index 9c0b711..17ddd4a 100644 --- a/hplip.appdata.xml +++ b/hplip.appdata.xml @@ -1,9 +1,9 @@ - - HP-hplip.desktop + + hplip.desktop CC0-1.0 - GPL-2.0 and MIT and BSD-2-Clause + GPL-2.0+ HPLIP Graphic Tools HPLIP GUI tools and GUI part of other HPLIP tools diff --git a/hplip.spec b/hplip.spec index 52f2e17..d6b78cd 100644 --- a/hplip.spec +++ b/hplip.spec @@ -6,17 +6,38 @@ Summary: HP Linux Imaging and Printing Project Name: hplip -Version: 3.19.8 -Release: 2%{?dist} -License: GPLv2+ and MIT and BSD and IJG and Public Domain and GPLv2+ with exceptions and ISC +Version: 3.25.8 +Release: 1%{?dist} +# 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 -Source0: http://downloads.sourceforge.net/sourceforge/hplip/hplip-%{version}.tar.gz +# Original source tarball +# Source0: http://downloads.sourceforge.net/sourceforge/hplip/hplip-%%{version}.tar.gz +# +# Repacked source tarball without redundant files - always repack +# the original tarball once a new version arrives by: +# +# ./hplip-repack.sh +# + +Source0: hplip-%{version}-repack.tar.gz Source1: hpcups-update-ppds.sh Source2: copy-deviceids.py 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 Patch3: hplip-ui-optional.patch @@ -35,46 +56,47 @@ Patch15: hplip-ppd-ImageableArea.patch Patch16: hplip-scan-tmp.patch Patch17: hplip-log-stderr.patch Patch18: hplip-avahi-parsing.patch -Patch20: hplip-dj990c-margin.patch -Patch21: hplip-strncpy.patch -Patch22: hplip-no-write-bytecode.patch -Patch23: hplip-silence-ioerror.patch -Patch24: hplip-3165-sourceoption.patch -Patch25: hplip-noernie.patch -Patch26: hplip-appdata.patch -Patch27: hplip-check-cups.patch -Patch30: hplip-typo.patch +Patch19: hplip-dj990c-margin.patch +Patch20: hplip-strncpy.patch +Patch21: hplip-no-write-bytecode.patch +Patch22: hplip-silence-ioerror.patch +Patch23: hplip-sourceoption.patch +Patch24: hplip-noernie.patch +Patch25: hplip-appdata.patch +Patch26: hplip-check-cups.patch +Patch27: hplip-typo.patch # python3 - recent HP release removed encoding/decoding to utf-8 in fax/pmlfax.py - # that results in text string going into translate function in base/utils.py, which # expects binary string because of parameters. Remove this patch if base/utils.py # code gets fixed. -Patch31: hplip-use-binary-str.patch +Patch28: hplip-use-binary-str.patch # m278-m281 doesn't work correctly again -Patch32: hplip-colorlaserjet-mfp-m278-m281.patch -Patch33: hplip-error-print.patch -Patch34: hplip-hpfax-importerror-print.patch -Patch35: hplip-wifisetup.patch +Patch29: hplip-error-print.patch +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) -Patch37: hplip-keyserver.patch +# 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 -Patch38: 0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch +Patch33: 0026-Call-QMessageBox-constructors-of-PyQT5-with-the-corr.patch # HP upstream introduced new binary blob, which is not open-source, so it violates # FPG by two ways - shipping binary blob and non open source code - so it needs to be removed. # Patch is taken from Debian. -Patch39: 0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch +Patch34: 0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch # In hplip-3.18.10 some parts of UI code was commented out, which leaved hp-toolbox # unusable (crashed on the start). The patch removes usages of variables, which were # commented out. # The patch is taken from Debian. -Patch40: 0027-Fixed-incomplete-removal-of-hp-toolbox-features-whic.patch +Patch35: 0027-Fixed-incomplete-removal-of-hp-toolbox-features-whic.patch # hp-setup crashed when user wanted to define a path to PPD file. It was due # byte + string variables incompatibility and it is fixed by decoding the # bytes-like variable # part of https://bugzilla.redhat.com/show_bug.cgi?id=1666076 # reported upstream https://bugs.launchpad.net/hplip/+bug/1814272 -Patch42: hplip-add-ppd-crash.patch +Patch36: hplip-add-ppd-crash.patch # external scripts, which are downloaded and run by hp-plugin, try to create links # in non-existing dirs. These scripts ignore errors, so plugin is installed fine # but then internal hp-plugin can check for plugin state, where links are checked too. @@ -83,133 +105,290 @@ Patch42: hplip-add-ppd-crash.patch # because their external scripts try to create links in non-existing dirs. # Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1671513 # Reported upstream: https://bugs.launchpad.net/hplip/+bug/1814574 -Patch43: hplip-missing-links.patch +Patch37: hplip-missing-links.patch # change in 3.18.9 in scanext.c caused broken scanning for HP LaserJet 3052. Since I cannot figure # it out what author wanted by the change (it sets option number 9 to true, but different handles # have different options, so I'm not sure what author wanted to set). # Remove the change for now, it works for user and me. -Patch44: hplip-hplj-3052.patch +Patch38: hplip-hplj-3052.patch # hpmud parses mdns txt record badly # upstream tickets: https://bugs.launchpad.net/hplip/+bug/1797501 # https://bugs.launchpad.net/hplip/+bug/1817214 # https://bugs.launchpad.net/hplip/+bug/1821932 # with no response from upstream # Patch taken from Debian https://lists.debian.org/debian-printing/2018/11/msg00049.html -Patch45: hplip-hpmud-string-parse.patch +Patch39: hplip-hpmud-string-parse.patch # Part of https://bugzilla.redhat.com/show_bug.cgi?id=1694663 # It was found out that specific device needs plugin for scanning # Reported upstream as https://bugs.launchpad.net/hplip/+bug/1822762 -Patch46: hplip-m278-m281-needs-plugin.patch +Patch40: hplip-m278-m281-needs-plugin.patch # hpcups crashes when a printer needs a plugin and does not have one installed # it crashes in destructor, because pointer is not initialized # bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=1695716 # reported upstream -Patch47: hplip-hpcups-crash.patch +Patch41: hplip-hpcups-crash.patch # Fixing the issues found by coverity scan # reported upstream https://bugs.launchpad.net/hplip/+bug/1808145 -Patch48: hplip-covscan.patch +Patch42: hplip-covscan.patch # Segfault during logging to syslog because argument are switched # bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=1727162 # upstream https://bugs.launchpad.net/hplip/+bug/1837846 -Patch49: hplip-logging-segfault.patch +Patch43: hplip-logging-segfault.patch # Traceback in hp-systray when there are no resource # wanted to report upstream, but launchpad ends with timeout error # bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=1738321 -Patch50: hplip-systray-blockerror.patch -# platform module removed dist methode, using distro instead of it -# https://bugzilla.redhat.com/show_bug.cgi?id=1745317 -# reported upstream https://bugs.launchpad.net/hplip/+bug/1843037 -Patch51: hplip-dist-removed.patch +Patch44: hplip-systray-blockerror.patch # several printers were removed in 3.19.1, but actually someone still uses them # reported upstream https://bugs.launchpad.net/hplip/+bug/1843592 # bugzillas 1742949, 1740132, 1739855 -Patch52: hplip-missing-drivers.patch -# hp-check tracebacks due change in python-pillow - PIL.Image.VERSION is removed, -# so now it uses PIL.Image.PILLOW_VERSION -# reported upstream https://bugs.launchpad.net/hplip/+bug/1846218 -Patch53: hplip-pillow-version.patch +Patch45: hplip-missing-drivers.patch +# laserjet 2200 and other devices have different device id than HP expects... +# https://bugzilla.redhat.com/show_bug.cgi?id=1772698 +# reported upstream https://bugs.launchpad.net/hplip/+bug/1853002 +Patch46: hplip-model-mismatch.patch +# sixext has problems with python3 strings (bz#1573430) +# reported https://bugs.launchpad.net/bugs/1480152 +Patch47: hplip-unicodeerror.patch +# error with new gcc, already reported in upstream as +# https://bugs.launchpad.net/hplip/+bug/1836735 +Patch48: hplip-fix-Wreturn-type-warning.patch +# upstream check for python clears OS build system +# CFLAGS +# https://bugs.launchpad.net/hplip/+bug/1879445 +Patch49: hplip-configure-python.patch +# taken from hplip upstream report - toolbox uses deprecated method +# setMargin(), which generates an exception, resulting in a infinite loop +# of request on cupsd +# https://bugs.launchpad.net/hplip/+bug/1880275 +Patch50: hplip-dialog-infinite-loop.patch +# searching algorithm did not expect '-' in model name and thought it is a new PDL +# it resulted in incorrect PPD match, so e.g. hpijs driver was used instead of hpcups +# bug: https://bugzilla.redhat.com/show_bug.cgi?id=1590014 +# reported upstream: https://bugs.launchpad.net/hplip/+bug/1881587 +Patch51: hplip-find-driver.patch +# hp-clean didn't work for Photosmart C1410 because it was comparing +# string length with buffer size for string object, which is different, +# causing cleaning to fail - the fix is to make the object bytes-like, +# then buffer size is the same as the length. +# Thanks to Stefan Assmann we were able to fix level 1 cleaning +# for the device, but there can be similar issues with other devices +# bug https://bugzilla.redhat.com/show_bug.cgi?id=1833308 +# reported upstream https://bugs.launchpad.net/hplip/+bug/1882193 +Patch52: hplip-clean-ldl.patch +# 3.20.6 turned off requirement for most devices which needed it +# - it will cause malfunction of printing and scanning for them +# https://bugs.launchpad.net/hplip/+bug/1883898 +Patch53: hplip-revert-plugins.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 +Patch54: hplip-hpsetup-noscanjets.patch +# 1963114 - patch for hplip firmware load timeout fix +# reported upstream https://bugs.launchpad.net/hplip/+bug/1922404 +Patch55: hplip-hpfirmware-timeout.patch +# 1985251 - Incorrect permission for gpg directory +# reported upstream https://bugs.launchpad.net/hplip/+bug/1938442 +Patch56: hplip-gpgdir-perms.patch +# 1987141 - hp-plugin installs malformed udev files +# reported upstream https://bugs.launchpad.net/hplip/+bug/1847477 +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: +Patch60: hplip-pserror-c99.patch +# C99 compatibility patch by fweimer - several undefined functions in hpaio +# backend are declared in orblite.h +# Submitted upstream: +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: +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: +Patch63: hplip-pcardext-disable.patch +# undefined strcasestr() in sclpml.c - build with _GNU_SOURCE +# Submitted upstream: +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 -Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Requires: python3-pillow -Requires: cups -Requires: wget -Requires: python3-dbus -# set require directly to /usr/bin/gpg, because gnupg2 and gnupg ships it, -# but gnupg will be deprecated in the future -Requires: %{_bindir}/gpg -# /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 -# 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 +%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 +# 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 +# IPP and MDNS protocols, hpps driver, hp backend, hpip (image processing # library), multipoint transport driver hpmud BuildRequires: gcc # gcc-c++ is needed for hpijs, hpcups drivers BuildRequires: gcc-c++ - -BuildRequires: autoconf automake libtool -BuildRequires: net-snmp-devel -BuildRequires: cups-devel -BuildRequires: python3-devel +# support for JPEG file formats in hp-scan BuildRequires: libjpeg-devel -BuildRequires: desktop-file-utils +# uses libtool for autorconf +BuildRequires: libtool +# implements support for USB devices BuildRequires: libusb1-devel +# uses make +BuildRequires: make +# SLP device discovery is based on SNMP +BuildRequires: net-snmp-devel +# wasn't able to find out why, but SO libraries in hplip-libs require them... BuildRequires: openssl-devel -BuildRequires: sane-backends-devel +# supports mDNS device discovery via Avahi +BuildRequires: pkgconfig(avahi-client) +BuildRequires: pkgconfig(avahi-core) BuildRequires: pkgconfig(dbus-1) - -# Make sure we get postscriptdriver tags - need cups and python3-cups. -BuildRequires: cups 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 # macros: %%{_tmpfilesdir}, %%{_udevrulesdir} BuildRequires: systemd +%if 0%{?fedora} || 0%{?rhel} <= 8 +Suggests: hplip-gui +%endif +# uses avahi-browse for discovering IPP-over-USB printers +Recommends: avahi-tools +# 1733449 - Scanner on an HP AIO printer is not detected unless libsane-hpaio is installed +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: cups +# 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 +# 1788643 - Fedora minimal does not ship tar by default +Requires: tar +# require usbutils, hp-diagnose_queues needs lsusb +Requires: usbutils + +# 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 %description libs Libraries needed by HPLIP. +%if 0%{?rhel} <= 8 || 0%{?fedora} %package gui Summary: HPLIP graphical tools -License: BSD BuildRequires: libappstream-glib -Requires: python3-qt5 -Requires: python3-reportlab + +# for avahi-browse - looks for devices on local network +Recommends: avahi-tools +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. +%endif %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} @@ -220,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 \ @@ -242,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) @@ -271,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#*/} @@ -282,109 +461,175 @@ 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). -%patch20 -p1 -b .dj990c-margin +%patch -P 19 -p1 -b .dj990c-margin # Fixed uses of strncpy throughout. -%patch21 -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). -%patch22 -p1 -b .no-write-bytecode +%patch -P 21 -p1 -b .no-write-bytecode # Ignore IOError when logging output (bug #712537). -%patch23 -p1 -b .silence-ioerror +%patch -P 22 -p1 -b .silence-ioerror # [abrt] hplip: hp-scan:663::NameError: name 'source_option' is not defined (bug #1341304) -%patch24 -p1 -b .sourceoption +%patch -P 23 -p1 -b .sourceoption # hplip license problem (bug #1364711) -%patch25 -p1 -b .no-ernie +%patch -P 24 -p1 -b .no-ernie # hplip appdata -%patch26 -p1 -b .appdata - -rm prnt/hpcups/ErnieFilter.{cpp,h} prnt/hpijs/ernieplatform.h +%patch -P 25 -p1 -b .appdata # hp-check shows 'CUPS incompatible or not running' even if CUPS is running (bug #1456467) -%patch27 -p1 -b .check-cups +%patch -P 26 -p1 -b .check-cups # hp-firmware:NameError: name 'INTERACTIVE_MODE4' is not defined (bug #1533869) -%patch30 -p1 -b .typo +%patch -P 27 -p1 -b .typo -%patch31 -p1 -b .use-binary-str -#%%patch32 -p1 -b .colorlaserjet-mfp-m278-m281 +%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. -%patch33 -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 -%patch34 -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 -%patch35 -p1 -b .wifisetup-bad-call-fix +%patch -P 31 -p1 -b .wifisetup-bad-call-fix # have pool of keyservers to choose -%patch37 -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 -%patch38 -p1 -b .qmsgbox-typos-fix +%patch -P 33 -p1 -b .qmsgbox-typos-fix # removal of non open source code, taken from ubuntu -%patch39 -p1 -b .libimageprocessor-removal +%patch -P 34 -p1 -b .libimageprocessor-removal %{_bindir}/rm prnt/hpcups/libImageProcessor-x86* -%patch40 -p1 -b .toolbox-crash +%patch -P 35 -p1 -b .toolbox-crash # part of https://bugzilla.redhat.com/show_bug.cgi?id=1666076 -%patch42 -p1 -b .add-ppd-crash +%patch -P 36 -p1 -b .add-ppd-crash # 1671513 - after 'successful' plugin installation it is not installed -%patch43 -p1 -b .missing-links +%patch -P 37 -p1 -b .missing-links # 1684434 - Scanning broken for HP LaserJet 3052 -%patch44 -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) -%patch45 -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) -%patch46 -p1 -b .m278-m281-needs-plugin +%patch -P 40 -p1 -b .m278-m281-needs-plugin # 1695716 - hpcups crashes in Compressor destructor -%patch47 -p1 -b .hpcups-crash +%patch -P 41 -p1 -b .hpcups-crash # fixing issues found by coverity scan -%patch48 -p1 -b .covscan +%patch -P 42 -p1 -b .covscan # segfault during logging (1727162) -%patch49 -p1 -b .logging-segfault +%patch -P 43 -p1 -b .logging-segfault # 1738321 - [abrt] hp-systray:BlockingIOError: [Errno 11] Resource temporarily unavailable -%patch50 -p1 -b .systray-blockerror -# 1745317 - hp-plugin is broken on Rawhide -%patch51 -p1 -b .dist-removed +%patch -P 44 -p1 -b .systray-blockerror # 1742949, 1740132, 1739855 - missing drivers -%patch52 -p1 -b .missing-drivers -%patch53 -p1 -b .pillow-version +%patch -P 45 -p1 -b .missing-drivers +# 1772698 - Can't setup printer (HP LJ 2200): no attributes found in model.dat +%patch -P 46 -p1 -b .model-mismatch +# 1573430 - sixext.py:to_string_utf8:UnicodeDecodeError: 'utf-8' codec can't decode bytes +%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 +%patch -P 51 -p1 -b .find-driver +# 1833308 - hp-clean cannot clean HP PSC1410 - Device I/O error +%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 +%patch -P 54 -p1 -b .hpsetup-noscanjets +# 1963114 - patch for hplip firmware load timeout fix +%patch -P 55 -p1 -b .hpfirmware-timeout +# 1985251 - Incorrect permission for gpg directory +%patch -P 56 -p1 -b .gpgdir-perms +# 1987141 - hp-plugin installs malformed udev files +%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: +%patch -P 60 -p1 -b .pserror-int +# C99 compatibility patch by fweimer - several undefined functions in hpaio +# backend are declared in orblite.h +# Submitted upstream: +%patch -P 61 -p1 -b .hpaio-orblite-defs +# C99 compatibility patch by fweimer - undefined _DBG() and dynamic linking funcs in orblite.c +# - _DBG() looks like typo and new header is added for funcs +# Submitted upstream: +%patch -P 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 +%patch -P 1000 -p1 -b .fedora-gui +%endif + sed -i.duplex-constraints \ -e 's,\(UIConstraints.* \*Duplex\),//\1,' \ @@ -397,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 @@ -409,27 +656,27 @@ sed -i 's|^AM_INIT_AUTOMAKE|AM_INIT_AUTOMAKE([foreign])|g' configure.in # Regenerating all autotools files works-around these rpath issues. autoreconf --verbose --force --install -# hplip used improper way of checking python usability which worked -# until python38 - start to include python in spec file -# https://bugzilla.redhat.com/show_bug.cgi?id=1706233 -export CFLAGS="%{optflags} $(python3-config --includes)" -export CXXFLAGS="%{optflags} $(python3-config --includes)" - %configure \ - --enable-scan-build --enable-gui-build --enable-fax-build \ - --disable-foomatic-rip-hplip-install --enable-pp-build \ - --disable-qt4 --enable-qt5 \ - --enable-hpcups-install --enable-cups-drv-install \ + --enable-fax-build \ --enable-foomatic-drv-install \ + --enable-gui-build \ + --enable-hpcups-install \ --enable-hpijs-install \ - --disable-policykit --with-mimedir=%{_datadir}/cups/mime PYTHON=%{__python3} + --enable-pp-build \ + --enable-qt5 \ + --enable-scan-build \ + --disable-foomatic-rip-hplip-install \ + --disable-imageProcessor-build \ + --disable-policykit \ + --disable-qt4 \ + --with-mimedir=%{_datadir}/cups/mime PYTHON=%{__python3} -make %{?_smp_mflags} +%make_build %install mkdir -p %{buildroot}%{_bindir} -make install DESTDIR=%{buildroot} PYTHON=%{__python3} +%make_install PYTHON=%{__python3} # Create /run/hplip & /var/lib/hp mkdir -p %{buildroot}/run/hplip @@ -449,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 \ @@ -473,8 +721,76 @@ rm -f %{buildroot}%{_bindir}/foomatic-rip \ %{buildroot}%{_datadir}/applications/hplip.desktop \ %{buildroot}%{_datadir}/ppd/HP/*.ppd -mkdir -p %{buildroot}%{_datadir}/appdata -cp %{SOURCE3} %{buildroot}%{_datadir}/appdata/ +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 \ + %{buildroot}%{_bindir}/hp-diagnose_plugin \ + %{buildroot}%{_bindir}/hp-faxsetup \ + %{buildroot}%{_bindir}/hp-linefeedcal \ + %{buildroot}%{_bindir}/hp-makecopies \ + %{buildroot}%{_bindir}/hp-print \ + %{buildroot}%{_bindir}/hp-printsettings \ + %{buildroot}%{_bindir}/hp-systray \ + %{buildroot}%{_bindir}/hp-scan \ + %{buildroot}%{_bindir}/hp-toolbox \ + %{buildroot}%{_bindir}/hp-uiscan \ + %{buildroot}%{_bindir}/hp-wificonfig \ + %{buildroot}%{_datadir}/applications/*.desktop \ + %{buildroot}%{_datadir}/metainfo/hplip.appdata.xml \ + %{buildroot}%{_datadir}/icons/hicolor/*/apps/* \ + %{buildroot}%{_datadir}/hplip/base/imageprocessing.py* \ + %{buildroot}%{_datadir}/hplip/check.py* \ + %{buildroot}%{_datadir}/hplip/devicesettings.py* \ + %{buildroot}%{_datadir}/hplip/diagnose_plugin.py* \ + %{buildroot}%{_datadir}/hplip/faxsetup.py* \ + %{buildroot}%{_datadir}/hplip/linefeedcal.py* \ + %{buildroot}%{_datadir}/hplip/makecopies.py* \ + %{buildroot}%{_datadir}/hplip/print.py* \ + %{buildroot}%{_datadir}/hplip/printsettings.py* \ + %{buildroot}%{_datadir}/hplip/systray.py* \ + %{buildroot}%{_datadir}/hplip/scan.py* \ + %{buildroot}%{_datadir}/hplip/toolbox.py* \ + %{buildroot}%{_datadir}/hplip/uiscan.py* \ + %{buildroot}%{_datadir}/hplip/wificonfig.py* \ + %{buildroot}%{_datadir}/hplip/data/images \ + %{buildroot}%{_datadir}/hplip/scan \ + %{buildroot}%{_datadir}/hplip/ui5 \ + %{buildroot}%{_docdir}/hplip/hpscan.html \ + 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/ mkdir -p %{buildroot}%{_datadir}/icons/hicolor/{16x16,32x32,64x64}/apps install -p -m644 %{buildroot}%{_datadir}/hplip/data/images/16x16/hp_logo.png \ @@ -497,7 +813,7 @@ desktop-file-install \ --add-category HardwareSettings \ hplip.desktop -appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/*.appdata.xml +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.appdata.xml # install hp-uiscan desktop file sed -i 's/\/usr\/share\/icons\/Humanity\/devices\/48\/printer\.svg/hp_logo/' hp-uiscan.desktop @@ -510,6 +826,7 @@ desktop-file-install \ --add-category Scanning \ --add-category Application \ hp-uiscan.desktop +%endif # Regenerate hpcups PPDs on upgrade if necessary (bug #579355). install -p -m755 %{SOURCE1} %{buildroot}%{_bindir}/hpcups-update-ppds @@ -524,28 +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 - -# 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 - -# hp-setup needs to have cups service enabled and running for setups of queues -%pre -%{_bindir}/systemctl start cups &>/dev/null ||: -%{_bindir}/systemctl enable cups &>/dev/null ||: - %post # timeout is to prevent possible freeze during update %{_bindir}/timeout 10m -k 15m %{_bindir}/hpcups-update-ppds &>/dev/null ||: @@ -563,7 +858,6 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop %{_bindir}/hp-clean %{_bindir}/hp-colorcal %{_bindir}/hp-config_usb_printer -%{_bindir}/hp-diagnose_plugin %{_bindir}/hp-diagnose_queues %{_bindir}/hp-fab %{_bindir}/hp-firmware @@ -571,17 +865,20 @@ 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} %{_bindir}/hp-scan +%endif %{_bindir}/hp-sendfax %{_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 @@ -595,7 +892,6 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop %{_datadir}/hplip/clean.py* %{_datadir}/hplip/colorcal.py* %{_datadir}/hplip/config_usb_printer.py* -%{_datadir}/hplip/diagnose_plugin.py* %{_datadir}/hplip/diagnose_queues.py* %{_datadir}/hplip/fab.py* %{_datadir}/hplip/fax @@ -610,7 +906,9 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop %{_datadir}/hplip/plugin.py* %{_datadir}/hplip/probe.py* %{_datadir}/hplip/query.py* +%if 0%{?rhel} <= 8 || 0%{?fedora} %{_datadir}/hplip/scan.py* +%endif %{_datadir}/hplip/sendfax.py* %{_datadir}/hplip/setup.py* %{_datadir}/hplip/testpage.py* @@ -624,9 +922,10 @@ 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 +%endif %{_datadir}/ppd %{_sharedstatedir}/hp %dir %attr(0775,root,lp) /run/hplip @@ -653,9 +952,11 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop # Python extension %{python3_sitearch}/* +%if 0%{?rhel} <= 8 || 0%{?fedora} %files gui %{_bindir}/hp-check %{_bindir}/hp-devicesettings +%{_bindir}/hp-diagnose_plugin %{_bindir}/hp-faxsetup %{_bindir}/hp-linefeedcal %{_bindir}/hp-makecopies @@ -666,11 +967,12 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop %{_bindir}/hp-uiscan %{_bindir}/hp-wificonfig %{_datadir}/applications/*.desktop -%{_datadir}/appdata/hplip.appdata.xml +%{_datadir}/metainfo/hplip.appdata.xml # Files %{_datadir}/icons/hicolor/*/apps/* %{_datadir}/hplip/check.py* %{_datadir}/hplip/devicesettings.py* +%{_datadir}/hplip/diagnose_plugin.py* %{_datadir}/hplip/faxsetup.py* %{_datadir}/hplip/linefeedcal.py* %{_datadir}/hplip/makecopies.py* @@ -683,6 +985,7 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop # Directories %{_datadir}/hplip/data/images %{_datadir}/hplip/ui5 +%endif %files -n libsane-hpaio %{_libdir}/sane/libsane-*.so @@ -691,6 +994,391 @@ rm -f %{buildroot}%{_sysconfdir}/xdg/autostart/hplip-systray.desktop %config(noreplace) %{_sysconfdir}/sane.d/dll.d/hpaio %changelog +* Fri Jan 09 2026 Zdenek Dohnal - 3.25.8-1 +- hplip-3.25.8 is available (fedora#2415311) + +* Wed Sep 17 2025 Zdenek Dohnal - 3.25.6-1 +- hp-scan command failed to run and gives an error (fedora#2395809) +- use new GPG key from HP - new key was used as fix for CVE-2025-43023 + +* Tue Aug 12 2025 Zdenek Dohnal - 3.25.6-1 +- hplip-3.25.6 is available (fedora#2386814) + +* Thu Jul 24 2025 Fedora Release Engineering - 3.25.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jun 19 2025 Zdenek Dohnal - 3.25.2-7 +- Python 3.14 removed URLopener + +* Mon Jun 02 2025 Python Maint - 3.25.2-6 +- Rebuilt for Python 3.14 + +* Mon May 26 2025 Zdenek Dohnal - 3.25.2-5 +- hp-toolbox shows traceback when closing and there is no HP device (fedora#2360501) + +* Mon May 12 2025 Zdenek Dohnal - 3.25.2-4 +- plugin.conf now looks to use sha256 as well per email comms with HP, drop the revert + +* Wed May 07 2025 Zdenek Dohnal - 3.25.2-3 +- hp-plugin failed checksum due usage of different hashes (fedora#2361230) +- output is not seen after installing plugin (fedora#2361230) + +* Wed Apr 16 2025 Zdenek Dohnal - 3.25.2-2 +- remove Recommends on hplip-gui due complaint at (fedora#2360020) + +* Fri Apr 11 2025 Zdenek Dohnal - 3.25.2-1 +- hplip-3.25.2 is available (fedora#2353147) + +* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.5-5 +- hp-plugin: Use rpm queryformat to get version (no gawk dependency) + +* Thu Apr 03 2025 FeRD (Frank Dana) - 3.24.4-5 +- Use weak rich dependency for hplip-gui + +* Wed Apr 02 2025 FeRD (Frank Dana) - 3.24.4-5 +- Format QDateTime strings in Status History table, elsewhere + +* Wed Apr 02 2025 Zdenek Dohnal - 3.24.4-5 +- hp-plugin-download did not follow redirections and was missing '-o' in grep + +* Mon Mar 03 2025 Zdenek Dohnal - 3.24.4-4 +- enable following links with curl in all use cases (fedora#2349177) + +* Tue Feb 11 2025 Zdenek Dohnal - 3.24.4-3 +- require setup because of lp group + +* Fri Jan 24 2025 Zdenek Dohnal - 3.24.4-2 +- fix FTBFS (fedora#2340616) + +* Fri Jan 17 2025 Fedora Release Engineering - 3.24.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Tue Jul 23 2024 Zdenek Dohnal - 3.24.4-1 +- 2292623 - hplip-3.24.4 is available + +* Thu Jul 18 2024 Fedora Release Engineering - 3.23.12-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 3.23.12-7 +- Rebuilt for Python 3.13 + +* Thu Mar 21 2024 Zdenek Dohnal - 3.23.12-6 +- hp-plugin-download - curl removed --create-dir parameter + +* Mon Mar 18 2024 Zdenek Dohnal - 3.23.12-5 +- 2270031 - hp-firmware: module 'locale' not longer provides method 'format', causing traceback + +* Wed Jan 24 2024 Fedora Release Engineering - 3.23.12-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jan 20 2024 Fedora Release Engineering - 3.23.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Zdenek Dohnal - 3.23.12-2 +- add fallback url to hp-plugin-download + +* Mon Jan 08 2024 Zdenek Dohnal - 3.23.12-1 +- 2252302 - hplip-3.23.12 is available + +* Tue Oct 03 2023 Zdenek Dohnal - 3.23.8-1 +- 2239465 - hplip-3.23.8 is available + +* Tue Oct 03 2023 Zdenek Dohnal - 3.23.5-10 +- BSD-3-Clause-HP and python-ldap are added into SPDX list + +* Thu Aug 24 2023 Zdenek Dohnal - 3.23.5-9 +- hp-check: use pkgconf when checking for cups version + +* Thu Aug 03 2023 Zdenek Dohnal - 3.23.5-8 +- fallback to using external plugin for Hbpl1 printers + +* Fri Jul 28 2023 Zdenek Dohnal - 3.23.5-7 +- SPDX migration + +* Thu Jul 27 2023 Zdenek Dohnal - 3.23.5-6 +- remove redundant files + +* Fri Jul 21 2023 Zdenek Dohnal - 3.23.5-6 +- fix syntax warnings + +* Thu Jul 20 2023 Fedora Release Engineering - 3.23.5-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 18 2023 Adam Williamson - 3.23.5-4 +- Require curl, not curl-minimal, due to conflicts + +* Mon Jul 17 2023 Zdenek Dohnal - 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 - 3.23.5-2 +- Rebuilt for Python 3.12 + +* Tue Jun 06 2023 Zdenek Dohnal - 3.23.5-1 +- 2184067 - hplip-3.23.5 is available + +* Thu Jan 19 2023 Fedora Release Engineering - 3.22.10-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Dec 01 2022 Zdenek Dohnal - 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 - 3.22.10-2 +- C99 compatibility fixes +- Stop building the pcardext Python extension because it unusable (#2148210) + +* Wed Nov 23 2022 Zdenek Dohnal - 3.22.10-1 +- 2139309 - hplip-3.22.10 is available + +* Wed Oct 19 2022 Zdenek Dohnal - 3.22.6-5 +- distutils will be removed in Python3.12, use setuptools now + +* Thu Oct 13 2022 Zdenek Dohnal - 3.22.6-4 +- bump the NVR + +* Thu Oct 13 2022 Zdenek Dohnal - 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 - 3.22.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Zdenek Dohnal - 3.22.6-1 +- 2101790 - hplip-3.22.6 is available + +* Mon Jul 18 2022 Zdenek Dohnal - 3.22.4-3 +- recommend libsane-hpaio - duplicated scanners are better than no scanner + +* Mon Jun 13 2022 Python Maint - 3.22.4-2 +- Rebuilt for Python 3.11 + +* Tue May 17 2022 Zdenek Dohnal - 3.22.4-1 +- 2080235 - Misleading errors about missing shared libraries when scanning + +* Wed May 11 2022 Zdenek Dohnal - 3.22.4-1 +- 2079740 - hplip-3.22.4 is available + +* Mon Mar 28 2022 Zdenek Dohnal - 3.22.2-2 +- make libsane-hpaio only suggested to prevent possible duplicated scanner devices + +* Thu Mar 10 2022 Zdenek Dohnal - 3.22.2-1 +- 2059085 - hplip-3.22.2 is available + +* Thu Jan 20 2022 Fedora Release Engineering - 3.21.12-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 17 2022 Zdenek Dohnal - 3.21.12-1 +- 2015910 - [GUI] hp-setup crashes when loading smart_install module + +* Fri Jan 14 2022 Zdenek Dohnal - 3.21.12-1 +- 1959242 - hplip-3.21.12 is available + +* Fri Dec 03 2021 Zdenek Dohnal - 3.21.2-15 +- 2028697 - hp-setup trackbacks when hplip-gui RPM is not installed + +* Tue Nov 23 2021 Zdenek Dohnal - 3.21.2-14 +- 2025853 - hplip: double "and" in license + +* Tue Oct 26 2021 Zdenek Dohnal - 3.21.2-13 +- 2015428 - python3.10 has Callable in collections.abc +- GUI hp-setup uses avahi-browse +- adjust osname for CoreOS/Linux +- 2015428 - python3.10 doesn't do an implicit conversion for integer arguments + +* Tue Sep 14 2021 Sahana Prasad - 3.21.2-12 +- Rebuilt with OpenSSL 3.0.0 + +* Fri Sep 03 2021 Zdenek Dohnal - 3.21.2-11 +- 1995647 - Hplip package shows as proprietary in Gnome Software + +* Fri Jul 30 2021 Zdenek Dohnal - 3.21.2-10 +- 1985251 - Incorrect permission for gpg directory +- 1987141 - hp-plugin installs malformed udev files +- fixed warning: redhatenterpriselinux distro is not found in AUTH_TYPES + +* Thu Jul 22 2021 Fedora Release Engineering - 3.21.2-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jul 02 2021 Zdenek Dohnal - 3.21.2-8 +- 1976465 - [hplip] PY_SSIZE_T_CLEAN macro must be defined for '#' formats +- require usbutils - needed by hp-diagnose_queues + +* Mon Jun 28 2021 Zdenek Dohnal - 3.21.2-7 +- sleep after utils.run() (related #1963114) + +* Fri Jun 11 2021 Zdenek Dohnal - 3.21.2-6 +- 1963114 - patch for hplip firmware load timeout fix + +* Wed Jun 09 2021 Zdenek Dohnal - 3.21.2-5 +- track hplip-repack.sh as source, to have it in srpm + +* Wed Jun 09 2021 Zdenek Dohnal - 3.21.2-4 +- remove redundant files + +* Fri Jun 04 2021 Python Maint - 3.21.2-3 +- Rebuilt for Python 3.10 + +* Thu Apr 22 2021 Zdenek Dohnal - 3.21.2-2 +- 1951922 - hp-systray doesn't support a valid --qt5 option + +* Fri Feb 19 2021 Zdenek Dohnal - 3.21.2-1 +- 1929977 - hplip-3.21.2 is available + +* Fri Feb 19 2021 Zdenek Dohnal - 3.20.11-6 +- get out of hp-setup if the device is a standalone scanner + +* Thu Feb 18 2021 Zdenek Dohnal - 3.20.11-6 +- remove the old search algorithm + +* Fri Feb 05 2021 Zdenek Dohnal - 3.20.11-5 +- 1925259 - %pre scriptlet enables and starts cups.service, which is unnecessary +- 1919556 - hp-fab crashed: QFileDialog.getOpenFileName is not used correctly + +* Tue Feb 02 2021 Zdenek Dohnal - 3.20.11-4 +- 1912147 - Enable matching for '_series' drivers in PPD search algorithm +- rework optional gui messages + +* Tue Jan 26 2021 Fedora Release Engineering - 3.20.11-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Jan 14 2021 Zdenek Dohnal - 3.20.11-2 +- apply eln changes + +* Wed Dec 02 2020 Zdenek Dohnal - 3.20.11-1 +- 1903029 - hplip-3.20.11 is available + +* Thu Nov 19 2020 Zdenek Dohnal - 3.20.9-4 +- 1899410 - non-sudoers cannot authenticate because of bad username in prompt + +* Thu Nov 05 2020 Zdenek Dohnal - 3.20.9-3 +- make is no longer in buildroot by default + +* Thu Oct 22 2020 Zdenek Dohnal - 3.20.9-2 +- timeb is removed from glibc + +* Tue Oct 13 2020 Zdenek Dohnal - 3.20.9-2 +- downloading gpg key for plugin can take some time and wayland can + kill the connection, work it around to prefer more stable keyservers + +* Mon Oct 12 2020 Zdenek Dohnal - 3.20.9-2 +- fix the patch for adding uncompressed ppd via CLI +- fix the patch for GUI too + +* Fri Oct 02 2020 Zdenek Dohnal - 3.20.9-1 +- 3.20.9 + +* Wed Sep 30 2020 Zdenek Dohnal - 3.20.6-13 +- fix bashisms in hplip-configure-python.patch +- thanks for Daniel Pielmeier from Gentoo for review + +* Fri Sep 11 2020 Zdenek Dohnal - 3.20.6-12 +- move ifdef for removing hplip-gui a little in install phase + +* Thu Aug 27 2020 Josef Ridky - 3.20.6-11 +- Rebuilt for new net-snmp release + +* Tue Aug 25 2020 Zdenek Dohnal - 3.20.6-10 +- fix eln build - remove unpackaged files + +* Tue Aug 25 2020 Zdenek Dohnal - 3.20.6-9 +- 1772698 - dont use uninitialized value as an index + +* Mon Aug 24 2020 Zdenek Dohnal - 3.20.6-8 +- typo in hplip-model-mismatch.patch causes regression for 1772698 + +* Wed Aug 05 2020 Zdenek Dohnal - 3.20.6-7 +- don't build gui for newer RHELs + +* Sat Aug 01 2020 Fedora Release Engineering - 3.20.6-6 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 28 2020 Zdenek Dohnal - 3.20.6-5 +- 1861055 - hplip: remove threading.Thread.isAlive method calls - use threading.Thread.is_alive() + +* Tue Jul 28 2020 Fedora Release Engineering - 3.20.6-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 3.20.6-3 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Tue Jun 23 2020 Zdenek Dohnal - 3.20.6-2 +- appdata.xml needs to be in %%{_datadir}/metainfo + +* Wed Jun 17 2020 Zdenek Dohnal - 3.20.6-1 +- 3.20.6 + +* Tue Jun 16 2020 Zdenek Dohnal - 3.20.5-6 +- remove the check for scripts which are only in hplip-gui + +* Tue Jun 16 2020 Zdenek Dohnal - 3.20.5-5 +- fix the optional GUI + +* Fri Jun 05 2020 Zdenek Dohnal - 3.20.5-4 +- 1833308 - hp-clean cannot clean HP PSC1410 - Device I/O error + +* Mon Jun 01 2020 Zdenek Dohnal - 3.20.5-4 +- 1794147 - HP-setup crashes with Python3 ui5 module not found error +- 1590014 - hplip PPD search doesn't expect '-' in device name + +* Tue May 26 2020 Miro HronĨok - 3.20.5-3 +- Rebuilt for Python 3.9 + +* Mon May 25 2020 Zdenek Dohnal - 3.20.5-2 +- fix infinite loop in password dialog in hp-toolbox + +* Thu May 14 2020 Zdenek Dohnal - 3.20.5-1 +- 3.20.5 + +* Wed Apr 15 2020 Zdenek Dohnal - 3.20.3-5 +- model mismatch during scanning due 'HP_' string + +* Tue Apr 07 2020 Zdenek Dohnal - 3.20.3-4 +- add keyserver.ubuntu.com too (1821469) + +* Tue Apr 07 2020 Zdenek Dohnal - 3.20.3-3 +- 1821469 - use list of keyservers when trying to download gpg keys + +* Wed Mar 25 2020 Tom Stellard - 3.20.3-2 +- Fix some -Wreturn-type warnings +- clang treates these as errors, so this fixes the build with clang. + +* Tue Mar 10 2020 Zdenek Dohnal - 3.20.3-1 +- 3.20.3 + +* Wed Mar 04 2020 Zdenek Dohnal - 3.20.2-1 +- 3.20.2 + +* Mon Feb 17 2020 Zdenek Dohnal - 3.19.12-4 +- 1573430 - sixext.py:to_string_utf8:UnicodeDecodeError: 'utf-8' codec can't decode bytes +- fix pillow version check + +* Wed Jan 29 2020 Fedora Release Engineering - 3.19.12-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jan 08 2020 Zdenek Dohnal - 3.19.12-2 +- 1788643 - hp-plugin needs explicit requirement for tar + +* Thu Dec 12 2019 Zdenek Dohnal - 3.19.12-1 +- 3.19.12 + +* Thu Nov 28 2019 Zdenek Dohnal - 3.19.11-1 +- 3.19.11 + +* Thu Nov 28 2019 Zdenek Dohnal - 3.19.10-3 +- 1777457 - hplip-3.19.10-2 breaks support for devices with '_series' in device id + +* Mon Nov 18 2019 Zdenek Dohnal - 3.19.10-2 +- 1773345 - Problems with HP M281fdw LaserJet + +* Fri Nov 15 2019 Zdenek Dohnal - 3.19.10-2 +- 1772698 - missing HP LaserJet 2200 driver + +* Fri Nov 01 2019 Zdenek Dohnal - 3.19.10-1 +- 3.19.10 + * Tue Oct 01 2019 Zdenek Dohnal - 3.19.8-2 - hp-check traceback due change in python-pillow diff --git a/plans.fmf b/plans.fmf new file mode 100644 index 0000000..f4c2755 --- /dev/null +++ b/plans.fmf @@ -0,0 +1,37 @@ +/tier1-internal: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/tier1/internal + +/tier1-public: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/tier1/public + +/tier2-tier3-internal: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/tier2-tier3/internal + +/tier2-tier3-public: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/tier2-tier3/public + + +/others-internal: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/others/internal + +/others-public: + plan: + import: + url: https://gitlab.com/redhat/centos-stream/tests/hplip.git + name: /plans/others/public + diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..3092346 --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,10 @@ +--- +badfuncs: + allowed: + # printers usually do not live on networks which would require + # IPv6 due having too many hosts on one network, so it is not + # a priority to have IPv6 support. + # It is reported upstream at https://bugzilla.redhat.com/show_bug.cgi?id=2275938 + /usr/lib*/libhpmud.so.*: + - gethostbyname + - inet_addr diff --git a/sources b/sources index 1b894a7..601b241 100644 --- a/sources +++ b/sources @@ -1,3 +1 @@ -SHA512 (hplip-3.19.8.tar.gz) = 99b7661c9b1d70f3c762658fcbff1ab0c170be8f8fd6cc8bbc80bb0860ccc6d69d38b662ff8be2bd38986a95385a5e5766f22003ee3e74b764dab3d46c6cb9ac -SHA512 (hp-laserjet_cp_1025nw.ppd.gz) = d79aa8c777b6be434578febe4bdce6b208ea2f13a5be48c855ff4b74f008cf20fd24ba1c003fca6dc532d5c558e162333dd1d3ca2cc13d980c7668381e121ec1 -SHA512 (hp-laserjet_professional_p_1102w.ppd.gz) = 8c7e5cb2122bed3ee0d789297f60fd92836f947af486d986af60bf98fefb05c38093d62c8871e920ab6b0b31f2f71632a23c71c55be99746e3658959e083e888 +SHA512 (hplip-3.25.8-repack.tar.gz) = e4f82215e2753bee864e5ba643be2ce3566f1691638c35c74016279f92c872713d06e38a066d283f03f3e571d10c8ac2f1539bd32f6bafd1958641d96fe11059 diff --git a/upstream-key.gpg b/upstream-key.gpg deleted file mode 100644 index bccc555..0000000 --- a/upstream-key.gpg +++ /dev/null @@ -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-----