Rafael Sadowski writes:

> On Mon Dec 28, 2020 at 04:04:42AM -0800, Nam Nguyen wrote:
>> Here is a diff to update libtorrent-rasterbar to 1.2.11, released on
>> Nov. 15, 2020.

Here is a diff for 1.2.12 which was released on Jan. 5, 2021. I have not
yet committed 1.2.11 which was OK rsadowski@, so I'm proposing this
newer update instead.

changelog: https://github.com/arvidn/libtorrent/releases/tag/v1.2.12

This diff additionally:
- uses a local copy of 1.2.11's ${WRKSRC}/bindings/setup.py because
  1.2.12 relies on boost-build, which has been removed from devel/boost

For now, I propose carrying a copy of 1.2.11's
${WRKSRC}/bindings/python/setup.py until boost-build is built
again. ${FILESDIR}/setup.py needs to be updated manually with each
update (e.g., 1.2.12).

Questions:
1. Is carrying an old setup.py worth the maintenance burden?
2. Will boost-build return in the future once python 3 support becomes
   better? It may not be worth it just for this port.

Testing
-------
I tested consumers in net/deluge and net/qbittorrent. A new unit test is
skipped for test_pex, which used to pass. It has been resolved upstream:
https://github.com/arvidn/libtorrent/issues/5863

>> 
>> changelog: https://github.com/arvidn/libtorrent/releases/tag/v1.2.11
>> 
>> This diff:
>> - bumps library major due to symbol deprecation
>> - changes MASTER_SITES to properly download the new release
>> 
>> I tested with qbittorrent and deluge. `make test' skips the same tests
>> as the previous release (test_lsd and test_primitives).
>> 
>> OK?
>
> It has built cleanly and port-wise it looks fine. OK rsadowski@
>
[snip]

Brad Smith writes:

> Well the only question I have is if we remove this does anything in
> the ports tree
> depend it for building anything? If not, then I'd say go with removing
> it all together
> for the time being until it is updated to be compatible with Python
> 3. If the answer
> is yes then how many ports?

I see from revision 1.103 of devel/boost/Makefile, "boost-build also
leaves as collateral damage, its python files aren't ready for python3
and it's not clear how useful they are."

FreeBSD also reports rare usage of boost-build: "Not one other port out
of 30,000 uses boost-build, so it is likely untested."

https://github.com/arvidn/libtorrent/issues/5797

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/libtorrent-rasterbar/Makefile,v
retrieving revision 1.14
diff -u -p -u -p -r1.14 Makefile
--- Makefile    4 Jan 2021 14:06:35 -0000       1.14
+++ Makefile    19 Jan 2021 03:36:35 -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.12
 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
 MODPY_VERSION =                ${MODPY_DEFAULT_VERSION_3}
@@ -54,6 +54,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    19 Jan 2021 03:36:35 -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.12.tar.gz) = 
w3RKyfpB9ubr95U4oupnjfdqLLuvOsauLAVFUxTlzOg=
+SIZE (libtorrent-rasterbar-1.2.12.tar.gz) = 4144099
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      19 Jan 2021 03:36:35 -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.12',
+    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-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 19 Jan 2021 03:36:35 -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   19 Jan 2021 03:36:35 -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

Reply via email to