Bug 253907 - archivers/py-borgbackup: Check for devel/py-llfuse via PYTHON_PKGNAMEPREFIX
Summary: archivers/py-borgbackup: Check for devel/py-llfuse via PYTHON_PKGNAMEPREFIX
Status: In Progress
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-ports-bugs (Nobody)
Depends on:
Reported: 2021-02-28 12:42 UTC by Dimitry Andric
Modified: 2021-02-28 19:55 UTC (History)
1 user (show)

See Also:
jjuanino: maintainer-feedback+
dim: merge-quarterly+

Fix RUN_DEPENDS to check for llfuse packages instead of shared library (587 bytes, patch)
2021-02-28 12:42 UTC, Dimitry Andric
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitry Andric freebsd_committer 2021-02-28 12:42:04 UTC
Created attachment 222873 [details]
Fix RUN_DEPENDS to check for llfuse packages instead of shared library

Recently in ports r559094 a lot of Python port Makefiles had their path checks relaxed because newer versions of Python changed the dynamic library naming scheme:

"Since ports r558913 Python 3.8 incorporates BPO-42604 [1] which changed the
shared libs naming scheme.  This means "EXT_SUFFIX" is now derived from
SOABI and yields with Python 3.8 to ".cpython-38.so" instead of ".so".

The affected ports strip the libaries in the "post-install" target via
hardcoded path(s) and the build fails at the end because the new extension
is not expected at this place."

Indeed my poudriere failed to find the py-llfuse package, even though it just installed it: 

=======================<phase: run-depends    >============================
===>   py39-borgbackup-1.1.15 depends on file: /usr/local/lib/python3.9/site-packages/llfuse.so - not found
===>   Installing existing package /packages/All/py39-llfuse-1.3.8.txz
[stable12-r367684-default-job-01] Installing py39-llfuse-1.3.8...
[stable12-r367684-default-job-01] `-- Installing fusefs-libs-2.9.9_2...
[stable12-r367684-default-job-01] `-- Extracting fusefs-libs-2.9.9_2: .......... done
[stable12-r367684-default-job-01] Extracting py39-llfuse-1.3.8: ......... done
Message from fusefs-libs-2.9.9_2:

Install the FUSE kernel module (kldload fusefs) to use this port.
===>   py39-borgbackup-1.1.15 depends on file: /usr/local/lib/python3.9/site-packages/llfuse.so - not found
*** Error code 1

Actually the .so file is now named /usr/local/lib/python3.9/site-packages/llfuse.cpython-39.so.

Instead of attempting to guess the file extension, I propose to simply check for the existence of the py-llfuse package itself, as is done in many other ports, e.g.:

FUSE_DESC=     Support to mount locally borg backup files
FUSE_RUN_DEPENDS=      ${PYTHON_PKGNAMEPREFIX}llfuse>0:devel/py-llfuse@${PY_FLAVOR}

(Of course, if a minimum version is required, we can always put "> x.y.z" in the comparison).
Comment 1 Jose G. Juanino 2021-02-28 18:03:37 UTC
Hi, thanks for submit this problem reports.

I have done some testing with the proposed patch with distinct python flavors (up to 3.9) and works fine. Please, commit the patch. Regards.
Comment 2 commit-hook freebsd_committer 2021-02-28 19:52:26 UTC
A commit references this bug:

Author: dim
Date: Sun Feb 28 19:51:25 UTC 2021
New revision: 566802
URL: https://svnweb.freebsd.org/changeset/ports/566802

  Fix run-depends check for py-llfuse after shared libs naming change

  Newer python versions (after 3.8.7) have changed the names of extension
  shared libraries from ".so" to e.g. ".cpython-38.so". So for the FUSE
  option, now check for the py-llfuse package instead of the dynamic
  library llfuse.so.

  Approved by:    jjuanino@gmail.com (maintainer)
  PR:             253907
  MFH:            2021Q

Comment 3 Dimitry Andric freebsd_committer 2021-02-28 19:55:34 UTC
Thanks, keeping this open until I've MFH'd it.