Re: update net/libtorrent-rasterbar 1.2.11

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: update net/libtorrent-rasterbar 1.2.11

Elias M. Mariani-3
Hi.
Just giving a bump and attaching a new diff for 1.2.13 based on the previous one from Nam.

Tested with qbittorrent (v4.3.1 and v4.3.4.1) and deluge.

I need this updated to push a new version of qbittorrent (4.3.4.1).

OK?

Cheers.
Elias mariani@

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/libtorrent-rasterbar/Makefile,v
retrieving revision 1.15
diff -u -p -r1.15 Makefile
--- Makefile 23 Feb 2021 19:39:32 -0000 1.15
+++ Makefile 3 Apr 2021 20:44:01 -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
 
@@ -53,6 +53,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 -r1.8 distinfo
--- distinfo 7 Sep 2020 04:24:17 -0000 1.8
+++ distinfo 3 Apr 2021 20:44:01 -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 3 Apr 2021 20:44:01 -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='[hidden email]',
+    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 -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 3 Apr 2021 20:44:01 -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 -r1.6 PLIST
--- pkg/PLIST 4 Jan 2021 14:06:35 -0000 1.6
+++ pkg/PLIST 3 Apr 2021 20:44:02 -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
On Sat, Feb 6, 2021 at 3:54 AM Elias M. Mariani <[hidden email]> wrote:

>
> Tested the diff for 1.2.12 from Nam.
> Working OK with qbittorrent 4.3.3.
>
> portcheck complains about a "1 line(s) longer than 80 chars in
> Makefile" but is just the MASTER_SITES one.
> make port-lib-depends-check is OK
>
> OK mariani@
>
> No opinions about setup.py. I don't have the knowledge to take a stand.
>
> Cheers.
> Elias.
>
> On Tue, Jan 19, 2021 at 1:01 AM Nam Nguyen <[hidden email]> wrote:
> >
> > 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='[hidden email]',
> > +    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 | Threaded
Open this post in threaded view
|

Re: update net/libtorrent-rasterbar 1.2.11

Nam Nguyen
Elias M. Mariani writes:

> Hi.
> Just giving a bump and attaching a new diff for 1.2.13 based on the
> previous one from Nam.

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).

>
> Tested with qbittorrent (v4.3.1 and v4.3.4.1) and deluge.
>
> I need this updated to push a new version of qbittorrent (4.3.4.1).
>
> OK?

> On Sat, Feb 6, 2021 at 3:54 AM Elias M. Mariani <[hidden email]> wrote:
>>
>> Tested the diff for 1.2.12 from Nam.
>> Working OK with qbittorrent 4.3.3.
>>
>> portcheck complains about a "1 line(s) longer than 80 chars in
>> Makefile" but is just the MASTER_SITES one.
>> make port-lib-depends-check is OK
>>
>> OK mariani@
>>
>> No opinions about setup.py. I don't have the knowledge to take a
>> stand.

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.

>>
>> Cheers.
>> Elias.

<snip>

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='[hidden email]',
+    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

Reply | Threaded
Open this post in threaded view
|

Re: update net/libtorrent-rasterbar 1.2.11

Elias M. Mariani
Tested build on amd64.

OK mariani@

Cheers.


On Mon, Apr 5, 2021 at 3:28 AM Nam Nguyen <[hidden email]> wrote:

>
> Elias M. Mariani writes:
>
> > Hi.
> > Just giving a bump and attaching a new diff for 1.2.13 based on the
> > previous one from Nam.
>
> 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).
>
> >
> > Tested with qbittorrent (v4.3.1 and v4.3.4.1) and deluge.
> >
> > I need this updated to push a new version of qbittorrent (4.3.4.1).
> >
> > OK?
>
> > On Sat, Feb 6, 2021 at 3:54 AM Elias M. Mariani <[hidden email]> wrote:
> >>
> >> Tested the diff for 1.2.12 from Nam.
> >> Working OK with qbittorrent 4.3.3.
> >>
> >> portcheck complains about a "1 line(s) longer than 80 chars in
> >> Makefile" but is just the MASTER_SITES one.
> >> make port-lib-depends-check is OK
> >>
> >> OK mariani@
> >>
> >> No opinions about setup.py. I don't have the knowledge to take a
> >> stand.
>
> 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.
>
> >>
> >> Cheers.
> >> Elias.
>
> <snip>
>
> 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='[hidden email]',
> +    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
>