Adding manylinux2010 github action

- Validates that the manylinux2010 environment can build pycapnp
- Handle lib and lib64 cases
- Has patch for aligned_alloc symbol (not available prior to glibc 2.16)
https://github.com/capnproto/capnproto/issues/743
- Fixes #197
- Should be ready to prepare a v1.0.0b1 release
This commit is contained in:
Jacob Alexander
2019-12-16 22:29:20 -08:00
parent 6b89d6bd4b
commit 6cd971e74f
3 changed files with 40 additions and 0 deletions

26
.github/workflows/manylinux2010.yml vendored Normal file
View File

@@ -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

View File

@@ -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=''
)

View File

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