HPLIP's getSystemPPDs() function relies on searching for PPDs below common FHS
paths. None of these exist on NixOS, but the code assumes that at least one of
the directories will be found, and crashes when it doesn't (cups_ppd_path is
None and the code passes that to os.path.join).
A usable PPD search path for the running system on NixOS is
/var/lib/cups/path/share, so this patches the source to check this path as well.
This should fix the NixOS case and keep non-NixOS cases working too.
Otherwise, things like hp-setup segfault if you run them from another
nixpkgs checkout:
```
HP Linux Imaging and Printing System (ver. 3.20.5)
Printer/Fax Setup Utility ver. 9.0
Copyright (c) 2001-18 HP Development Company, LP
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to distribute it
under certain conditions. See COPYING file for more details.
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
[1] 4543 abort (core dumped) result/bin/hp-setup
```
Otherwise, things like `hp-setup` fail finding gi:
```
HP Linux Imaging and Printing System (ver. 3.20.5)
Printer/Fax Setup Utility ver. 9.0
Copyright (c) 2001-18 HP Development Company, LP
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to distribute it
under certain conditions. See COPYING file for more details.
Traceback (most recent call last):
File "/nix/store/rmzq8c4n47s4q4p31w18waz0zrba2ljl-hplip-3.20.5/share/hplip/setup.py", line 314, in <module>
ui = import_module(ui_package + ".setupdialog")
File "/nix/store/n0b076p351ma864q38if4yglsg99hw2s-python3-3.8.3/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/nix/store/rmzq8c4n47s4q4p31w18waz0zrba2ljl-hplip-3.20.5/share/hplip/ui5/setupdialog.py", line 31, in <module>
from base import device, utils, models, pkit
File "/nix/store/rmzq8c4n47s4q4p31w18waz0zrba2ljl-hplip-3.20.5/share/hplip/base/pkit.py", line 38, in <module>
from gi import _gobject as gobject
ModuleNotFoundError: No module named 'gi'
```
Beginning with commit 8ffd6af27e,
the build recipe for `hplipWithPlugin` explicitely drops a
udev rule file that is delivered with the sources.
In `hplip` (without plugin), the rule file is retained.
The udev rules takes care of uploading firmware
to certain printers (and maybe of other things),
e.g. to HP LaserJet 1000.
This commit reinstates the rule file and
expands the fixup script so that the rules
are also patched in the WithPlugin version.
hplip's udev rule uses `nohup` to attempt to detach
its printer configuration script from the udev process.
However, this attempt is futile as udev
tracks its child processes with cgroups:
https://unix.stackexchange.com/a/243648
The hardcoded path to `nohup` was patched to use Nix' `nohup`.
This commit alters the patch script so
that it simply drops the call to `nohup`.
Also fixes multiples issues:
- broken plugins:
- `fax_marvell.so file is not present or symbolic link is missing`
- `lj.so library file doesn't have user/group execute permission.`
- `bb_escl.so file is not present or symbolic link is missing`
- multiple error during configuration phase which prevented `*.ppd`
generation:
- `ppdc: Unable to find include file "<font.defs>"`
- patched configure time `perl` script
- patched use of `file`
- some potentially problematic filter and services:
- patched reference to ghost script and fonts dir in filter.
- patched usb configuration service.
- patch scripts so that they refer to valid location.
Add some options:
- `withStaticPPDInstall`: Install `*.ppd` files along with `*.drv`.
When true, configure outputs: `checking for cups ppd install... yes`.
We cannot rely on wrapPythonPrograms to wrap the installed executables because
they are symlinks (which it ignores). Instead, we have to emulate it to make
the wrappers ourselves.
* hplip: introduce nettools dependency
Some HP printers (notably a HP MFP M477fnw) need to run `hostname` as part of
the printing process. This executable is provided by the "nettools" package.
* hplip: prepend nettools to PATH