Brad Smith writes: > Here is an update to libtorrent-rasterbar 1.2.16.
Thanks I had something similar in my local tree. This diff additionally: - removes ${FILESDIR}/setup.py and uses boost-build. This depends on a diff for devel/boost to install b2 and bjam. I will send this after this e-mail. The motivation is to lower maintenance of carrying a local copy of setup.py with an upside of easier transition to 2.0 in the future. - minor bump to 5.1 instead of major bump check_sym shows added symbols. see: https://github.com/arvidn/libtorrent/commit/175c20a897ce29a6ba42b564d015d90d7dceefb1 https://github.com/arvidn/libtorrent/commit/9a73ab76233fecd4948a32169d07086d871fc939 Diffing reveals that a function in a public header was removed. Specifically, libtorrent::dh_key_exchange::good() in include/libtorrent/pe_crypto.hpp was removed. see: https://github.com/arvidn/libtorrent/commit/175c20a897ce29a6ba42b564d015d90d7dceefb1 Is my understanding correct? good() has its definition in a header so it is inline and never shows up in the shared object (libtorrent-rasterbar.so.5.0). Even right above it in the same link, include/libtorrent/bt_peer_connection.hpp removes init_bt_handshake from enum class state_t. This enum class has changed. In these two cases, because they affect headers, consumers could include the header, but it never shows up in the shared object. Thus, no need to major bump? Testing ======= I was able to download a linux iso torrent with qbittorrent and deluge. Testers will need to apply the b2/bjam diff to devel/boost I will be sending shortly. Feedback and tests are welcome. OK? > > > 1.2.16 released > > * send User-Agent field in anonymous mode > * fix python binding for settings_pack conversion > * fix DHT announce timer issue > * use DSCP_TRAFFIC_TYPE socket option on windows > * update default ToS setting according to RFC 8622 > * keep trying to announce to trackers even when all fail > * don't disable announcing from local endpoints because of temporary > failures > * fix issue in parsing UPnP XML response with multiple forwarding > services Index: Makefile =================================================================== RCS file: /cvs/ports/net/libtorrent-rasterbar/Makefile,v retrieving revision 1.21 diff -u -p -u -p -r1.21 Makefile --- Makefile 11 Mar 2022 19:46:17 -0000 1.21 +++ Makefile 17 May 2022 02:49:55 -0000 @@ -1,10 +1,9 @@ COMMENT = C++ library implementing a BitTorrent client -MODPY_EGG_VERSION = 1.2.15 +MODPY_EGG_VERSION = 1.2.16 DISTNAME = libtorrent-rasterbar-${MODPY_EGG_VERSION} -REVISION = 0 -SHARED_LIBS += torrent-rasterbar 5.0 # 10.0.0 +SHARED_LIBS += torrent-rasterbar 5.1 # 10.0.0 CATEGORIES = net devel @@ -13,13 +12,15 @@ HOMEPAGE = https://libtorrent.org/ # BSD3 PERMIT_PACKAGE = Yes -WANTLIB += ${COMPILER_LIBCXX} boost_python${MODPY_VERSION:C/\.//g}-mt -WANTLIB += boost_system-mt crypto iconv m ssl +WANTLIB += ${COMPILER_LIBCXX} boost_python${MODPY_VERSION:C/\.//g} +WANTLIB += boost_system boost_system-mt crypto iconv m ssl MASTER_SITES = https://github.com/arvidn/libtorrent/releases/download/v${MODPY_EGG_VERSION}/ MODULES = lang/python +MODPY_SETUPTOOLS = Yes + BUILD_DEPENDS = devel/libtool LIB_DEPENDS = converters/libiconv \ @@ -47,13 +48,18 @@ MAKE_ENV = CC="${CC}" CXX="${CXX}" CONFIGURE_ARGS += --enable-debug .endif +post-patch: + ${SUBST_CMD} ${WRKSRC}/Jamfile + 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 + +EGG = ${PREFIX}/lib/python${MODPY_VERSION}/site-packages/libtorrent-*.egg +post-install: + mv ${EGG}/libtorrent.cpython-${MODPY_VERSION:C/\.//g}.so ${EGG}/.. + rm -rf ${EGG} .include <bsd.port.mk> Index: distinfo =================================================================== RCS file: /cvs/ports/net/libtorrent-rasterbar/distinfo,v retrieving revision 1.10 diff -u -p -u -p -r1.10 distinfo --- distinfo 31 Dec 2021 00:31:16 -0000 1.10 +++ distinfo 17 May 2022 02:49:55 -0000 @@ -1,2 +1,2 @@ -SHA256 (libtorrent-rasterbar-1.2.15.tar.gz) = yK2GOGhMCpA+urwwSQB54xsaamONoq3sWovvag5iIUs= -SIZE (libtorrent-rasterbar-1.2.15.tar.gz) = 4163049 +SHA256 (libtorrent-rasterbar-1.2.16.tar.gz) = W9wiFmJUGr3DJN7Qp0tc0/MOYmCHEIC0pLMpX7CfAuA= +SIZE (libtorrent-rasterbar-1.2.16.tar.gz) = 4163867 Index: files/setup.py =================================================================== RCS file: files/setup.py diff -N files/setup.py --- files/setup.py 22 May 2021 21:47:28 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,196 +0,0 @@ -#!${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-Jamfile =================================================================== RCS file: patches/patch-Jamfile diff -N patches/patch-Jamfile --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-Jamfile 17 May 2022 02:49:55 -0000 @@ -0,0 +1,25 @@ +libtorrent.cpython-*.so fails to load libtorrent-rasterbar.so.10.0.0. +Give it the proper SHARED_LIB. + +Add include path to find boost headers. + +Index: Jamfile +--- Jamfile.orig ++++ Jamfile +@@ -46,7 +46,7 @@ else + + # we need version numbers in the form X.Y.Z in order to trigger the built-in + # support for generating symlinks to the installed library +-VERSION = 10.0.0 ; ++VERSION = ${LIBtorrent-rasterbar_VERSION} ; + + rule linking ( properties * ) + { +@@ -756,6 +756,7 @@ ED25519_SOURCES = + local usage-requirements = + <include>./include + <include>./include/libtorrent ++ <include>${LOCALBASE}/include + <include>/usr/sfw/include + <variant>release:<define>NDEBUG + <define>_FILE_OFFSET_BITS=64 Index: patches/patch-bindings_python_setup_py =================================================================== RCS file: patches/patch-bindings_python_setup_py diff -N patches/patch-bindings_python_setup_py --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-bindings_python_setup_py 17 May 2022 02:49:55 -0000 @@ -0,0 +1,23 @@ +Index: bindings/python/setup.py +--- bindings/python/setup.py.orig ++++ bindings/python/setup.py +@@ -207,7 +207,7 @@ class LibtorrentBuildExt(BuildExtBase): + def initialize_options(self): + + self.config_mode = self.CONFIG_MODE_DISTUTILS +- self.b2_args = "" ++ self.b2_args = "toolset=clang cxxstd=17 libtorrent-python-pic=on" + self.no_autoconf = "" + + self.cxxflags = None +@@ -365,8 +365,8 @@ class LibtorrentBuildExt(BuildExtBase): + if os.name == "nt": + self._maybe_add_arg("--abbreviate-paths") + +- self._maybe_add_arg("boost-link=static") +- self._maybe_add_arg("libtorrent-link=static") ++ self._maybe_add_arg("boost-link=shared") ++ self._maybe_add_arg("libtorrent-link=shared") + + self._maybe_add_arg("crypto=openssl") + Index: patches/patch-include_libtorrent_config_hpp =================================================================== RCS file: /cvs/ports/net/libtorrent-rasterbar/patches/patch-include_libtorrent_config_hpp,v retrieving revision 1.7 diff -u -p -u -p -r1.7 patch-include_libtorrent_config_hpp --- patches/patch-include_libtorrent_config_hpp 11 Mar 2022 19:46:17 -0000 1.7 +++ patches/patch-include_libtorrent_config_hpp 17 May 2022 02:49:55 -0000 @@ -1,7 +1,7 @@ Index: include/libtorrent/config.hpp --- include/libtorrent/config.hpp.orig +++ include/libtorrent/config.hpp -@@ -429,6 +429,10 @@ POSSIBILITY OF SUCH DAMAGE. +@@ -443,6 +443,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.8 diff -u -p -u -p -r1.8 PLIST --- pkg/PLIST 11 Mar 2022 19:46:17 -0000 1.8 +++ pkg/PLIST 17 May 2022 02:49:55 -0000 @@ -54,6 +54,7 @@ include/libtorrent/aux_/session_interfac include/libtorrent/aux_/session_settings.hpp include/libtorrent/aux_/session_udp_sockets.hpp include/libtorrent/aux_/set_socket_buffer.hpp +include/libtorrent/aux_/set_traffic_class.hpp include/libtorrent/aux_/socket_type.hpp include/libtorrent/aux_/storage_piece_set.hpp include/libtorrent/aux_/storage_utils.hpp @@ -253,7 +254,6 @@ lib/libtorrent-rasterbar.la @lib lib/libtorrent-rasterbar.so.${LIBtorrent-rasterbar_VERSION} lib/pkgconfig/libtorrent-rasterbar.pc @so lib/python${MODPY_VERSION}/site-packages/libtorrent.${MODPY_PYC_MAGIC_TAG}so -lib/python${MODPY_VERSION}/site-packages/python_libtorrent-${MODPY_EGG_VERSION}-py${MODPY_VERSION}.egg-info share/cmake/ share/cmake/Modules/ share/cmake/Modules/FindLibtorrentRasterbar.cmake