hplip: fix Python wrappers

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.
This commit is contained in:
Thomas Tuegel 2017-09-20 17:03:12 -05:00
parent 5ab37fb913
commit 1e2ebee42a
No known key found for this signature in database
GPG Key ID: 22CBF5249D4B4D59

@ -61,10 +61,9 @@ pythonPackages.buildPythonApplication {
nativeBuildInputs = [ nativeBuildInputs = [
pkgconfig pkgconfig
makeWrapper
]; ];
propagatedBuildInputs = with pythonPackages; [ pythonPath = with pythonPackages; [
dbus dbus
pillow pillow
pygobject2 pygobject2
@ -74,6 +73,8 @@ pythonPackages.buildPythonApplication {
pyqt4 pyqt4
]; ];
makeWrapperArgs = [ ''--prefix PATH : "${nettools}/bin"'' ];
prePatch = '' prePatch = ''
# HPLIP hardcodes absolute paths everywhere. Nuke from orbit. # HPLIP hardcodes absolute paths everywhere. Nuke from orbit.
find . -type f -exec sed -i \ find . -type f -exec sed -i \
@ -145,10 +146,30 @@ pythonPackages.buildPythonApplication {
rm $out/etc/udev/rules.d/56-hpmud.rules rm $out/etc/udev/rules.d/56-hpmud.rules
''; '';
postFixup = '' # The installed executables are just symlinks into $out/share/hplip,
wrapProgram $out/lib/cups/filter/hpps \ # but wrapPythonPrograms ignores symlinks. We cannot replace the Python
--prefix PATH : "${nettools}/bin" # modules in $out/share/hplip with wrapper scripts because they import
# each other as libraries. Instead, we emulate wrapPythonPrograms by
# 1. Calling patchPythonProgram on the original script in $out/share/hplip
# 2. Making our own wrapper pointing directly to the original script.
dontWrapPythonPrograms = true;
preFixup = ''
buildPythonPath "$out $pythonPath"
for bin in $out/bin/*; do
py=$(readlink -m $bin)
rm $bin
echo "patching \`$py'..."
patchPythonScript "$py"
echo "wrapping \`$bin'..."
makeWrapper "$py" "$bin" \
--prefix PATH ':' "$program_PATH" \
--set PYTHONNOUSERSITE "true" \
$makeWrapperArgs
done
'';
postFixup = ''
substituteInPlace $out/etc/hp/hplip.conf --replace /usr $out substituteInPlace $out/etc/hp/hplip.conf --replace /usr $out
'' + stdenv.lib.optionalString (!withPlugin) '' '' + stdenv.lib.optionalString (!withPlugin) ''
# A udev rule to notify users that they need the binary plugin. # A udev rule to notify users that they need the binary plugin.