I sat down to have a look at this, and struggled to figure out what the
package is actually trying to do in its build.
There's some wacky stuff going on, which isn't actually working, so I
started by trimming that out, and enabling set -e.
> dh_missing: warning: lib/python3.9/libpyferret.so exists in debian/tmp but is
> not installed to anywhere (related file:
> "debian/tmp/lib/python3.8/libpyferret.so")
From what I can see, this library is a symlink, created for other
libraries to link to, but not installing under that name, only as a
Python C extension.
With the attached patchset, I can get it to build with 3.8 and 3.9,
which gets us to the same state as unstable, which is totally broken:
$ pyferret3
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3/dist-packages/pyferret/__init__.py", line 75, in
<module>
from pyferret import libpyferret
ImportError:
/usr/lib/python3/dist-packages/pyferret/libpyferret.cpython-38-x86_64-linux-gnu.so:
undefined symbol: load_dsg_mask_ftrset_var_
>>>
Then there's all the shared libraries in
/usr/lib/ferret-vis/external_functions/pylibs that want to link to
libpyferret:
$ ldd /usr/lib/ferret-vis/external_functions/pylibs/subtract.so
linux-vdso.so.1 (0x00007ffdd76ad000)
libeatmydata.so => /usr/lib/x86_64-linux-gnu/libeatmydata.so
(0x00007f30e9d3d000)
libpyferret.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f30e9d37000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f30e9b72000)
/lib64/ld-linux-x86-64.so.2 (0x00007f30e9d4f000)
I don't know what's supposed to use those, but they probably shouldn't
be linking to a library that isn't installed.
If there are plugins like this that need to link to C Python Extensions,
I don't know if it makes any sense to build pyferret for multiple Python
versions. But I don't know enough about the package, to understand
exactly what they are for, and how they're meant to be linked.
So... Some patches attached that get us to the broken status-quo of
unstable, but not sure that that's a useful place to be. I'm certainly
not going to NMU them.
I'd have filed an MR, but the git repo is out of date...
SR
--
Stefano Rivera
http://tumbleweed.org.za/
+1 415 683 3272
From e6f7f375be676af36ce19c0e2e2057ba55d84094 Mon Sep 17 00:00:00 2001
From: Stefano Rivera <[email protected]>
Date: Fri, 16 Oct 2020 23:01:16 -0700
Subject: [PATCH 1/4] debian/rules: set -e; before any multi-command lines.
---
debian/changelog | 7 +++++++
debian/rules | 2 ++
2 files changed, 9 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 7c959ea..977e734 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+pyferret (7.6.3-1.1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * debian/rules: set -e; before any multi-command lines.
+
+ -- Stefano Rivera <[email protected]> Fri, 16 Oct 2020 23:00:38 -0700
+
pyferret (7.6.3-1) unstable; urgency=medium
* New upstream release
diff --git a/debian/rules b/debian/rules
index 5ba46b2..5c7c0f2 100755
--- a/debian/rules
+++ b/debian/rules
@@ -41,6 +41,7 @@ override_dh_auto_install:
# Horrible hack breaks The Debian Way. I'm doing the build in the 'install' phase, as i'm installing into debian/tmp
# Doing it any earlier, and dh_prep will remove debian/tmp.
# This means I'm also doing 'test' after the Install, not between during make & install. gack.
+ set -e; \
for p in $(PY3) ; do \
mkdir -p $(INSTALLDIR)/lib/$$p ; \
cp $(CURDIR)/install/lib/$$p/site-packages//pyferret/libpyferret.cpython-$$l-$(ARCH).so \
@@ -57,6 +58,7 @@ override_dh_auto_install:
@echo "Now doing bench tests"
ln -s debian/pyferret3 $(INSTALLDIR)/lib/$(shell py3versions -d)/pyferret
# First build necessary files
+ set -e; \
for p in $(PY3) ; do \
sed -e 's%@ARCH@%${ARCH}%' \
-e 's%@LIBDIR@%${LIBDIR}%' \
--
2.28.0
From 626a273af6853f66e5e989df539e53dcd31a3e7f Mon Sep 17 00:00:00 2001
From: Stefano Rivera <[email protected]>
Date: Fri, 16 Oct 2020 23:01:53 -0700
Subject: [PATCH 2/4] debian/rules: Drop cp that wasn't executing, because
there is no "l" variable.
---
debian/changelog | 2 ++
debian/rules | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 977e734..79073a0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ pyferret (7.6.3-1.1) UNRELEASED; urgency=medium
* Non-maintainer upload.
* debian/rules: set -e; before any multi-command lines.
+ * debian/rules: Drop cp that wasn't executing, because there is no "l"
+ variable.
-- Stefano Rivera <[email protected]> Fri, 16 Oct 2020 23:00:38 -0700
diff --git a/debian/rules b/debian/rules
index 5c7c0f2..75b0854 100755
--- a/debian/rules
+++ b/debian/rules
@@ -44,8 +44,6 @@ override_dh_auto_install:
set -e; \
for p in $(PY3) ; do \
mkdir -p $(INSTALLDIR)/lib/$$p ; \
- cp $(CURDIR)/install/lib/$$p/site-packages//pyferret/libpyferret.cpython-$$l-$(ARCH).so \
- $(INSTALLDIR)/lib/$$p ; \
n=`echo $$p | tr -d 'python' | tr -d '.' ` ; \
ln -s $(CURDIR)/install/lib/$$p/site-packages//pyferret/libpyferret.cpython-$$n-$(ARCH).so \
$(INSTALLDIR)/lib/$$p/libpyferret.so ; \
--
2.28.0
From 8260df7d9aaa7742e3ed87656e177fecf121bbd1 Mon Sep 17 00:00:00 2001
From: Stefano Rivera <[email protected]>
Date: Fri, 16 Oct 2020 23:03:15 -0700
Subject: [PATCH 3/4] debian/rules: Drop INSTALLDIR, it wasn't understood by
the Makefile.
---
debian/changelog | 1 +
debian/rules | 3 +--
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 79073a0..4bca304 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,7 @@ pyferret (7.6.3-1.1) UNRELEASED; urgency=medium
* debian/rules: set -e; before any multi-command lines.
* debian/rules: Drop cp that wasn't executing, because there is no "l"
variable.
+ * debian/rules: Drop INSTALLDIR, it wasn't understood by the Makefile.
-- Stefano Rivera <[email protected]> Fri, 16 Oct 2020 23:00:38 -0700
diff --git a/debian/rules b/debian/rules
index 75b0854..cce933f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -47,8 +47,7 @@ override_dh_auto_install:
n=`echo $$p | tr -d 'python' | tr -d '.' ` ; \
ln -s $(CURDIR)/install/lib/$$p/site-packages//pyferret/libpyferret.cpython-$$n-$(ARCH).so \
$(INSTALLDIR)/lib/$$p/libpyferret.so ; \
- mkdir -p debian/tmp-$$p ; \
- $(MAKE) HOSTTYPE=debian PYTHON_EXE=$$p INSTALLDIR=debian/tmp-$$p clean all install ; \
+ $(MAKE) HOSTTYPE=debian PYTHON_EXE=$$p clean all install ; \
done
find debian \( -name '*.pyo' -o -name '*.pyc' \) -delete
find debian -type d -name __pycache__ -delete
--
2.28.0
From 7c0fed016238f94ee9f42a25adf0f05a10106dce Mon Sep 17 00:00:00 2001
From: Stefano Rivera <[email protected]>
Date: Fri, 16 Oct 2020 23:23:59 -0700
Subject: [PATCH 4/4] debian/rules: Remove unversionsed symlink libpyferret.so
after building the extensions that link to it. (Closes: #972340)
---
debian/changelog | 2 ++
debian/rules | 1 +
2 files changed, 3 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 4bca304..2af894a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,6 +5,8 @@ pyferret (7.6.3-1.1) UNRELEASED; urgency=medium
* debian/rules: Drop cp that wasn't executing, because there is no "l"
variable.
* debian/rules: Drop INSTALLDIR, it wasn't understood by the Makefile.
+ * debian/rules: Remove unversionsed symlink libpyferret.so after building
+ the extensions that link to it. (Closes: #972340)
-- Stefano Rivera <[email protected]> Fri, 16 Oct 2020 23:00:38 -0700
diff --git a/debian/rules b/debian/rules
index cce933f..a41265b 100755
--- a/debian/rules
+++ b/debian/rules
@@ -48,6 +48,7 @@ override_dh_auto_install:
ln -s $(CURDIR)/install/lib/$$p/site-packages//pyferret/libpyferret.cpython-$$n-$(ARCH).so \
$(INSTALLDIR)/lib/$$p/libpyferret.so ; \
$(MAKE) HOSTTYPE=debian PYTHON_EXE=$$p clean all install ; \
+ rm $(INSTALLDIR)/lib/$$p/libpyferret.so; \
done
find debian \( -name '*.pyo' -o -name '*.pyc' \) -delete
find debian -type d -name __pycache__ -delete
--
2.28.0