"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 5 Apr 2021 05:36:16 -0000 @@ -2,11 +2,11 @@ COMMENT = C++ library implementing a BitTorrent client -MODPY_EGG_VERSION = 1.2.10 +# remember to update version number in ${FILESDIR}/setup.py +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 +18,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 +30,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 +50,8 @@ 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 + @cp ${FILESDIR}/setup.py ${WRKSRC}/bindings/python 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 5 Apr 2021 05:36:16 -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 5 Apr 2021 05:36:16 -0000 @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 + + +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', '') + + 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='1.2.13', + 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 5 Apr 2021 05:36:16 -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 5 Apr 2021 05:36:16 -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