still OK mariani@ Tested again with qbittorrent 4.3.5 Just waiting for this update to commit.
Cheers. On Sun, May 16, 2021 at 6:37 AM Nam Nguyen <n...@berkeley.edu> wrote: > > Stuart Henderson writes: > > > I suggest using ${MODPY_EGG_VERSION} in setup.py and instead of cp, > > use "${SUBST_CMD} -m $mode -c $file1 $file2" > > >> RCS file: files/setup.py > >> diff -N files/setup.py > >> --- /dev/null 1 Jan 1970 00:00:00 -0000 > >> +++ files/setup.py 5 Apr 2021 05:36:16 -0000 > >> @@ -0,0 +1,195 @@ > >> +#!/usr/bin/env python3 > > > > ${MODPY_BIN} here perhaps? > > Here is a fresh diff. It does the following: > - Uses ${MODPY_EGG_VERSION} and SUBST_CMD in setup.py to only have to > update version in one place (from sthen@) > - Uses ${MODPY_BIN} in ${FILESDIR}/setup.py (from sthen@) > - Removes -L{LOCALBASE}/lib in ${FILESDIR}/setup.py. Python bindings > incorrectly linked -ltorrent-rasterbar with > /usr/local/lib/libtorrent-rasterbar.so.3.0 instead of the freshly > built ${WRKSRC}/src/.libs/libtorrent-rasterbar.so.4.0. > > To do this I modified ${FILESDIR}/setup.py: > cfg_vars[key] = value.replace('-L${LOCALBASE}/lib/', '') > > mariani@ still OK? Looking for another OK in addition to > commit. Feedback and tests are welcome. > > Details > ======= > Steps to reproduce: > 1. pkg_add libtorrent-rasterbar (1.2.10p0) > 2. /usr/local/lib/libtorrent-rasterbar.so.3.0 is picked up. > 3. install this version 1.2.13 > 4. import libtorrent in python interpreter > > $ python3 > Python 3.8.8 (default, Apr 28 2021, 15:17:34) > [Clang 11.1.0 ] on openbsd6 > Type "help", "copyright", "credits" or "license" for more information. > >>> import libtorrent > python3:/usr/local/lib/python3.8/site-packages/libtorrent.cpython-38.so: > undefined symbol '_ZN10libtorrent14session_handle6pausedE' > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > ImportError: Cannot load specified object > > Set a breakpoint in ${FILESDIR}/setup.py before ext = [Extension( > import pdb; pdb.set_trace() > > Note "-L/usr/local/lib" in BLDSHARED and LDSHARED. > > (Pdb) print(cfg_vars) > {'ABIFLAGS': '', 'AC_APPLE_UNIVERSAL_BUILD': 0, > 'AIX_GENUINE_CPLUSPLUS': 0, 'ALT_SOABI': 0, 'ANDROID_API_LEVEL': 0, > 'AR': 'ar', 'ARFLAGS': 'rcs', 'BASECFLAGS': '-Wno-unused-result > -Wsign-compare -Wunreachable-code', 'BASECPPFLAGS': '', 'BASEMODLIBS': > '', 'BINDIR': '/usr/local/bin', 'BINLIBDEST': > '/usr/local/lib/python3.8', 'BLDLIBRARY': '-L. -lpython3.8', > 'BLDSHARED': 'cc -pthread -shared -fPIC -L/usr/local/lib/ > -L/usr/obj/ports/Python-3.8.8/Python-3.8.8 -L/usr/local/lib/', > ... > 'LDSHARED': 'cc -pthread -shared -fPIC -L/usr/local/lib/ > -L/usr/obj/ports/Python-3.8.8/Python-3.8.8 -L/usr/local/lib/' > > This is the problematic line with the first two -L/usr/local/lib messing > up the search path for -ltorrent-rasterbar. With the fix, these two go > away: > > c++ -pthread -shared -fPIC -L/usr/local/lib/ > -L/usr/obj/ports/Python-3.8.8/Python-3.8.8 -L/usr/local/lib/ -O2 -pipe > bindings/python/src/alert.o > ... > -L../../src/.libs -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib > -ltorrent-rasterbar -lboost_system-mt -lpthread -lboost_system-mt > -lboost_python38-mt -lpthread -lssl -lcrypto -o > build/lib.openbsd-6.9-amd64-3.8/libtorrent.cpython-38.so -fvisibility=hidden > -fvisibility-inlines-hidden /usr/local/lib/libiconv.so.7.0 > > > On 2021/04/24 01:47, Nam Nguyen wrote: > >> "Elias M. Mariani" writes: > >> > >> > Tested build on amd64. > >> > > >> > OK mariani@ > >> > >> Ping for 1.2.13 update. The diff is pasted inline for convenience. I > >> would like another OK in addition to mariani@'s, focusing on my proposal > >> that carrying an old 1.2.11 ${FILESDIR}/setup.py is maintainable (with > >> backup plan going back to b2 and new setup.py if it ever stops > >> working). rsadowski@ gave an OK on an older 1.2.11 diff. > >> > >> > > >> > Cheers. > >> > > >> > > >> > On Mon, Apr 5, 2021 at 3:28 AM Nam Nguyen <n...@berkeley.edu> wrote: > >> > >> >> Here is a fresh diff with some tweaks. Need some additional feedback on > >> >> carrying the old 1.2.11 ${FILESDIR}/setup.py. > >> >> > >> >> Please find a fresh diff that additionally: > >> >> - remove autotools and use CONFIGURE_STYLE = gnu now that my pull > >> >> request was accepted for 1.2.13. configure now correctly detects the > >> >> default C++ standard. see: > >> >> https://github.com/arvidn/libtorrent/pull/5026 > >> >> - removes patches/patch-configure_ac > >> >> > >> >> as before: > >> >> - major bump because check_sym reports removed symbols. one such removed > >> >> symbol is parameter change for add_read_buffer: > >> >> see: > >> >> https://github.com/arvidn/libtorrent/commit/6522fc46f599c49f96d184498e2ce2e4d95ed0ea > >> >> check_sym: https://namtsui.com/public/check_sym_libtorrent.txt > >> >> - carry ${FILESDIR}/setup.py from 1.2.11 because 1.2.12 relies on > >> >> boost-build (see justification inline). > >> >> > >> >> Carrying an old setup.py is relatively safe. I have a hacky WIP that > >> >> actually successfully builds libtorrent-rasterbar using the new setup.py > >> >> and boost-build (b2). There are unresolved issues: > >> >> - I had to create /usr/local/lib/libtorrent-rasterbar.so because the new > >> >> setup.py cannot cope with openbsd's versioning (e.g., > >> >> libtorrent-rasterbar.so.4.0) > >> >> - I needed to specify BOOST_ROOT as boost's ${WRKSRC}. This means that > >> >> the boost source, including jamfiles, must be provided. > >> >> - boost must provide b2 > >> >> > >> >> It is possible to use b2, but, for now, just carry the old > >> >> setup.py. This can be fleshed out if setup.py ever stops working. > >> >> > >> >> I tested with deluge and qbittorrent. The test suite in a similar state > >> >> with 2 skipped. > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/net/libtorrent-rasterbar/Makefile,v > retrieving revision 1.15 > diff -u -p -u -p -r1.15 Makefile > --- Makefile 23 Feb 2021 19:39:32 -0000 1.15 > +++ Makefile 16 May 2021 09:23:46 -0000 > @@ -2,11 +2,10 @@ > > COMMENT = C++ library implementing a BitTorrent client > > -MODPY_EGG_VERSION = 1.2.10 > +MODPY_EGG_VERSION = 1.2.13 > DISTNAME = libtorrent-rasterbar-${MODPY_EGG_VERSION} > -REVISION = 0 > > -SHARED_LIBS += torrent-rasterbar 3.0 # 10.0.0 > +SHARED_LIBS += torrent-rasterbar 4.0 # 10.0.0 > > CATEGORIES = net devel > > @@ -18,7 +17,7 @@ PERMIT_PACKAGE = Yes > WANTLIB += ${COMPILER_LIBCXX} boost_python${MODPY_VERSION:C/\.//g}-mt > WANTLIB += boost_system-mt crypto iconv m ssl > > -MASTER_SITES = > https://github.com/arvidn/libtorrent/releases/download/libtorrent-${MODPY_EGG_VERSION}/ > +MASTER_SITES = > https://github.com/arvidn/libtorrent/releases/download/v${MODPY_EGG_VERSION}/ > > MODULES = lang/python > > @@ -30,10 +29,7 @@ LIB_DEPENDS = converters/libiconv \ > # boost > COMPILER = base-clang ports-gcc > > -CONFIGURE_STYLE = autoreconf > - > -AUTOCONF_VERSION = 2.69 > -AUTOMAKE_VERSION = 1.16 > +CONFIGURE_STYLE = gnu > > CONFIGURE_ARGS = --enable-python-binding \ > --enable-tests \ > @@ -53,6 +49,9 @@ CONFIGURE_ARGS += --enable-debug > > pre-configure: > sed -i 's,-Os,,g' ${WRKSRC}/configure > +# use setup.py from 1.2.11 because >=1.2.12 introduced dependency on > boost-build > + ${SUBST_CMD} -m 644 -c ${FILESDIR}/setup.py \ > + ${WRKSRC}/bindings/python/setup.py > > pre-test: > ln -sf ${MODPY_BIN} ${WRKDIR}/bin/python > Index: distinfo > =================================================================== > RCS file: /cvs/ports/net/libtorrent-rasterbar/distinfo,v > retrieving revision 1.8 > diff -u -p -u -p -r1.8 distinfo > --- distinfo 7 Sep 2020 04:24:17 -0000 1.8 > +++ distinfo 16 May 2021 09:23:46 -0000 > @@ -1,2 +1,2 @@ > -SHA256 (libtorrent-rasterbar-1.2.10.tar.gz) = > 0N0wvcOSZYfEJB9AaNjjliimwfn2z1MZXw6byQAXvvs= > -SIZE (libtorrent-rasterbar-1.2.10.tar.gz) = 4128498 > +SHA256 (libtorrent-rasterbar-1.2.13.tar.gz) = > l20ncf/NVk8IpjNR6cIuhCqqjNKfb3/iXRacA4qEToU= > +SIZE (libtorrent-rasterbar-1.2.13.tar.gz) = 4160116 > Index: files/setup.py > =================================================================== > RCS file: files/setup.py > diff -N files/setup.py > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ files/setup.py 16 May 2021 09:23:46 -0000 > @@ -0,0 +1,196 @@ > +#!${MODPY_BIN} > + > + > +from distutils.core import setup, Extension > +from distutils.sysconfig import get_config_vars > +import os > +import platform > +import sys > +import shutil > +import multiprocessing > + > + > +class flags_parser: > + def __init__(self): > + self.include_dirs = [] > + self.library_dirs = [] > + self.libraries = [] > + > + def parse(self, args): > + """Parse out the -I -L -l directives > + > + Returns: > + list: All other arguments > + """ > + ret = [] > + for token in args.split(): > + prefix = token[:2] > + if prefix == '-I': > + self.include_dirs.append(token[2:]) > + elif prefix == '-L': > + self.library_dirs.append(token[2:]) > + elif prefix == '-l': > + self.libraries.append(token[2:]) > + else: > + ret.append(token) > + return ret > + > + > +def arch(): > + if platform.system() == 'Darwin': > + __, __, machine = platform.mac_ver() > + if machine.startswith('ppc'): > + return ['-arch', machine] > + return [] > + > + > +def target_specific(): > + if platform.system() == 'Darwin': > + # On mavericks, clang will fail when unknown arguments are passed in. > + # python distutils will pass in arguments it doesn't know about. > + return > ['-Wno-error=unused-command-line-argument-hard-error-in-future'] > + return [] > + > + > +try: > + with open('compile_flags') as _file: > + extra_cmd = _file.read() > +except Exception: > + extra_cmd = None > + > +try: > + with open('link_flags') as _file: > + ldflags = _file.read() > +except Exception: > + ldflags = None > + > +# this is to pull out compiler arguments from the CXX flags set up by the > +# configure script. Specifically, the -std=c++11 flag is added to CXX and > here > +# we pull out everything starting from the first flag (i.e. something > starting > +# with a '-'). The actual command to call the compiler may be more than one > +# word, for instance "ccache g++". > +try: > + with open('compile_cmd') as _file: > + cmd = _file.read().split(' ') > + while len(cmd) > 0 and not cmd[0].startswith('-'): > + cmd = cmd[1:] > + extra_cmd += ' '.join(cmd) > +except Exception: > + pass > + > +ext = None > +packages = None > + > +if '--bjam' in sys.argv: > + del sys.argv[sys.argv.index('--bjam')] > + > + if '--help' not in sys.argv \ > + and '--help-commands' not in sys.argv: > + > + toolset = '' > + file_ext = '.so' > + > + if platform.system() == 'Windows': > + file_ext = '.pyd' > + # See https://wiki.python.org/moin/WindowsCompilers for a table > of msvc versions > + # used for each python version > + # Specify the full version number for 9.0 and 10.0 because > apparently > + # older versions of boost don't support only specifying the > major number and > + # there was only one version of msvc with those majors. > + # Only specify the major for msvc-14 so that 14.1, 14.11, etc > can be used. > + # Hopefully people building with msvc-14 are using a new enough > version of boost > + # for this to work. > + if sys.version_info[0:2] in ((2, 6), (2, 7), (3, 0), (3, 1), (3, > 2)): > + toolset = ' toolset=msvc-9.0' > + elif sys.version_info[0:2] in ((3, 3), (3, 4)): > + toolset = ' toolset=msvc-10.0' > + elif sys.version_info[0:2] in ((3, 5), (3, 6)): > + toolset = ' toolset=msvc-14' > + else: > + # unknown python version, lets hope the user has the right > version of msvc configured > + toolset = ' toolset=msvc' > + > + parallel_builds = ' -j%d' % multiprocessing.cpu_count() > + if sys.maxsize > 2**32: > + address_model = ' address-model=64' > + else: > + address_model = ' address-model=32' > + > + # add extra quoting around the path to prevent bjam from parsing it > as a list > + # if the path has spaces > + os.environ['LIBTORRENT_PYTHON_INTERPRETER'] = '"' + sys.executable + > '"' > + > + # build libtorrent using bjam and build the installer with distutils > + cmdline = ('b2 libtorrent-link=static boost-link=static release ' > + 'optimization=space stage_module --abbreviate-paths' + > + address_model + toolset + parallel_builds) > + print(cmdline) > + if os.system(cmdline) != 0: > + print('build failed') > + sys.exit(1) > + > + try: > + os.mkdir('build') > + except Exception: > + pass > + try: > + shutil.rmtree('build/lib') > + except Exception: > + pass > + try: > + os.mkdir('build/lib') > + except Exception: > + pass > + try: > + os.mkdir('libtorrent') > + except Exception: > + pass > + shutil.copyfile('libtorrent' + file_ext, > + 'build/lib/libtorrent' + file_ext) > + > + packages = ['libtorrent'] > + > +else: > + # Remove '-Wstrict-prototypes' compiler option, which isn't valid for > C++. > + cfg_vars = get_config_vars() > + for key, value in list(cfg_vars.items()): > + if isinstance(value, str): > + cfg_vars[key] = value.replace('-Wstrict-prototypes', '') > + cfg_vars[key] = value.replace('-L${LOCALBASE}/lib/', '') > + > + src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "src")) > + source_list = [os.path.join(src_dir, s) for s in os.listdir(src_dir) if > s.endswith(".cpp")] > + > + flags = flags_parser() > + ext_extra = {} > + > + if ldflags: > + # ldflags parsed first to ensure the correct library search path > order > + ext_extra["extra_link_args"] = flags.parse(ldflags) + arch() > + > + if extra_cmd: > + ext_extra["extra_compile_args"] = flags.parse(extra_cmd) + arch() + > target_specific() > + > + ext = [Extension( > + 'libtorrent', > + sources=sorted(source_list), > + language='c++', > + include_dirs=flags.include_dirs, > + library_dirs=flags.library_dirs, > + libraries=['torrent-rasterbar'] + flags.libraries, > + **ext_extra) > + ] > + > +setup( > + name='python-libtorrent', > + version='${MODPY_EGG_VERSION}', > + author='Arvid Norberg', > + author_email='ar...@libtorrent.org', > + description='Python bindings for libtorrent-rasterbar', > + long_description='Python bindings for libtorrent-rasterbar', > + url='http://libtorrent.org', > + platforms=[platform.system() + '-' + platform.machine()], > + license='BSD', > + packages=packages, > + ext_modules=ext > +) > Index: patches/patch-configure_ac > =================================================================== > RCS file: patches/patch-configure_ac > diff -N patches/patch-configure_ac > --- patches/patch-configure_ac 4 Sep 2020 04:24:28 -0000 1.1 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,17 +0,0 @@ > -$OpenBSD: patch-configure_ac,v 1.1 2020/09/04 04:24:28 rsadowski Exp $ > - > -use c++14 instead of c++11. see: > -https://github.com/arvidn/libtorrent/pull/5026 > - > -Index: configure.ac > ---- configure.ac.orig > -+++ configure.ac > -@@ -144,7 +144,7 @@ AS_ECHO "Checking for boost libraries:" > - > - AX_BOOST_BASE([1.58]) > - > --AX_CXX_COMPILE_STDCXX_11([noext], [mandatory]) > -+AX_CXX_COMPILE_STDCXX(14, [noext], [mandatory]) > - > - AX_BOOST_SYSTEM() > - AS_IF([test -z "$BOOST_SYSTEM_LIB"], > Index: patches/patch-include_libtorrent_config_hpp > =================================================================== > RCS file: > /cvs/ports/net/libtorrent-rasterbar/patches/patch-include_libtorrent_config_hpp,v > retrieving revision 1.4 > diff -u -p -u -p -r1.4 patch-include_libtorrent_config_hpp > --- patches/patch-include_libtorrent_config_hpp 4 Sep 2020 04:24:28 -0000 > 1.4 > +++ patches/patch-include_libtorrent_config_hpp 16 May 2021 09:23:46 -0000 > @@ -2,7 +2,7 @@ $OpenBSD: patch-include_libtorrent_confi > Index: include/libtorrent/config.hpp > --- include/libtorrent/config.hpp.orig > +++ include/libtorrent/config.hpp > -@@ -414,6 +414,10 @@ POSSIBILITY OF SUCH DAMAGE. > +@@ -429,6 +429,10 @@ POSSIBILITY OF SUCH DAMAGE. > #define TORRENT_USE_UNC_PATHS 0 > #endif > > Index: pkg/PLIST > =================================================================== > RCS file: /cvs/ports/net/libtorrent-rasterbar/pkg/PLIST,v > retrieving revision 1.6 > diff -u -p -u -p -r1.6 PLIST > --- pkg/PLIST 4 Jan 2021 14:06:35 -0000 1.6 > +++ pkg/PLIST 16 May 2021 09:23:46 -0000 > @@ -43,6 +43,7 @@ include/libtorrent/aux_/noexcept_movable > include/libtorrent/aux_/numeric_cast.hpp > include/libtorrent/aux_/openssl.hpp > include/libtorrent/aux_/path.hpp > +include/libtorrent/aux_/pool.hpp > include/libtorrent/aux_/portmap.hpp > include/libtorrent/aux_/proxy_settings.hpp > include/libtorrent/aux_/range.hpp