diff --git a/.github/workflows/manylinux2010.yml b/.github/workflows/manylinux2010.yml new file mode 100644 index 0000000..281fd56 --- /dev/null +++ b/.github/workflows/manylinux2010.yml @@ -0,0 +1,26 @@ +name: manylinux2010 + +on: [push, pull_request] + +jobs: + manylinux2010: + + runs-on: ubuntu-latest + container: ${{ matrix.container-image }} + strategy: + matrix: + python-version: ['cp37-cp37m', 'cp38-cp38'] + container-image: ['quay.io/pypa/manylinux2010_x86_64', 'quay.io/pypa/manylinux2010_i686'] + + steps: + - uses: actions/checkout@v1 + # capnproto build requires cmake 3+, CentOS 6 (manylinux2010) defaults to cmake 2.8 + - name: Install dependencies + run: | + yum install -y cmake3 ninja-build + ln -sf /usr/bin/cmake3 /usr/local/bin/cmake + ln -s /usr/bin/ninja-build /usr/local/bin/ninja + /opt/python/${{ matrix.python-version }}/bin/python -m pip install -r requirements.txt + - name: Build pycapnp and install + run: | + /opt/python/${{ matrix.python-version }}/bin/python setup.py build diff --git a/buildutils/bundle.py b/buildutils/bundle.py index ce534d3..5b4d9f5 100644 --- a/buildutils/bundle.py +++ b/buildutils/bundle.py @@ -11,6 +11,7 @@ # for original project. +import fileinput import os import shutil import tarfile @@ -91,3 +92,14 @@ def fetch_libcapnp(savedir, url=None): else: cpp_dir = os.path.join(with_version, 'c++') shutil.move(cpp_dir, dest) + + # XXX (HaaTa): There's a bug in capnproto-0.7.0 on CentOS 6 (or any glibc older than 2.16) + # This patches the issue + with fileinput.FileInput(os.path.join(dest, 'src', 'kj', 'table.c++'), inplace=True, backup='.bak') as f: + for line in f: + print( + line.replace( + '__APPLE__ || __BIONIC__', '__APPLE__ || __BIONIC__ || (defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ < 16))' + ), + end='' + ) diff --git a/setup.py b/setup.py index f6f6ac3..c1e8cb0 100644 --- a/setup.py +++ b/setup.py @@ -119,6 +119,7 @@ class build_libcapnp_ext(build_ext_c): capnp_executable = find_executable("capnp") if capnp_executable: self.include_dirs += [os.path.join(os.path.dirname(capnp_executable), '..', 'include')] + self.library_dirs += [os.path.join(os.path.dirname(capnp_executable), '..', 'lib{}'.format(8 * struct.calcsize("P")))] self.library_dirs += [os.path.join(os.path.dirname(capnp_executable), '..', 'lib')] # Try to autodetect presence of library. Requires compile/run @@ -156,6 +157,7 @@ class build_libcapnp_ext(build_ext_c): info("capnproto already built at {}".format(build_dir)) self.include_dirs += [os.path.join(build_dir, 'include')] + self.library_dirs += [os.path.join(build_dir, 'lib{}'.format(8 * struct.calcsize("P")))] self.library_dirs += [os.path.join(build_dir, 'lib')] return build_ext_c.run(self)