On 16.02.2021 19:51, Yasuhito FUTATSUKI wrote:
Update to 1.14.1 break out-of-tree build of python bindings (with python
3.7).
1.14.0 works with same options, makefiles, etc. 1.14.1 fails to build
bindings when libraries are installed and swig is not installed (bindings are
built as separate ntity, not together with subversion libraries themselves):
Even subversion libraries are installed, 'make check-swig-py' needs
subversion libraries in build tree. Those will be built before
building bindings if they were not built yet.
It was not so for long time (including 1.14.0) with "patched" (re-generated)
build-outputs.mk.
--- check-swig-py ---
if [ "LD_LIBRARY_PATH" = "DYLD_LIBRARY_PATH" ]; then for d in
/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/libsvn_swig_py
/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/../../../libsvn_*; do if [ -n
"$DYLD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$d/.libs"; else
LD_LIBRARY_PATH="$d/.libs"; fi; done; export LD_LIBRARY_PATH; fi; cd
/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python; /usr/local/bin/python3.7
/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/tests/run_all.py
Traceback (most recent call last):
File
"/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/tests/run_all.py",
line 23, in <module>
import mergeinfo, core, client, delta, checksum, pool, fs, ra, wc,
repository, \
File
"/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/tests/mergeinfo.py",
line 22, in <module>
from svn import core, repos, fs
File
"/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/svn/core.py",
line 26, in <module>
from libsvn.core import *
File
"/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/libsvn/core.py",
line 26, in <module>
from . import _core
ImportError: cannot import name '_core' from 'libsvn'
(/wrkdirs/usr/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/libsvn/__init__.py)
*** [check-swig-py] Error code 1
I tried to reproduce, but I couldn't reproduce the issue.
Did there exist subversion/bindings/swig/python/.libs/_core.so?
Yes.
How about subversion/libsvn_client/.libs/libsvn_client-1.so.0, etc?
No. But it didn't exist for 1.14.0 too.
I did below on FreeBSD 12.2:
[[[
tar xpf /usr/ports/distfiles/subversion-1.14.1.tar.bz2
mkdir out-of-tree-svn-1.14.1
cd out-of-tree-svn-1.14.1
env PYTHON=/usr/local/bin/python3.7 sh ../subversion-1.14.1/configure \
--with-sqlite=/usr/local \
--with-expat=/usr/local/include:/usr/local/lib:expat --without-swig \
--with-apr=/usr/local/bin/apr-1-config \
--with-apr-util=/usr/local/bin/apu-1-config \
--without-gnome-keyring --without-kwallet \
--with-apxs=/usr/local/sbin/apxs \
--prefix=/usr/local --localstatedir=/var --mandir=/usr/local/man \
--infodir=/usr/local/info --with-py3c=/usr/local
make check-swig-py
]]]
and it passed the test.
As you know about FreeBSD, try to build `devel/py-subversion' from fresh port
tree. You'll get error. Revert ports tree to before 1.14.1 import and try
again. No error.
Really, new "from . import _XXX" causes problem. I've patched all
subversion/bindings/swig/python/*.py files and it helps. I'm not python programmer and I don't know what is
difference between old "import _XXX" and new "from . import _XXX", but it helps.
(Note: if source tree subversion-1.14.1 is not clean, "make swig-py"
stopped with error before building Python bindings.)
Result of ldd _core.so:
[[[
$ ldd subversion/bindings/swig/python/.libs/_core.so
[[[
> ldd
./work-py37/subversion-1.14.1/subversion/bindings/swig/python/.libs/_core.so
./work-py37/subversion-1.14.1/subversion/bindings/swig/python/.libs/_core.so:
libsvn_swig_py-1.so.0 =>
/usr/home/lev/FreeBSD/ports/devel/py-subversion/work-py37/subversion-1.14.1/subversion/bindings/swig/python/libsvn_swig_py/.libs/libsvn_swig_py-1.so.0
(0x800727000)
libsvn_client-1.so.0 => /usr/local/lib/libsvn_client-1.so.0
(0x80073f000)
libsvn_wc-1.so.0 => /usr/local/lib/libsvn_wc-1.so.0 (0x800e00000)
libsvn_ra-1.so.0 => /usr/local/lib/libsvn_ra-1.so.0 (0x8007d1000)
libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0 (0x800eb1000)
libaprutil-1.so.0 => /usr/local/lib/libaprutil-1.so.0 (0x800ed3000)
libsvn_diff-1.so.0 => /usr/local/lib/libsvn_diff-1.so.0 (0x8007e1000)
libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0 (0x800f02000)
libapr-1.so.0 => /usr/local/lib/libapr-1.so.0 (0x800f9c000)
libthr.so.3 => /lib/libthr.so.3 (0x800fdd000)
libc.so.7 => /lib/libc.so.7 (0x80024e000)
libsvn_ra_local-1.so.0 => /usr/local/lib/libsvn_ra_local-1.so.0
(0x80100a000)
libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0 (0x801016000)
libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0 (0x801057000)
libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0 (0x801067000)
libsvn_fs_x-1.so.0 => /usr/local/lib/libsvn_fs_x-1.so.0 (0x8010be000)
libsvn_fs_util-1.so.0 => /usr/local/lib/libsvn_fs_util-1.so.0
(0x801115000)
libsvn_ra_svn-1.so.0 => /usr/local/lib/libsvn_ra_svn-1.so.0
(0x80111a000)
libsvn_ra_serf-1.so.0 => /usr/local/lib/libsvn_ra_serf-1.so.0
(0x801143000)
libserf-1.so.1 => /usr/local/lib/libserf-1.so.1 (0x801179000)
libexpat.so.1 => /usr/local/lib/libexpat.so.1 (0x8011b8000)
libz.so.6 => /lib/libz.so.6 (0x8011e5000)
libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x801201000)
libmagic.so.4 => /usr/lib/libmagic.so.4 (0x8013a5000)
liblz4.so.1 => /usr/local/lib/liblz4.so.1 (0x8013cf000)
libutf8proc.so.2 => /usr/local/lib/libutf8proc.so.2 (0x8013fd000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x801452000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x801461000)
libssl.so.111 => /usr/lib/libssl.so.111 (0x801482000)
libcrypto.so.111 => /lib/libcrypto.so.111 (0x80151a000)
libm.so.5 => /lib/libm.so.5 (0x80180c000)
]]]
--
// Black Lion AKA Lev Serebryakov