drgn/scripts/build_manylinux_in_docker.sh
Omar Sandoval ad23378977 Update elfutils and libkdumpfile in manylinux wheels
Use the latest version of elfutils (0.186) and libkdumpfile (0.4.1). We
can drop the elfutils patch since 0.186 has the fix (and we have our own
workaround), but we need a new patch to build libkdumpfile.

Signed-off-by: Omar Sandoval <osandov@osandov.com>
2021-12-08 15:13:09 -08:00

99 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
set -eux
# Drop into a shell if something fails.
trap 'if [ $? -ne 0 ]; then exec bash -i; fi' EXIT
yum install -y \
bzip2-devel \
libzstd-devel \
lzo-devel \
snappy-devel \
xz-devel \
zlib-devel
# The manylinux image contains an upgraded autotools in /usr/local, but the
# pkg-config macros are not present for this upgraded package. See
# https://github.com/pypa/manylinux/issues/731.
ln -s /usr/share/aclocal/pkg.m4 /usr/local/share/aclocal/
# Install a recent version of elfutils instead of whatever is in the manylinux
# image.
elfutils_version=0.186
elfutils_url=https://sourceware.org/elfutils/ftp/$elfutils_version/elfutils-$elfutils_version.tar.bz2
mkdir /tmp/elfutils
cd /tmp/elfutils
curl -L "$elfutils_url" | tar -xj --strip-components=1
# We don't bother with debuginfod support for a few reasons:
#
# 1. It depends on libcurl, which would pull in a bunch of transitive
# dependencies.
# 2. libdw loads libdebuginfod with dlopen(), which auditwheel misses.
# 3. drgn hasn't been tested with debuginfod.
./configure --disable-libdebuginfod --disable-debuginfod
make -j$(($(nproc) + 1))
make install
libkdumpfile_version=0.4.1
libkdumpfile_url=https://github.com/ptesarik/libkdumpfile/releases/download/v$libkdumpfile_version/libkdumpfile-$libkdumpfile_version.tar.gz
mkdir /tmp/libkdumpfile
cd /tmp/libkdumpfile
curl -L "$libkdumpfile_url" | tar -xz --strip-components=1
# This file is missing an include of limits.h which it accidentally gets from
# zlib.h via zconf.h, but only since zlib 1.2.7. CentOS 6 has 1.2.3.
patch -p1 << "EOF"
diff --git a/src/kdumpfile/util.c b/src/kdumpfile/util.c
index 4fb2960..14e1ce3 100644
--- a/src/kdumpfile/util.c
+++ b/src/kdumpfile/util.c
@@ -38,6 +38,7 @@
#include <stdio.h>
#include <stdarg.h>
#include <errno.h>
+#include <limits.h>
#if USE_ZLIB
# include <zlib.h>
EOF
# z_const was added in zlib 1.2.5.2.
CPPFLAGS="-Dz_const=const" ./configure --with-lzo --with-snappy --with-zlib --without-python
make -j$(($(nproc) + 1))
make install
ldconfig
mkdir /tmp/drgn
cd /tmp/drgn
tar -xf "/io/$SDIST" --strip-components=1
python_supported() {
"$1" -c 'import sys; sys.exit(sys.version_info < (3, 6))'
}
for pybin in /opt/python/cp*/bin; do
if python_supported "$pybin/python"; then
# static_assert was added to assert.h in glibc 2.16, but CentOS
# 6 has 2.12.
CPPFLAGS="-Dstatic_assert=_Static_assert" "$pybin/pip" wheel . --no-deps -w /tmp/wheels/
fi
done
for wheel in /tmp/wheels/*.whl; do
if auditwheel show "$wheel"; then
auditwheel repair "$wheel" --plat "$PLAT" -w /tmp/manylinux_wheels/
else
echo "Skipping non-platform wheel $wheel"
fi
done
for pybin in /opt/python/cp*/bin; do
if python_supported "$pybin/python"; then
"$pybin/pip" install drgn --no-index -f /tmp/manylinux_wheels/
"$pybin/drgn" --version
fi
done
chown "$OWNER" /tmp/manylinux_wheels/*
mv /tmp/manylinux_wheels/* /io/dist/